Block-devices onder Linux

6
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 block- device is een interface naar een fysiek medium, zoals bijvoorbeeld een hard- disk, 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 for- materen 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.

description

Werken met block-devices (harddisks, usb etc) onder Linux.

Transcript of Block-devices onder Linux

Page 1: Block-devices onder Linux

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-spelerhebben gemeenschappelijk dat het zogenaamde block-devices zijn. Een block-device is een interface naar een fysiek medium, zoals bijvoorbeeld een hard-disk, zonder dat het besturingssysteem zich zorgen over hoeft te maken of hetbijvoorbeeld gaat om een IDE of een SCSI disk.

Wanneer je Linux gebruikt met daarop een desktop-omgeving als bijvoorbeeldKDE of Gnome, dan zijn er allerlei tools om de storage te identificeren, te for-materen etc. En bij allerlei removable media zoals usb-sticks, zal wellicht dedesktop het medium automatisch mounten.

Op een server, zonder grafische omgeving, is dit allemaal niet het geval, en zalhet handmatig moeten gebeuren. Daarnaast is het praktisch om wanneer dedesktop-omgeving het laat afweten en je moet gaan troubleshooten, je de in ditdocument behandelde commando’s kent.

De bedoeling van dit document is niet om volledig te zijn, maar om de meestvoorkomende taken te behandelen.

Page 2: Block-devices onder Linux

2 IDENTIFICATIE

2. Identificatie

In Linux is er een virtueel filesystem, Sysfs, wat allerlei informatie rapporteertover de aanwezige hardware, zoals bijvoorbeeld over block-devices. Via Sysfskun je eenvoudig opvragen welke block-devices aanwezig zijn:

ls /sys/block/

In de meeste gevallen zal er minimaal 1 block-device aanwezig zijn, aangeduidals eerste scsi disk: sda, waarbij sd staat voor scsi disk en de a de numme-ring voorstelt. Het hoeft overigens helemaal geen scsi disk te zijn, maar block-devices worden onder Linux altijd gezien als scsi-device. Wanneer je Linuxinstalleert in een virtuele machine kun je ook vda tegenkomen, waarbij vd staatvoor virtual disk.

Voor elk block-device is een directory, met allerlei bestanden die informatie geeftover het device, bijvoorbeeld:

cat /sys/block/sda/device/model

Het Sysfs filesystem levert de informatie, maar is niet hoe allerlei software dehardware benadert. Onder Linux is alles een bestand of directory en dat geldtook voor hardware. De bestanden voor devices zijn terug te vinden in de direc-tory /dev. Ook hier kun je met het ls commando de aanwezige block-devicesopvragen:

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 zienwe dat de gebruiker root en de groep disk read-write access heeft. Let op: jekunt dus alleen block-device related commando’s uitvoeren als je root bent oflid bent van de groep disk.

Een andere interessante subdirectory in /dev directory is de disk directory: dezebevat 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 to-nen:

• lsblk: toont allerlei informatie over de aanwezige blockdevices en deeventueel aanwezige partities. Het geeft op een handige manier de gege-vens weer die ook via het Sysfs filesystem op te vragen zijn.

• blkid: toont het block-device met de corresponderende uuid, labels enhet gebruikte filesystem

• udevadm info /dev/sd[a-z]: via udevadm is allerei informatie via deLinux device manager udev op te vragen.

2

Page 3: Block-devices onder Linux

4 FORMATEREN

