Block-devices onder Linux

Page 1

Storage: Block Devices Frederik Vos

Inhoudsopgave 1 Inleiding

1

2 Identificatie

2

3 Partitioneren

3

4 Formateren

3

5 Mounten

4

6 Hot-Pluggable

5

7 Auteur

6

1. Inleiding

Fibre Channel, iSCSI, Harddisks, USB disks en zelfs een cdrom- of dvd-speler hebben gemeenschappelijk dat het zogenaamde block-devices zijn. Een blockdevice is een interface naar een fysiek medium, zoals bijvoorbeeld een harddisk, zonder dat het besturingssysteem zich zorgen over hoeft te maken of het bijvoorbeeld gaat om een IDE of een SCSI disk. Wanneer je Linux gebruikt met daarop een desktop-omgeving als bijvoorbeeld KDE of Gnome, dan zijn er allerlei tools om de storage te identificeren, te formateren etc. En bij allerlei removable media zoals usb-sticks, zal wellicht de desktop het medium automatisch mounten. Op een server, zonder grafische omgeving, is dit allemaal niet het geval, en zal het handmatig moeten gebeuren. Daarnaast is het praktisch om wanneer de desktop-omgeving het laat afweten en je moet gaan troubleshooten, je de in dit document behandelde commando’s kent. De bedoeling van dit document is niet om volledig te zijn, maar om de meest voorkomende taken te behandelen.


2

IDENTIFICATIE

