Tartalomjegyzék
Lemezek elnevezése Linuxban
Nem perzisztens nevek
A lemezeszközök nem perzisztens elnevezése az eszközök minor számával van kapcsolatban.
Major és minor szám
Linuxban minden eszköznek van ún. major és minor száma. Ez megnézhető pl. a következő paranccsal:
ls -l /dev
Példa:
crw-rw-rw- 1 root root 1, 3 May 18 17.19 /dev/null crw-rw-rw- 1 root root 1, 9 May 18 17.19 /dev/urandom crw-rw-rw- 1 root tty 5, 2 Aug 23 15.27 /dev/ptmx
A fenti példában a major,minor
számok rendre: 1,3
; 1,9
és 5,2
.
Ezek mind karakteres eszközök, ezt jelzi a sor eleji c
betű.
Linuxban a tárolóeszközöket (lemezek, partíciók, kötetek) nem karakteres, hanem blokkos eszközök reprezentálják.
A blokkos eszköz elnevezése és major–minor száma között egyértelmű megfelelés van.
SCSI: /dev/sd*
Az sd
(SCSI disk) meghajtóprogram a következőképpen nevezi el a tárolóeszközöket reprezentáló blokkos eszközöket (eszközfájlokat):
/dev/sd<betűjel><partíció száma (ha van)>
Például: /dev/sda
, /dev/sda1
, /dev/sdb2
stb.
Ha az eszköz a teljes meghajtót reprezentálja, nincs partíciószám.
Az SCSI-eszközök major száma mindig 8, minor száma pedig: 16 * meghajtó száma + partíció száma, ahol a meghajtó száma a meghajtók detektálásának sorrendje szerinti, 0-tól induló sorszám.
Példa:
brw-rw---- 1 root disk 8, 0 aug 23 18:44 /dev/sda brw-rw---- 1 root disk 8, 1 aug 23 18:44 /dev/sda1 brw-rw---- 1 root disk 8, 16 aug 23 18:44 /dev/sdb brw-rw---- 1 root disk 8, 17 aug 23 18:44 /dev/sdb1 brw-rw---- 1 root disk 8, 18 aug 23 18:44 /dev/sdb2
Blokkos eszközök esetén a következő parancs is hasznos:
lsblk
Példa:
sda 8:0 0 465,8G 0 disk └─sda1 8:1 0 465,8G 0 part / sdb 8:16 0 111,8G 0 disk ├─sdb1 8:17 0 2G 0 part /boot └─sdb2 8:18 0 109,8G 0 part [SWAP]
Device Mapper: /dev/dm-*
Linuxban a logikai kötetkezelés (LVM), a redundáns storage-elérés (dm-multipath) és a kötetek titkosításának (dm-crypt) alapja a Device Mapper (DM).
A DM-eszközök virtuális eszközök, tehát nem fizikai eszközöket reprezentálnak, hanem logikai köteteket, storage I/O-útvonalakat összefogó eszközt, titkosított kötetet stb.
DM használata esetén az eszközfájlok elnevezése:
/dev/dm-<eszköz sorszáma>
A DM-eszközök major száma mindig 253, a sorszáma pedig a minor számmal egyezik meg.
Példa:
brw-rw----. 1 root disk 253, 0 aug 17 13.32 /dev/dm-0 brw-rw----. 1 root disk 253, 1 aug 17 13.32 /dev/dm-1 brw-rw----. 1 root disk 253, 2 aug 17 13.32 /dev/dm-2 brw-rw----. 1 root disk 253, 3 aug 17 13.32 /dev/dm-3
sda 8:0 0 238G 0 disk └─sda1 8:1 0 236G 0 part ├─dm-1 253:1 0 4G 0 lvm │ └─dm-2 253:2 0 4G 0 crypt [SWAP] └─dm-0 253:0 0 23G 0 lvm └─dm-3 253:3 0 23G 0 crypt /
A név megváltozása
Ha új tárolóeszközt detektál a meghajtóprogram, akkor új minor számokat foglal le annak, ha pedig kiesik egy eszköz, akkor felszabadulnak az adott minor számok.
Mivel a minor szám a meghajtók detekciójának sorrendjétől függ, az sd*
és a dm-*
elnevezés megváltozhat, például abban az esetben, ha:
- egy lemez meghibásodik, nem válaszol az SCSI-vezérlőnek, ezért nem detektálható,
- az SCSI-vezérlő vagy HBA meghibásodik (és az összes ehhez kapcsolódó lemez elérhetetlenné válik),
- az SCSI-vezérlőt vagy HBA-t átteszik másik helyre, újat szerelnek be
- nem egyforma HBA-k vannak a gépben (a detekció sorrendje változhat),
- HBA-n át elérhető lemezek nem válaszolnak storage oldali probléma (pl. switch hiba) miatt.
Ilyen esetekben pl. ha az eddig /dev/sdb
-nek nevezett lemez nem detektálható, akkor egy másik lemez kapja ezt a nevet, ami nagy eséllyel adatkorrupcióhoz vezet.
Tehát a
/dev/sd*
, illetve a /dev/dm-*
elnevezés nem perzisztens. Emiatt rossz gyakorlat pl. a /etc/fstab
-ban vagy egyéb helyen ilyen néven hivatkozni a kötetekre.
/dev/disk/by-path/*
A /dev/disk/by-path/*
eszközök neve nem a major–minor számokra épül, hanem az SCSI-címzésre, melynek része többek között a HBA/SCSI-vezérlő száma (PCI-hely), -csatorna száma (HBA-port), az SCSI target, LUN stb. Ezek a nevek is változhatnak, ha az SCSI target vagy az SCSI host/channel változik, pl. a fent felsorolt okok miatt. Tehát a /dev/disk/by-path/*
elnevezés sem igazán perzisztens, bár egy fokkal jobb, mint a major–minor számokra hagyatkozni.
Perzisztens nevek
A /dev
könyvtár alatti eszközfájlok perzisztens elnevezéséért a Linux kernel hotplug alrendszerének részét képező, udev nevű meghajtókezelő program felelős. (Az udev konfigurálása nem része ennek az összefoglalónak.)
A perzisztens nevek egyedi azonosítók alapján jönnek létre. Ilyen azonosító a WWID, illetve az UUID.
Az ilyen nevű eszközfájlok szimbolikus linkek a hozzájuk tartozó /dev/sd*
, illetve /dev/dm-*
eszközfájlokra.
WWID (WWN): /dev/disk/by-id/*
A WWID vagy más néven WWN az SCSI-szabvány által megkövetelt, a világon egyedi azonosító (World Wide ID vagy World Wide Name) minden egyes SCSI-eszközhöz. Ezek a /dev/disk/by-id
könyvtárban látszanak.
Példák:
/dev/disk/by-id/ata-KINGSTON_SMS200S3120G_50026B7241147299 -> /dev/sda /dev/disk/by-id/ata-KINGSTON_SMS200S3120G_50026B7241147299-part1 -> /dev/sda1 /dev/disk/by-id/ata-KINGSTON_SMS200S3120G_50026B7241147299-part2 -> /dev/sda2 /dev/disk/by-id/usb-SSK_SFD199_00000000000025EB-0:0 -> /dev/sdb /dev/disk/by-id/usb-SSK_SFD199_00000000000025EB-0:0-part1 -> /dev/sdb1 /dev/disk/by-id/wwn-0x50026b7241147299 -> /dev/sda /dev/disk/by-id/wwn-0x50026b7241147299-part1 -> /dev/sda1 /dev/disk/by-id/wwn-0x50026b7241147299-part2 -> /dev/sda2
A példában látszik, hogy egy eszközhöz az operációs rendszer több WWID-t is rendelhet.
A WWID lekérdezhető a lemezről SCSI-protokollon át (Device Identification Vital Product Data (page 0x83) or Unit Serial Number (page 0x80)
), a következő paranccsal:
/lib/udev/scsi_id -gu /dev/sd*
UUID: /dev/disk/by-uuid/*
Az UUID 128 bit hosszú, a világon egyedi azonosító (Universally Unique ID), 32 hexadecimális számjegyként ábrázolva, pl.: 13152fae-d25a-4d78-b318-74397eb08184
(lásd: RFC 4122). Nemcsak blokkos eszközök azonosítására használatosak.
Blokkos eszközök esetén az UUID-k a /dev/disk/by-uuid
alatt láthatók, illetve az alábbi paranccsal is lekérdezhetők:
blkid
A /etc/fstab
-ban az UUID-vel szokás hivatkozni a partíciókra.
Hagyományos partíció esetén UUID a fájlrendszerben (a szuperblokkban) tárolódik.
Új fájlrendszer létrehozása esetén megváltozik az eszköz UUID-ja.
Ha nincs fájlrendszer a lemezen, nics UUID-ja sem az eszköznek. (A GPT-partíciók bevezetésével ez megváltozott: a GPT-partícióknak fájlrendszer nélkül is van UUID-juk, ez a /dev/disk/by-partuuid
alatt látszik. Ha nem GPT típusú a partíció, akkor az UUID kamu.)
Device Mapper estén az UUID megtudható a dmsetup info /dev/dm-*
paranccsal is. LVM- és LUKS-köteteknél a kötet fejlécében tárolódik az UUID.
Label: /dev/disk/by-label/*
Az eszközökhöz definiálható „emberi” név, címke is. Ezek a /dev/disk/by-label
alatt érhetők el, és szintén használhatók /etc/fstab
-ban, noha ez mostanában nem gyakori. A címke a fájlrendszerben tárolódik. (GPT-partíciók esetén már nem szükséges fájlrendszer, a partícióhoz is tarozhat címke, ez a /dev/disk/by-partlabel
alatt látszik. Az LVM és LUKS nem támogatja címkéket.)
Device Mapper: /dev/mapper/*
A Device Mapper eszközök perzisztens neve /dev/mapper/<név>
. A <név>
lehet WWID vagy UUID, egy ezeket tartalmazó egyéb azonosító, vagy valamilyen más egyedi név, pl. LVM estén kötetcsoport és kötet neve.
Példa:
/dev/mapper/vg01-swap -> dm-1 /dev/mapper/vg01-root -> dm-0 /dev/mapper/luks-a76f051a-cc77-491a-bde6-197e0bb12f6b -> dm-3 /dev/mapper/luks-ec46545d-29d9-4b85-a019-a9a77a4f5144 -> dm-2
Ezek az eszközök listázhatók a következő paranccsal is:
dmsetup ls
Példa:
vg01-swap (253:1) vg01-root (253:0) luks-a76f051a-cc77-491a-bde6-197e0bb12f6b (253:3) luks-ec46545d-29d9-4b85-a019-a9a77a4f5144 (253:2)
Újabb Linuxokban az lsblk
is perzisztens neveket mutat.
DM Multipath
Multipath használata esetén bekapcsolhatók a felhasználóbarát nevek (user_friendly_names
), melyek formája:
/dev/mapper/mpath<útvonal betűjele>
Ezek egy hoszton belül konzisztensek, az eszköz WWID-jára képeződnek le. Klaszterszinten viszont nem biztos, hogy ugyanaz lesz a felhasználóbarát név minden node-on. Ekkor érdemes kikapcsolni a a felhasználóbarát neveket, és helyette az alapértelmezett WWID-t használni, amely klaszterszinten is konzisztens.