• parted -l of fdisk -l: de partitionmanagers laten ook de aanwezigeblockdevices zien, uitgezonderd devices van het type rom (zoals cdrom-en dvd-spelers

3. Partitioneren

Het indelen, partitioneren van een block-device kan met behulp van het ouderefdisk of met behulp van het nieuwere parted. De fdisk utility wordt langza-merhand uitgefaseerd door de diverse distributies, onderandere omdat het nietoverweg kan met de GPT-indeling van de partitie tabel. Daarom is het een goedidee om gebruik te maken van parted.

Als voorbeeld gebruiken we /dev/sdb die nog volledig ongebruikt is, de uitvoervan parted -l ziet er dan bijvoorbeeld als volgt uit:

Error: /dev/sdb: unrecognised disk labelModel: VMware, VMware Virtual S (scsi)Disk /dev/sdb: 8590MBSector size (logical/physical): 512B/512BPartition Table: unknown

Als eerste stap moet de layout van de partitie tabel bepaald worden, in Linuxdoe je dit door een label toe te kennen aan de disk, zodat de partitioner de juistelayout aan houdt.

parted /dev/sdb mklabel gpt

Er verschijnt ook een opmerking over entries in het /etc/fstab bestand, maardie kun je in dit stadium veilig negeren. In dit voorbeeld gaan we uit van deGPT indeling, als je MBR wilt kies je als label msdos.

Vervolgens kun je een partitie aanmaken. Als je geen zorgen wilt maken overlastige zaken als disk-alignment laat je parted het “optimal” voor je regelen,zowel door middel van de parameter --align als te starten met 0%. Vervol-gens geef je de gewenste grootte op, hetzij in MB, GB of eveneens in procen-ten.

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 enextended / logical partities, je kunt 128 primaire partities aanmaken.

4. Formateren

Nu kan de partitie voorzien worden van een filesystem. De Linux kernel onder-steunt erg veel verschillende filesystems, de lijst is opvraagbaar met:

cat /proc/filesystems

We gaan de aangemaakte partitie op /dev/sdb formatteren met het ext4 file-system. Wellicht is het een goed idee om nog even te controleren wat we nuhebben:

3

Page 4: Block-devices onder Linux

5 MOUNTEN

lsblk /dev/sdb -o NAME,SIZE,TYPE

NAME SIZE TYPEsdb 8G disk- sdb1 3.8G part

Vervolgens formateren met bijvoorbeeld het ext4 filesystem, wat voor de hui-dige distributies het meest gebruikt wordt:

mkfs -t ext4 /dev/sdb1

Optioneel kun je het filesystem ook voorzien van een label, die je kunt gebruikenom 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 filesys-tem. Als mountpoint zijn er volgens de FHS standaard1 2 lokaties die in aan-merking komen, waarin je een directory kunt aanmaken waar je de partitie aankunt 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 com-mando blkid om deze informatie op te vragen. Wanneer je de gegevens hebtverzameld zijn er dus 3 manieren om te mounten. Begin met het aanmaken vaneen 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 hetbestand /etc/fstab aanpassen:

Voeg met behulp van je favoriete editor onderaan het bestand een entry toe, dieer als volgt uit ziet:

LABEL=".." /mnt/.. ext4 defaults 0 0

1http://refspecs.linuxfoundation.org

4

Page 5: Block-devices onder Linux

6 HOT-PLUGGABLE

Uiteraard kan ook hier gemount worden op partitie-naam of UUID. Er wordtgemount met default opties (o.a. dat er gemount moet worden met read/writeen dat je programma’s wilt kunnen starten vanaf deze partitie). De eerste nulzorgt ervoor dat de oude backup utilitie dump niet wilt gebruiken. De tweede0 zorgt ervoor dat het fsck (filesystem check) commando niet wordt uitgevoerdbij het booten van Linux, als je dit wel wilt moet je de 0 veranderen in een2.

Eventueel kun je ook noauto,defaults gebruiken. Dit zorgt ervoor dat er nietautomatisch gemount wordt tijdens het booten, maar wel wanneer je mount -auitvoert of mount /mnt/....

Het commando mount zonder parameters laat zien wat er allemaal gemountis, maar doet dit niet alleen voor block-devices, als alternatief kun je ook hetcommando lsblk gebruiken, deze is wellicht overzichtelijker.

6. Hot-Pluggable

Block-devices kunnen hot-plugable zijn: denk bijvoorbeeld aan removable hard-disks, usb-sticks maar ook bijvoorbeeld Fibre-Channel volumes die nieuw aan-gemaakt zijn. Afhankelijk van de distributie en configuratie van het Linux sys-teem zullen de meeste devices automatisch door de Linux kernel gedetecteerdworden.

Wanneer je een block-device toevoegd aan het systeem kan het commandodmesg tonen of het device ook daadwerkelijk gedetecteerd wordt. Een anderemogelijkheid is via udev, voer voordat je het device toevoegd het volgende com-mando uit:

udevadm monitor

Het voordeel van deze methode is ook dat je meteen ziet of er acties gekoppeldzijn aan het toegevoegde device, bijvoorbeeld het automatisch mounten.

Wanneer het gaat om scsi-devices of volumes die worden aangeboden doorFibre-Channel en iSCSI dan kan het zijn dat je een rescan nodig hebt. Datkan met behulp van:

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

Waarbij “- - -” een wildcard is, die betekent dat er gescanned moet worden opelke channel, elke target en elk beschikbare volume. Let op: er moeten spatiesstaan 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.

2http://www.garloff.de/kurt/linux

5

Page 6: Block-devices onder Linux

7 AUTEUR

7. Auteur

Dit document is geschreven door Frederik Vos, werkzaam als Senior TechnicalTrainer bij XTG.

6