2. Identificatie In Linux is er een virtueel filesystem, Sysfs, wat allerlei informatie rapporteert over de aanwezige hardware, zoals bijvoorbeeld over block-devices. Via Sysfs kun je eenvoudig opvragen welke block-devices aanwezig zijn: ls /sys/block/ In de meeste gevallen zal er minimaal 1 block-device aanwezig zijn, aangeduid als eerste scsi disk: sda, waarbij sd staat voor scsi disk en de a de nummering voorstelt. Het hoeft overigens helemaal geen scsi disk te zijn, maar blockdevices worden onder Linux altijd gezien als scsi-device. Wanneer je Linux installeert in een virtuele machine kun je ook vda tegenkomen, waarbij vd staat voor virtual disk. Voor elk block-device is een directory, met allerlei bestanden die informatie geeft over het device, bijvoorbeeld: cat /sys/block/sda/device/model Het Sysfs filesystem levert de informatie, maar is niet hoe allerlei software de hardware benadert. Onder Linux is alles een bestand of directory en dat geldt ook voor hardware. De bestanden voor devices zijn terug te vinden in de directory /dev. Ook hier kun je met het ls commando de aanwezige block-devices opvragen: ls -l /dev/sd[a-z] Let bij de uitvoer op: brw-rw---- 1 root disk Alleerst de letter b die verteld dat het om een block device gaat, vervolgens zien we dat de gebruiker root en de groep disk read-write access heeft. Let op: je kunt dus alleen block-device related commando’s uitvoeren als je root bent of lid bent van de groep disk. Een andere interessante subdirectory in /dev directory is de disk directory: deze bevat allerlei symbolic links om de identificatie van devices te vereenvoudigen, namelijk op id (meestal device name), uuid en path (pci slot of hba) : ls -ld /dev/disk/*/ Er zijn nog meer commando’s die bruikbaar zijn om de block-devices te tonen: • lsblk: toont allerlei informatie over de aanwezige blockdevices en de eventueel aanwezige partities. Het geeft op een handige manier de gegevens weer die ook via het Sysfs filesystem op te vragen zijn. • blkid: toont het block-device met de corresponderende uuid, labels en het gebruikte filesystem • udevadm info /dev/sd[a-z]: via udevadm is allerei informatie via de Linux device manager udev op te vragen. 2


4

FORMATEREN

• parted -l of fdisk -l: de partitionmanagers laten ook de aanwezige blockdevices zien, uitgezonderd devices van het type rom (zoals cdromen dvd-spelers

3. Partitioneren Het indelen, partitioneren van een block-device kan met behulp van het oudere fdisk of met behulp van het nieuwere parted. De fdisk utility wordt langzamerhand uitgefaseerd door de diverse distributies, onderandere omdat het niet overweg kan met de GPT-indeling van de partitie tabel. Daarom is het een goed idee om gebruik te maken van parted. Als voorbeeld gebruiken we /dev/sdb die nog volledig ongebruikt is, de uitvoer van parted -l ziet er dan bijvoorbeeld als volgt uit: Error: /dev/sdb: unrecognised disk label Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 8590MB Sector size (logical/physical): 512B/512B Partition Table: unknown

Als eerste stap moet de layout van de partitie tabel bepaald worden, in Linux doe je dit door een label toe te kennen aan de disk, zodat de partitioner de juiste layout aan houdt. parted /dev/sdb mklabel gpt Er verschijnt ook een opmerking over entries in het /etc/fstab bestand, maar die kun je in dit stadium veilig negeren. In dit voorbeeld gaan we uit van de GPT indeling, als je MBR wilt kies je als label msdos. Vervolgens kun je een partitie aanmaken. Als je geen zorgen wilt maken over lastige zaken als disk-alignment laat je parted het “optimal” voor je regelen, zowel door middel van de parameter --align als te starten met 0%. Vervolgens geef je de gewenste grootte op, hetzij in MB, GB of eveneens in procenten. parted --align optimal /dev/sdb mkpart primary 0% 4096MB In bovenstaand voorbeeld wordt een primary partitie aangemaakt van 4GB. Overigens: in GPT is er geen noodzaak meer voor verschil tussen primaire en extended / logical partities, je kunt 128 primaire partities aanmaken.

4. Formateren Nu kan de partitie voorzien worden van een filesystem. De Linux kernel ondersteunt erg veel verschillende filesystems, de lijst is opvraagbaar met: cat /proc/filesystems We gaan de aangemaakte partitie op /dev/sdb formatteren met het ext4 filesystem. Wellicht is het een goed idee om nog even te controleren wat we nu hebben: 3


5

MOUNTEN

lsblk /dev/sdb -o NAME,SIZE,TYPE NAME SIZE sdb 8G - sdb1 3.8G

TYPE disk part

Vervolgens formateren met bijvoorbeeld het ext4 filesystem, wat voor de huidige distributies het meest gebruikt wordt: mkfs -t ext4 /dev/sdb1 Optioneel kun je het filesystem ook voorzien van een label, die je kunt gebruiken om het filesysteem te identificeren voor bijvoorbeeld mount-acties: tune2fs -L data /dev/sdb1 gebruik vervolgens tune2fs -l /dev/sdb1 Om de eigenschappen van het filesystem te bekijken.

5. Mounten Een partitie voorzien van een filesystem kan gemount worden aan het filesystem. Als mountpoint zijn er volgens de FHS standaard1 2 lokaties die in aanmerking komen, waarin je een directory kunt aanmaken waar je de partitie aan kunt koppelen: • /media/ voor removable media, zoals cdroms en usb-sticks • /mnt/ voor non-removable media, zoals harddisks Er kan gemount worden op partitie-naam, label en uuid. Gebruik het commando blkid om deze informatie op te vragen. Wanneer je de gegevens hebt verzameld zijn er dus 3 manieren om te mounten. Begin met het aanmaken van een directory: mkdir /mnt/harddisk2 en gebruik een van onderstaande regels: • mount /dev/sdb1 /mnt/harddisk • mount UUID=’’..’’ /mnt/harddisk • mount LABEL=’’data’’ /mnt/harddisk Wanneer je dit bij het booten van Linux wilt mounten, dan moet je daarvoor het bestand /etc/fstab aanpassen: Voeg met behulp van je favoriete editor onderaan het bestand een entry toe, die er als volgt uit ziet: LABEL=".."

/mnt/..

ext4

defaults

1 http://refspecs.linuxfoundation.org

4

0 0


6

HOT-PLUGGABLE

Uiteraard kan ook hier gemount worden op partitie-naam of UUID. Er wordt gemount met default opties (o.a. dat er gemount moet worden met read/write en dat je programma’s wilt kunnen starten vanaf deze partitie). De eerste nul zorgt ervoor dat de oude backup utilitie dump niet wilt gebruiken. De tweede 0 zorgt ervoor dat het fsck (filesystem check) commando niet wordt uitgevoerd bij het booten van Linux, als je dit wel wilt moet je de 0 veranderen in een 2. Eventueel kun je ook noauto,defaults gebruiken. Dit zorgt ervoor dat er niet automatisch gemount wordt tijdens het booten, maar wel wanneer je mount -a uitvoert of mount /mnt/.... Het commando mount zonder parameters laat zien wat er allemaal gemount is, maar doet dit niet alleen voor block-devices, als alternatief kun je ook het commando lsblk gebruiken, deze is wellicht overzichtelijker.

6. Hot-Pluggable

Block-devices kunnen hot-plugable zijn: denk bijvoorbeeld aan removable harddisks, usb-sticks maar ook bijvoorbeeld Fibre-Channel volumes die nieuw aangemaakt zijn. Afhankelijk van de distributie en configuratie van het Linux systeem zullen de meeste devices automatisch door de Linux kernel gedetecteerd worden. Wanneer je een block-device toevoegd aan het systeem kan het commando dmesg tonen of het device ook daadwerkelijk gedetecteerd wordt. Een andere mogelijkheid is via udev, voer voordat je het device toevoegd het volgende commando uit: udevadm monitor Het voordeel van deze methode is ook dat je meteen ziet of er acties gekoppeld zijn aan het toegevoegde device, bijvoorbeeld het automatisch mounten. Wanneer het gaat om scsi-devices of volumes die worden aangeboden door Fibre-Channel en iSCSI dan kan het zijn dat je een rescan nodig hebt. Dat kan met behulp van: echo "-

-

-" > /sys/class/scsi_host/host0/scan

Waarbij “- - -” een wildcard is, die betekent dat er gescanned moet worden op elke channel, elke target en elk beschikbare volume. Let op: er moeten spaties staan tussen de - tekens, anders krijg je een “permission denied” melding. Een andere, betere mogelijkheid is gebruik te maken van het script rescan-scsi-bus.sh2 . In de meeste distributies is dit script beschikbaar in de sg3_utils package. 2 http://www.garloff.de/kurt/linux

5


7

AUTEUR

7. Auteur Dit document is geschreven door Frederik Vos, werkzaam als Senior Technical Trainer bij XTG.

6


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.