16. Diszk rendszerek¶
Szinte minden operációs rendszer képes háttértárak kezelésére. Ebben a a fejezetben megmutatom neked a diszk kezelés alapjait, valamint azt, hogy hogyan érdemes felépítened egy diszk alrendszert, hogy egy merevlemez (törvényszerűen bekövetkező) hibája ne keserítse meg az életedet.
16.1. A partíciók¶
A diszkek kezeléséről már volt szó, ezért itt most feltételezem, hogy ismered a sáv, szektor, cluster, master boot rekord, partcíció, elsődleges partíció, kiterjesztett partíció és a logikai meghajtó fogalmát, és a /dev/sdX
eszközfájlokat. Kezdjük egy gyakorlati példával, egy diszket fogunk partícionálni, amihez a cfdisk parancsot használjuk.
A diszk jelenlegi partíciós tábláját a cfdisk paranccsal lehet megjeleníteni.
root@koczka-lnx:~# cfdisk /dev/sda
A képernyőn megjelenő sorok a diszk és a partíciók adatait írják le. A fenti példában a columbo.uni-eszterhazy.hu gép diszkje szerepel, lássuk, milyen információkat tudunk meg róla!
- Lemezmeghajtó /dev/sda:
Itt ellenőrizheted, hogy pontosan melyik diszkkel dolgozol. Ez a lemez az első merevlemez a gépben (/dev/sda).
- Méret:
Itt látható a meghajtó mérete. Érdemes tudnod, hogy a byte-ban megadott méret a pontos adat, de a prefixumok használatát egyes rendszerek, gyártók másképp értelmezik. Az informatikában a váltószám a 2 10, azaz 1024, ezt használja az IEC (Nemzetközi Elektrotechnikai Bizottság) jelölésrendszere is. Az SI-ben viszont a 10 hatványait használják, ezért abban a szabályrendszerben 1 KByte=1000 byte, az IEC szabályai szerint viszont 1 KByte=1024 byte. A kilo, mega, giga, terra előtagok az SI-ben használatosak, ezért akik ezt használják, az 1000-et fogják váltószámként használni. Az IEC szerinti prefixeket ezért nevkben is megkülönböztetik ettől, az 1024-es váltószám alkalmazásakor a kibi, mebi, gibi, tebi perfixeket használják, a jelölésük Ki, Mi, Gi, Ti lesznek. Ez egyébként a merevlemez gyártóknak jól jön, hiszen a vásárlók azt feltételezik, hogy ők 1024-gyel fognak számolni, pedig nem, a vásárló pedig valójában kisebb diszket kap, mint amekkorát eredetileg gondolhatott. Az operációs rendszerek 1024-gyel szoktak számolni, így a hiány azonnal észrevehető akkor, amikor a diszket használatba vesszük.
- Label:
A lemezen található partíciós tábla a hagyományos, MS-DOS típusú, a diszk azonosítója 0xee17a8e7.
A következő blokkban a merevlemezen levő 3 partíció adatai olvashatók le. Ezen a diszken három partíció található, az /dev/sda1
mérete 3,7 GByte, a /dev/sda2
-é 954M, a /dev/sda3
-é pedig 11,46 GByte. Az /dev/sda1
és a /dev/sda3
típusa Linux (ezen tehát valamilyen linuxos fájlrendszer van), a /dev/sda2
pedig Linux lapozó, így annak tartalma a rendszer virtuális memóriája lesz.
root@koczka-lnx:~# cfdisk /dev/sdb
Hozzunk létre két új partíciót ezen a diszken!
A mérete legyen 4 GByte!
A partíció típusa legyen primary
!
A partíció elkészült.
A Típus
kiválasztásával meghatározhatjuk a partíció típusát. A jelenlegi beállítás (Linux) megfelelő a céljainknak, ezen a partíción majd ext4
fájlrendszert szeretnénk működtetni. (Ettől még nem jön létre a fájlrendszer, azt majd egy másik paranccsal alakítjuk ki).
Kiírjuk a partíciós táblát a diszkre. A fennmaradó üres hellyel most nem foglalkozunk, azt majd a későbbiekben használjuk fel.
Mivel a partíciós tábla kiírása a korábbi táblát felülírja, ezért könnyen fennáll az adatvesztés lehetősége. A program ezért megerősítést vár, ha valóban ki akarod írni az új partíciós táblát, be kell gépelned a yes
szót.
Megjegyzés
A GPT megjelenése előtt a partícionálás fő eszköze a fdisk parancs volt. Ma is gyakran használjuk ezt akkor, ha egyszerű, msdos típusú partíciós táblával dolgozunk. A cfdisk mindent tud, amit az fdisk, ezért ha a téma új neked, akkor a cfdisk paranccsal dolgozz.
A cfdisk mellett egy másik particionáló program is rendelkezésre áll, a neve parted. Ha van kedved, próbáld ki.
16.2. A fájlrendszerekről¶
A partíciók létrehozása még nem jelenti azt, hogy adatokat is tárolhatsz ezeken a területeken, ahhoz előbb valamilyen fájlrendszert kell kialakítani.
16.2.1. A Unixok fájlrendszerei¶
Az elkészült partíciót meg kell formázni ahhoz, hogy azt használatba vehesd, amihez a Unixok számos parancsot kínálnak. A feladat nem bonyolult, de mivel sokféle fájlrendszer létezik, ezért a használható parancsok köre is elég széles. Mi most a legfontosabbakat nézzük át, ha ezek logikáját megérted, a többivel is könnyen tudsz majd dolgozni. A fájlrendszereket létrehozó parancsok neve egységes, mkfs.<fájlrendszer> alakú. Könnyen meggyőződhetsz, hogy a rendszeredben milyen ilyen parancsok állnak rendelkezésedre, csak gépeld be a mkfs. karaktereket a parancssorba, majd nyomd le kétszer a Tab gombot! A parancsértelmező kiírja az összes, ezzel keződő parancsot, a nevük tartalmazza a választható fájlrendszereket.
root@koczka-lnx:~# mkfs.
mkfs.bfs mkfs.ext2 mkfs.ext4dev mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext3 mkfs.fat mkfs.ntfs
mkfs.cramfs mkfs.ext4 mkfs.minix mkfs.vfat
Hozzunk létre a /dev/sdb1
partíción ext4
fájlrendszert! A mkfs.ext4 parancsnak meg kell adni a partíciót, így a parancs mkfs.ext4 /dev/sdb1 lesz.
root@koczka-lnx:~# mkfs.ext4 /dev/sdb1
mke2fs 1.42.13 (17-May-2015)
Fájlrendszer létrehozása 1048576 4 blokkal és 262144 inode-dal
Fájlrendszer UUID: 2f7d20f6-4c42-4cda-9915-0d3e584d5d68
Tartalék szuperblokkok tárolva a blokkokon:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Csoporttáblák foglalása: kész
Inode táblák írásakor: kész
Napló létrehozása (32768 blokk): kész
Szuperblokkok és fájlrendszer-könyvelési információk írása: kész
16.2.2. Fájlrendszerek csatolása¶
A fájlrendszer kialakítása után már csak egy lépés van hátra ahhoz, hogy az új partíciót használatba vehesd, ez a mountolás. Arról, hogy ez pontosan hogyan működik, a Fájlrendszerek csatolása fejezetben olvashattál. Lássuk, hogyan kell ezt elvégezni a gyakorlatban!
A mountolás parancsa a mount. Ennek számos paramétere van, mi most az egyszerűségre törekszünk, és csak a szükséges minimumot tanuljuk meg. Lássuk ezt egy példán, mountoljuk a /dev/sdb1
partíciót a /mnt
könyvtárba!
root@koczka-lnx:~# mount /dev/sdb1 /mnt
Látszólag nem történt semmi, de a hibaüzenet elmaradása azt jelenti, hogy a parancs sikeresen végrehajtásra került. Nézzük meg az /mnt
könyvtár tartalmát! Egy lost+found
nevű könyvtár van itt, a fájlrendszer javításakor ebbe kerülhetnek azok a fájlok, amelyek a javítási folyamat helyreállít.
root@koczka-lnx:~# ls -l /mnt
összesen 16
drwx------ 2 root root 16384 okt 16 06:05 lost+found
Azt, hogy az operációs rendszer milyen csatolásokat tart fenn, a mount paranccsal lehet megnézni. Mivel ennek kimenetében sok olyan sor van, amiről még nem tanultál, ezért szűröm annek kimenetét:
root@koczka-lnx:~# mount | grep sd
/dev/sda1 on / type ext4 (rw,noatime,nodiratime,errors=remount-ro,data=ordered)
/dev/sda3 on /var type ext4 (rw,noatime,nodiratime,data=ordered)
/dev/sdb1 on /mnt type ext4 (rw,relatime,data=ordered)
A parancs három sort ad vissza, a három csatolt partíció adataival. Az első oszlopban az eszközfájl neve szerepel, amit a csatolási pont, majd a fájlrendszer típusa követ. A zárójelben szereplő paraméterek a csatolás paraméterei, az rw
az olvasható-írható módot jelenti (ez lehetne ro
, azaz read-only is). A noatime
és a nodiratime
jelentését a telepítés során már megismerted.
Ha már nincs szükséged a csatolásra, azt meg is tudod szüntetni az umount paranccsal. Ez nem bonyolult parancs, paraméterként vagy az eszközfájlt, vagy a csatolási pontot kell megadnod. (Azt javaslom, az utóbbit válaszd, a későbbiekben látni fogod, hogy az eszközfájl helyett mást is meg lehet adni, így a biztos pont a csatolási pont lesz.)
root@koczka-lnx:~# umount /mn
Ha ellenőrizzük a mount paranccsal, látható, hogy a /dev/sdb1
már nem szerepel a csatolt partíciók közt.
root@koczka-lnx:~# mount | grep sd
/dev/sda1 on / type ext4 (rw,noatime,nodiratime,errors=remount-ro,data=ordered)
/dev/sda3 on /var type ext4 (rw,noatime,nodiratime,data=ordered)
Megjegyzés
A mountolást kell használnod minden esetben, amikor valamilyen háttértárat használni akarsz. Ha egy pendrive-ot akarsz használni, a csatlakoztatás után azt is mountolnod kell, és ugyanez a helyzet egy CD/DVD olvasóval, esetleg floppy lemezzel is. A csatoláshoz ismerni kell a megfelelő eszközfájl nevét, ez a CD/DVD-k esetében gyakran a
/dev/cdrom
, vagy/dev/sr0
, a floppy lemez esetén a/dev/fd0
(floppy disk 0). A pendrive-ok merevlemezként viselkednek, így a nevük/dev/sdX1
lesz, példánkban, ahol az sda és az sdb már használatban van, a/dev/sdc1
lenne.Sok rendszer tartalmaz egy automount programot, amely a mountolást minden olyan eszköz esetében automatikusan elvégzi, ahol a rendszer képes érzékelni az adathordozó behelyezését. Ilyenek a CD/DVD lemezek, külső merevlemezek, pendrive-ok, de pl. a mágneslemezek esetében nincs ilyen érzékelési mechanizmus, azokkal nem működik.
Egy rendszer esetében már az induláskor el kell végezni az egyes csatolásokat. Azt, hogy melyik eszköz melyik partícióját hová és milyen paraméterekkel kell mountolni a /etc/fstab
fájl írja le. Nézzük meg a tartalmát!
root@koczka-lnx:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=2f93a3b9-9456-4036-b7d8-8cfd74de7b8f / ext4 noatime,nodiratime,errors=remount-ro 0 1
# /var was on /dev/sda3 during installation
UUID=9f77b647-cd1c-47be-83df-494c1d970033 /var ext4 noatime,nodiratime 0 2
# swap was on /dev/sda2 during installation
UUID=f5cd2468-0f35-45d4-b25c-c6a25bfbb7c3 none swap sw 0 0
A #-tel kezdődő sorok megjegyzések, ezzel most nem kell foglalkozunk. A három további sor az egyes csatolásokat írja le, de ebben az eszközfájl helyett az ún. UUID-t használjuk a partíció azonosítására. A sorok következő paramétere a csatolási pont, a fájlrendszer neve és a csatolási paraméterek. A sort két szám zárja, ezek sorszámok, amelyek az egyes partíciókkal kapcsolatos műveletek sorrendjét határozzák meg, az első a mentés sorrendjét (ezt ma már nemigazán használjuk), a második pedig a fájlrendszerek ellenőrzésének sorrendjét. Utóbbira a boot folyamat során szokott sor kerülni, ezért ennek van jelentősége.
A UUID egyedi azonosítást biztosít az egyes eszközökön található partíciók számára. A /dev/sdXY
eszközfájlok használata bonyodalmat okozhat akkor, ha a merevlemezeket valamilyen okból átkábelezed, egy diszk eltávolításakor, vagy beépítésekor ezek a nevek megváltozhatnak. Ezért célszerűbb a UUID-k használata a csatolási pontok megadásakor. A UUID-ket a rendszer automatikusan elkészíti a fájlrendszer kialakítása során, az egyes eszközökhöz tartozó UUID-t lekérdezni a blkid paranccsal tudod. A UUID nem egy unixos fejlesztés, a gpt-reference-label c. fejezetben látni fogod, hogy más rendszerek, pl. a Windows család is képes a kezelésére.
root@koczka-lnx:~# blkid
/dev/sda1: LABEL="ROOT" UUID="2f93a3b9-9456-4036-b7d8-8cfd74de7b8f" TYPE="ext4" PARTUUID="ee17a8e7-01"
/dev/sda2: UUID="f5cd2468-0f35-45d4-b25c-c6a25bfbb7c3" TYPE="swap" PARTUUID="ee17a8e7-02"
/dev/sda3: LABEL="VAR" UUID="9f77b647-cd1c-47be-83df-494c1d970033" TYPE="ext4" PARTUUID="ee17a8e7-03"
/dev/sr0: UUID="2016-07-19-21-21-08-00" LABEL="Ubuntu-Server 16.04.1 LTS amd64" TYPE="iso9660" PTUUID="232e9d64" PTTYPE="dos"
/dev/sdb1: UUID="2f7d20f6-4c42-4cda-9915-0d3e584d5d68" TYPE="ext4" PARTUUID="3853f685-01"
Lássunk egy gyors példát, csatoljuk a /dev/sdb1
partíciót, de most a UUID használatával! Az eszközfájl helyére most a blkid kimenetében látható UUID-t írom, és a mountolás ugyanúgy végbemegy:
root@koczka-lnx:~# mount UUID="2f7d20f6-4c42-4cda-9915-0d3e584d5d68" /mnt
A /etc/fstab
fájl a root számára írható, ezért ott újabb eszközök mountolását írhatjuk elő. Példánkban a /dev/sdb1 partíció automatikus csatolását végezzük el úgy, hogy a /etc/fstab
végére az alábbi sort írjuk be:
/dev/sdb1 /mnt ext4 auto 0 3
A gép újraindítása után meggyőződhetsz a művelet helyességéről a mount paranccsal:
Megjegyzés
A /etc/fstab
fájlban leírtak alapján a mount parancsok még rövidebben végezhetők el, ha egy partícióra vonatkozó sor létezik az /etc/fstab
fájlban, akkor pl. így: mount /mnt. Ebben az esetben a mount parancs megkeresi a /etc/fstab
fájlban, hogy a /mnt
könyvtárhoz melyik partíciót rendeltük, és kiegészíti a parancsot ezzel a paraméterrel. Minden más, ott leírt paramétert alkalmazni fog (noatim, nodiratime, rw stb.).
Lássunk még néhány gyakorlati példát!
Ha a CD/DVD meghajtóba egy lemezt teszel, azt is mountolni kell. A javasolt mountolási pont Linux változatonként eltérhet, de gyakran a /media/cdrom
. Az alábbi példában elvégezzük a mountolást. Ha az /etc/fstab
fájlban szeretnéd megadni ezt, fájlrendszerként iso9660
-at adj meg, általában ez van a PC-s CD/DVD lemezeken.
root@koczka-lnx:~# mount /dev/cdrom /media/cdrom
Ha a csatolást le akarod bontani, értelemszerűen a umount /dev/cdrom vagy a umount /media/cdrom parancsot használd.
Ha egy USB porton csatlakozó külső merevlemezt szeretnél mountolni, amit Windows alatt formáztál meg, hasonlóképp kell eljárnod. Ahhoz, hogy a mount parancsot használni tudd, ismerned kellene az USB-s merevlemez eszközfájljának nevét. Ezek listázását az lsblk paranccsal tudod elvégezni, az alábbi példában a diszk méretek alapján látható, hogy az /dev/sdb
lesz a behelyezett 1 TByte-os külső HDD.
root@koczka-lnx:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 3,7G 0 part /
├─sda2 8:2 0 954M 0 part [SWAP]
└─sda3 8:3 0 5,4G 0 part /var
sdb 8:16 0 931,5G 0 disk
└─sdb1 8:17 0 931,5G 0 part
sr0 11:0 1 1024M 0 rom
Ez után a diszk első partíciója már egyszerűen mountolható (először készítek egy könyvtárat a csatlakozási pontnak):
root@koczka-lnx:~# mkdir /media/externalhdd
root@koczka-lnx:~# mount /dev/sdb1 /media/externalhdd/
The disk contains an unclean file system (0, 0).
The file system wasn't safely closed on Windows. Fixing.
A példa arról is árulkodik, hogy a diszket legutóbb nem távolítottam el szabályosan, a mount parancs javítja is ezt a „hibát”.
Egyébként, ha már az USB-s eszközökről van szó, érdemes megjegyezni, hogy az USB-s eszközöket az lsusb paranccsal listázhatod ki. Ezzel megállapítható, hogy egy Western Digital gyártmányú külső merevlemezt csatlakoztattam a géphez, aminek azonosítója: 1058:25a2
. Egy gyors gyakorlatként keress rá a 1058:25a2
kifejezésre a Google-ben! Hamar megtalálod, hogy az a Elements 25A2 típusú diszk azonosítója, így minden más technikai paramétert azonnal megtalálhatsz róla.
root@koczka-lnx:~# lsusb
Bus 002 Device 002: ID 1058:25a2 Western Digital Technologies, Inc.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Megjegyzés
Egy másik számítógép megosztott mappáját is felmountolhatod, ha azon működik a megosztást támogató szoftver és van hozzá jogosultságod. A Unix rendszereken a megosztást az NFS szerverrel (Network FileSystem) szokták megoldani. Egy ilyen szerver egy könyvtárát agy gépre felmountolni egy ehhez hasonló paranccsal lehet: mount 192.168.1.33:/home /nfs/home. Ennek eredményeképp a /nfs/home
könyvtáron keresztül a 192.168.1.33-as IP című gép /home
könyvtárát érjük el.
16.2.3. Bővebben a csatolásról¶
Játsszunk egy kicsit a csatolásokkal, mutatok néhány ezzel kapcsolatos érdekes lehetőséget. Ezekhez a dd parancsot is használni fogom, ezért először lássuk, mire használhatod ezt! Ha lehet, egy gyakorlás céljára telepített virtuális géppel dolgozz!
Veszélyforrás!
Az alábbi példák kipróbálásával nagyon vigyázz, nehogy olyan diszkeket, partíciókat írj felül, amelyek számodra értékes adatokat tartalmaznak!
A dd jelentése Disk Dump, alapvetően a feladata az, hogy valahonnan olvasson, és azt valahová kiírja. Különösen jól használható adathordozók tartalmának olvasására és írására. Az alábbi példában egy CD lemez tartalmát bájtról bájtra olvasom, és egy fájlba írom:
root@koczka-lnx:~# dd if=/dev/cdrom of=counterstrike.iso bs=1024K
A paraméterek jelentése:
- if=/dev/cdrom:
a parancs ebből a fájlból olvas (az
if
jelentése itt input file). A/dev/cdrom
a CD/DVD meghajtó eszközfájlja, ennek olvasása a lemez bitszintű olvasását (tehát nem a fájlrendszerének fájljait) jelenti.- of=counterstrike.iso:
az olvasott bájtok a counterstrike.iso fájlba kerülnek. Az
of
jelentése output file.- bs=1024K:
a
bs
jelentése block size. Ha ezt a paramétert nem adod meg, a dd egybájtos egységeket olvas, majd ír, ezzel a másolás nagyon sok időt vesz majd igénybe. Ha a blokkméretet megemeled pl. 1024K-ra, akkor a parancs egy lépésben 1 MByte-ot olvas és ír, ezzel lényegesen gyorsabban történik meg a másolás.- count:
Bár most nem használtuk, a parancsnak megadhatod azt is, hogy hány blokkot akarsz másolni vele, ehhez a
count=n
formát kell használnod. A példában azért nem használtam, mert nem tudom előre, hogy a forrás hány blokkból áll, így azt a dd a fájl végéig olvassa majd.
Egy fájlt is fel lehet mountolni, ha a fájl egy fájlrendszert tartalmaz. Az előző példában készült counterstrike.iso
montolása az alábbi módon történhet. Ha fájlt akarsz mountolni, használnod kell a -o loop
paramétert, amely az ún. loop device-t használja a mountolás végrehajtásához.
root@koczka-lnx:~# mount -o loop counterstrike.iso /media/cdrom
Ugyanezt egy fájllal is megcsinálhatod, nézzük meg ezt is egy példán keresztül! Először hozzunk létre egy üres fájlt a /tmp
könyvtárban, a neve legyen vdisk
! A mérete legyen 100M Byte (1024 darab 100K-s blokkból álljon)! A dd parancs a /dev/zero
fájlból folyamatosan 0-kat olvas, és azokat a vdisk
fájlba írja:
root@raid1:/tmp# dd if=/dev/zero of=vdisk count=1024 bs=100K
1024+0 beolvasott rekord
1024+0 kiírt rekord
104857600 bájt (105 MB, 100 MiB) másolva, 0,173312 s, 605 MB/s
A fájl valóban létrejött:
root@raid1:/tmp# ls -l
összesen 102408
-rw-r--r-- 1 root root 104857600 okt 23 21:49 vdisk
Most megformázzuk a fájlt. Tudom, ez elsőre nem hangzik jól, de minden további nélkül megteheted:
root@raid1:/tmp# mkfs.ext4 vdisk
mke2fs 1.42.13 (17-May-2015)
Eszközblokkok eldobása: kész
Fájlrendszer létrehozása 102400 1 blokkal és 25688 inode-dal
Fájlrendszer UUID: 2151b034-79f5-45da-8879-9c7d15ceabdd
Tartalék szuperblokkok tárolva a blokkokon:
8193, 24577, 40961, 57345, 73729
Csoporttáblák foglalása: kész
Inode táblák írásakor: kész
Napló létrehozása (4096 blokk): kész
Szuperblokkok és fájlrendszer-könyvelési információk írása: kész
Most csatoljuk a fájlt, a csatolandó eszköz a fájl lesz:
root@raid1:/tmp# mount vdisk /mnt
Lássuk a tartalomjegyzékét:
root@raid1:/tmp# ls -l /mnt
összesen 12
drwx------ 2 root root 12288 okt 23 21:49 lost+found
Egy SD kártya másolása egy másikra (a forrás a /dev/sde
a cél a /dev/sdf
:
root@koczka-lnx:~# dd if=/dev/sde of=/dev/sdf bs=1024K
Egy merevlemez vagy SD kártya teljes tartalmának felülírása pl. eladás előtt az alábbi paranccsal történhet. A forrás a /dev/random
, amely minden olvasáskor egy véletlenszámot ad vissza. A cél a törlendő merevlemez, példánkban a /dev/sdc
. Ha ezt lefuttatod, a diszk tartalmát nem lesz könnyű helyreállítani, házi eszközökkel, szoftverekkel lehetetlen vállalkozásnak bizonyul majd.
root@koczka-lnx:~# dd if=/dev/random of=/dev/sdc bs=1024K
16.3. Redundáns diszkek¶
Ha egy PC szervizest megkérdeznél, hogy a számítógép mely alkatrészei szoktak a leggyakrabban meghibásodni, valószínűleg a tápegységeket és a merevlemezeket említené az első helyeken. A tápegység meghibásodása a legtöbb esetben nem okoz nagy traumát, az alkatrész cseréje után a számítógép újra működőképes lesz, a veszteséget a leállás következtében felmerült munkaidő vagy termelés kiesése jelenti. A Miért szervert? c. részben láttad, hogy a tápegység meghibásodásának kezelésére a szerverekbe több ilyet is beépítenek, így az egyik kiesése esetén a folyamatos üzem fennmarad.
A merevlemezek esetében azonban ennél bonyolultabb a helyzet, mert ha ez meghibásodik, akkor a rajta tárolt adat is elvész, ennek kezelése komoly problémákat vethet fel. Az adatok mentése sok esetben önmagában már nem elég, hiszen egy banki rendszerben, ahol az egyes számlák közt folyamatos mozgások történnek, nem lenne elfogadható megoldás, ha a rendszergazdák visszatöltenék az éjjeli mentést.
Ezért kiszolgáló gépet soha nem szoktam építeni úgy, hogy abban csak egy merevlemez van, azokban mindig egy több lemezből álló, az adatokat redundánsan tartalmazó ún. RAID tömböt teszek. A RAID betűszó, eredetileg a Redundant Array of Inexpensive Disks (olcsó merevlemezek redundáns tömbje), később a Redundant Array of Independent Disks (egymástól független diszkek redundáns tömbje). A mi szemszögünkből a lényeget a második megfogalmazás jelenti.
A feladatunk tehát az, hogy több diszk felhasználásával biztosítsuk, hogy egy vagy több diszk meghibásodása esetén ne történjen adatvesztés, és a folyamatos üzem is fenntartható legyen. Lássuk, milyen megoldások léteznek erre, ezek hogyan működnek, milyen előnyeik, hátrányaik vannak!
16.3.1. RAID1¶
A legegyszerűbb megoldást az ún. RAID1 jelenti. (A nevében levő 1-es a RAID tömb típusára utal.) Ebben az alapötlet az, hogy a tömbben két diszket használunk fel, és minden adatot mindkét diszkre kiírunk. Az alábbi ábrán a teljes folymatot mutatom meg, hogy biztosan jól értsd a RAID helyét a fájlkezelés rendszerében.
A bal oldalon az alkalmazás réteg látható. Ebben egy alkalmazással, példánkban a Microsoft Worddel menteni akarunk egy fájlt. A Wordnek „fogalma sincs” mi az, hogy fájlrendszer, bekéri a mentendő fájl nevét és a helyét, átadja a mentendő adatokat az operációs rendszer megfelelő moduljának, és rábízza a mentést. A fájlrendszer rétege a mentendő adatokat tárolási egységekre bontja (példánkban hat egységre), majd továbbítja ezt a diszk kezelő réteg felé. Példánkban ez a réteg kezeli a RAID1-et, így nem egy diszkre, hanem mindkettőre kiírja az adatblokkokat.
Mi történik, ha az egyik diszk elvész? A diszk kezelő réteg szoftvere érzékeli ezt, lekapcsolja a hibás diszket, és a továbbiakban egy diszkkel („fél lábon”) működik tovább. Amikor a rendszer üzemeltetője észleli a hibát, a hibás lemez kicserélése után elindítja azt a szinkronizálási folyamatot, amely során a működőképes diszk tartalmát átmásolja az új diszkre (ez az újraépítés, a rebuild). Ez alatt a rendszer mindvégig működőképes marad, bár a rebuild érezhető teljesítményvesztést okoz.
Hasonlítsuk össze a tömb sebességét az egy diszkre alapozott rendszerrel!
- Írás:
Az írási folyamatok sebessége nem változik. A felírandó adatblokkokat mindkét diszkre kiküldi a rendszer, azok felírása közel párhuzamosan történik, így itt nem számolhatunk különbséggel.
- Olvasás:
Ez akár kétszer olyan gyors is lehet a RAID1 esetében, mivel a diszk kezelő réteg számára adott a lehetőség, hogy egy adatblokkot az egyik diszkről, míg a következőt a másikról olvassa. (Példánkban az 1-est a Disk1-ről, és vele párhuzamosan a 2-est a Disk2-ről, a 3-ast megint a Disk1-ről és így tovább.)
Mi a helyzet a tárolókapacitással? Ez a teljes tárolókapacitás fele, azaz, ha egy diszk mérete N
, akkor a RAID1-es tömb teljes mérete is N
lesz.
Megjegyzés
A legtöbb RAID megoldás szoftvere képes valamilyen formában értesítést küldeni, ha valamilyen hiba lép fel a RAID alrendszerben. Ez általában egy e-mail értesítés, de kis ügyeskedéssel más üzenetek is kiküldhetők, SMS-ek, de akár az azonnali üzenetküldő szolgáltatások is beköthetők lehetnek.
RAID1-es tömböt építhetsz kettőnél több diszkből is, de abban az esetben is minden diszk tartalma azonos lesz. A teljes tárolókapacitás továbbra is
N
lesz, az olvasási sebesség tovább gyorsulhat.A RAID1-et azért, mert az egyes diszkek tartalma megegyezik, tükrözésnek is nevezik.
A RAID tömbök esetében minimalizálni kell azt az időt, amíg a tömb valamelyik eleme nem áll rendelkezésre (ilyenkor azt mondjuk, a tömb degradált állapotban van). Hogy ez minél kevesebb ideig legyen így, sok megoldás lehetőséget ad az ún. spare disk (tartalék diszk) beépítésére és kezelésére. Amegoldás lényege az, hogy a két diszk mellé egy harmadikat is beépítenek, amit a normál üzemben nem használ a rendszer. Amennyiben valamelyik diszk meghibásodik, a RAID alrendszer azt leválasztja, és a spare diskre azonnal elindítja rebuild folymatot.
16.3.2. RAID0¶
A RAID1 mellett gyakran találkozhatsz egy másik, két diszkre alapozott megoldással, a RAID0-val. Ennek működése első pillantásra nagyon hasonlít a RAI1-re, de attól egy pontban eltér, ami minden tulajdonságát megváltoztatja.
Ahogyan az alábbi ábrán látható, a RAID1 működése során egy adatblokkot csak egy diszkre ír ki, ezért redundáns adattárolásról ebben az esetben nem beszélhetünk. Ezért a tömb tulajdonságai egészen mások, mint a RAID 1 esetében:
A teljes tárolókapacitás
2*N
, mivel a redundancia hiánya miatt mindkét diszk teljes egészében hasznos adatokkal telik meg.Az írási és az olvasási sebesség is az egydiszkes rendszer duplája lesz.
Ismét csak a redundancia hiánya miatt, amennyiben az egyik diszk meghibásodik, a teljes alrendszer tartalma használhatatlan lesz.
Ez nem sok pozitívumot tartalmaz, egyáltalán miért érdemes RAID0-s alrendszert készíteni? Csak a sebesség miatt. Ha különösen gyors háttértárra van szükséged, és el tudod fogadni, hogy azt rendszeresen mentened kell, akkor érdemes lehet RAID0-s tömböt használni.
Megjegyzés
Ne feledd, hogy ha több diszked van, akkor annak valószínűsége, hogy valamelyik meghibásodik, magasabb, mint annak valószínűsége, hogy egy diszkből egy meghibásodik.
A RAID0 névben a 0 azt is jelenti, hogy nem igazi RAID-ről van szó.
Ha azt gondolod, hogy az egyik diszk elvesztése esetén minden második fájlod elérhető lesz egy RAID0-s tömbben, akkor nem értetted meg a RAID réteg helyét. Ez a fájlrendszer alatt működik, ezen a szinten csak adatblokkok vannak, a fájlok itt nem értelmezettek.
16.3.3. RAID5¶
A RAID1 legnagyobb problémája a diszkek kihasználtságának alacsony aránya. Ezért további RAID megoldásokat dolgoztak ki, van RAID2, RAID3, RAID4, de ezek a gyakorlatban nem terjedtek el, ezért ezekkel nem foglalkozunk. (Ha érdekel a működésük, az Interneten találsz leírásokat róluk.) A következő megoldást a RAID5 jelenti, amelynek működéséhez legalább három diszkre van szükség.
Az ábrán látható, hogy a RAID5 a diszkre íráskor minden két egységnyi adathoz három egységnyi diszk területet használ, két adat után egy ún. ECC-t (Error Correction Code) számol, és azt írja fel a harmadik blokkba. A ECC-k kelyét ráadásul forgatja, az egyes diszkeken a ECC-k azonos számban helyezkednek el.
A ECC kiszámítása a XOR (kizáró vagy) műveleten alapul, a megértéséhez lássunk egy példát! Képezzünk ECC-t két számból, a 153-ból és a 214-ből! Ez után „elveszítjük” az egyiket, majd a ECC segítségével újból kiszámítjuk. Képezzük először a ECC-t úgy, hogy a két számot kettes számrendszerben írjuk fel, majd bitenként kizáró vagy műveletet hajtunk végre:
153 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
214 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
21 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
A ECC értéke tehát 21, ezt írjuk fel a RAID5 esetében a ECC blokkba.
Most feltételezzük, hogy az egyik diszk tartalma megsemmisült, az azon található adatok nem érhetők el. A rendszerbe betesszük az új diszket, és elindul a rebuild folyamat. Ennek kétféle esetet kell kezelnie. Az egyikben az elveszett adat a ECC, ez a fentiek alapján nem probléma, hiszen az újra kiszámítható. A másik esetben ismert az egyik adat és a ECC, ki kell számítani az elveszett másik adatot. A példánkban ismerjük a 214-et és a ECC 21-es értékét, számítsuk ki a hiányzó másik adatot! A megoldáshoz ugyanúgy a kizáró vagy műveletet kell használni, mint az első esetben:
214 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
21 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
153 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
Visszakaptuk az eredeti adatot, a 153-at! A RAID5 tömb normál működése során is rengeteg ECC számítást igényel, a rebuild folyamat esetében ez fokozottan igaz. Egy nagyobb tömb esetében a rebuild folyamat sajnos napokat is igénybe vehet.
A RAID5 írási és olvasási sebessége is nagyobb, mint az egydiszkes rendszeré, hiszen egységnyi idő alatt két adatblokk is kiírásra kerül. A diszkek kihasználtsága jobb, mint a RAID1-é, hiszen ott a teljes diszk terület fele használható adatok tárolására, egy N diszkből álló RAID5-ös tömb esetében N-1
(hoszen mindig egy ECC kerül felírásra). Az adattárolás biztonságával már rosszabb a helyzet, a tömbből továbbra is egy diszk veszhet el, de mivel három diszkünk van, az, hogy egy meghibásodik, nagyobb valószínűséggel bír.
Megjegyzés
A RAID5 tömb 3-nál több diszkből is állhat, ebben az esetben két adatblokkból képződik egy ECC, majd a következő adattal és a ECC-vel egy újabb ECC és így tovább. Ebből következően a RAID5-ös tömbök sebessége a diszkek számával folyamatosan csökken.
16.3.4. RAID6¶
A RAID5-öt számos esetben kritika azért, mert a nagyméretű diszkek használata esetén a rebuild művelet nagyon sokáig tart, és ha ennek során még egy diszk meghibásodik, a teljes RAID tömb tartalma elvész. A helyzetet tovább rontja az, hogy a diszkek rendszerint a gyártósorról egymás után lejött diszkek, a gyakorlatban még az is előfordul, hogy a sorozatszámuk is egymás után következik, így várhatóan egymáshoz nagyon közeli időpontban fognak meghibásodni. Ezért sokan tartózkodnak a RAID5-től, és helyette RAID6 használatát javasolják.
A RAID6 működésében nagyon kasonlít a RAID5-höz, de nem csak soronként, hanem oszloponként is képez ECC-ket. Ennek következtében két diszk elvesztését bírja ki, így minimálisan 4 diszk szükséges hozzá, a tárolókapacitása viszont csak 2N
lesz, ahol N az egyes diszkek mérete.
16.3.5. Hibrid RAID tömbök¶
A fenti RAID tömbökből hibrid megoldások is készíthetők úgy, hogy RAID tömböket használunk fel egy újabb tömb elemeiként. Lássunk néhány példát ezekre!
A RAID0+1 RAID0-s tömbökből alkot RAID1-es tömböt úgy, ahogyan azt alábbi ábra mutatja. A Disk1 és a Disk2 RAID0-ban működnek, Disk3 és Disk4 szintén egy tükrözött tömböt alkotnak. Ezt a két tömböt egy RAID1-es tömbbe fogjuk össze, így a megnövekedett sebesség előnyét is megkapjuk.
Mi történik, ha a RAID0+1 tömb meghibásodik? Akár két diszk is elveszhet, ha azok a azonos RAID0-s tömb diszkjeiként működnek. Ha viszont különböző tömbben hibásodnak meg, a teljes tömb megsemmisül.
Fordítsuk meg a két tömb szerepét, RAID1-es tömböket szervezzünk RAID 0-ba! Ebben az esetben is két diszk sérülhet meg abban az esetben, ha azok két különböző RAID1-es résztömb elemei. Ha a két diszk azonos RAID1-es tömbben van, a RAID0-s tömb egyik lába elvész, így a teljes tömb megsemmisül.
A RAID5 is lehet hibrid tömb eleme. A RAID5+0 esetében két RAID5-ös tömböt fogunk össze egy RAID0-s tömbbe. Egy ilyen tömbben maximum két diszk veszhet el, de csak abban az esetben, ha azok két különböző RAID5-ös tömbben vannak.
A RAID0+5 működése ennek fordítottja, három RAID0-s tömb alkot egy RAID5-öst. Itt is két diszk veszhet el abban az esetben, ha azok egy RAID0-s tömb elemei. Mivel a RAID0-s tömbök nem maradnak működőképesek, ha egy diszk megsemmisül bennük, ezért más esetekben két diszk elvesztése a teljes tömb megsemmisülését jelenti.
16.3.6. Hardver vagy szoftver?¶
A RAID megoldásokra beszerezhetsz célhardvert, de a mai operációs rendszerek egy része szoftveres megoldást is kínál erre. Azt, hogy melyik megoldást válaszd, az adott környezet dönti el. A hardveres RAID vezérlő mellett és ellen az alábbi érvek játszanak szerepet,
- Előnyök:
A hardveres megoldás leveszi a terhet a processzorról, és az erre dedikált hardverrel látja azt el. A RAID5-től megjelenő ECC számítás következménye már érezhető lehet a hardveres megoldás javára.
A hardveres vezérlők támogathatók egy ún. BBU-val (Battery Backup Unit). Ez egy akkumulátorral ellátott modul, amely áramszünet esetén is képes a diszkre még ki nem írt adatok tárolására. Ha ilyen is rendelkezésre áll, bekapcsolható a vezérlőn az írás cache, ami jelentősen felgyorsítja a diszk műveleteket. BBU nélkül is meg lehet ezt tenni, de ebben az esetben az áramszünet adatvesztéshez vezet. Az ábrán a HP P410-es RAID vezérlője és a BBU-jához kapcsolt akkumulátor látható.
Rendszerint (bár nem kizárólag) a hardveres RAID vezérlővel ellátott gépek esetében építenek be olyan merevlemez caddy-ket, amelyek üzem közben lehetővé teszik a merevlemez cseréjét. Ezt a lehetőséget hot swap-nak nevezik. Az ábrán a Lenovo szerverének üzem közben cserélhető diszk megoldása látható.
- Hátrányok:
A legolcsóbb hardveres RAID vezérlők csak a PC-s alaplapokra integrált SATA vezérlők, amelyekhez driver szükséges, ez pedig valójában szoftveres megoldást jelent.
Az olcsó RAID vezérlők gyakran csak RAID0-t és RAID1-et tudnak.
A RAID vezérlő meghibásodása esetén tartalék RAID vezérlőre van szükség. A szoftveres megoldásban ilyenre nincs szükség.
Előfordulhat (bár én még nem találkoztam ilyennel) hogy a hardveres RAID vezérlőn működő diszk egy normál SATA portra kapcsolva nem olvasható, mert a RAID vezérlő valamilyen speciális formátumot használ. Ebben az esetben mindenképp szükség van egy, az eredetivel megegyező RAID vezérlőre ahhoz, hogy az adatainkhoz hozzáférhessünk.
Veszélyforrás!
Fontos, hogy értsd, a RAID alrendszerek használata nem helyettesíti a rendszeres adatmentést! Az én gyakorlatomban adatok helyreállítására túlnyomó többségben nem azért volt szükség, mert meghibásodott valamilyen adattároló, hanem mert a felhasználók letörölték, felülírták a fájljaikat. Ezen a RAID alrendszerek nem segítenek, a változások azonnal végbennek, így nincs honnan helyreállítani az ilyen módon elvesztett adatokat.
A mai merevlemezek képesek felügyelni a saját állapotukat. Nyilvántartják a hibás szektorok számát, rögzítik a sikertelen műveletek számát, és sok más, a működésük során felmerült hibát is. Ezt a funkciót s.m.a.r.t.-nak nevezik (Self-Monitoring, Analysis and Reporting Technology). A működés során gyűjtött adatok kiolvashatók, és ezzel a merevlemezek hátralevő élettartama is meghatározható. Erre alapozva egy élettartama vége felé járó merevlemez már akkor kicserélhető, amikor az még nem hibásodott meg. Ha érdekel a téma, és Windows-t használsz, probáld ki a Hard Disk Sentinel-t. Linuxon a smartmontools látja el ezt a feladatot (a virtuális gépen nem érdemes ezzel foglalkoznod, nem fogsz valós eredményt kapni).
16.4. Telepítés RAID tömbre¶
A RAID alapelveinek megértése után lássuk, hogyan kell azt a gyakorlatban megvalósítani! Először azt mutatom meg, hogy a telepítés során mit kell másképp csinálnod, ha a teljes rendszert szoftveres RAID tömbökre szeretnéd telepíteni, a következő fejezetben pedig megismered az mdadm parancsot, amivel ezeket karban lehet tartani.
Ha hardveres RAID vezérlőt használsz, akkor az egyes tömböket a RAID vezérlő szoftverével kell előkészítened. Ebbe általában a gép indulásakor tudsz belépni, hasonlóan ahhoz, mint amikor a géped BIOS-ába szeretnél belépni. Ez általában egy karakteres (a legújabb szerverek esetében egy grafikus) felület, amire az alábbi néhány ábra mutat példát (ezek egy HP ProLiant G9-es szerver HP P410ar vezérlőjének kezelőfelületéről készültek.)
Két SSD összekapcsolásával hozunk létre egy tükrözött kötetet.
A RAID tömb kialakításakor több paraméterrel szabályozható a tömb működése.
A rendszerben levő diszkek és tömbök (itt logikai meghajtóknak nevezik őket) áttekinthetők és később is menedzselhetők. Fontos, hogy az operációs rendszer számára ezek a tömbök mint meghajtók jelennek meg, azok összetevőiről, a RAID működéséről annak nem igazán van tudomása. Ha ilyen gépre telepítesz operációs rendszert, pontosan úgy kell eljárnod, mint ahogyan azt a rendszer telepítésekor tanultad, a telepítés során nem kell a RAID tömbökkel foglalkoznod.
Ha nincs hardveres RAID vezérlőd, a szoftveres megoldást kell választanod, a továbbiakban ezzel foglalkozunk. Itt már jóval több feladatunk lesz!
A telepítési gyakorlatainkban a rendszert három partícióra telepítettük, egyet a rendszer, egyet a virtuális memória, egyet pedig a /var
vagy a /home
partíció számára hoztunk létre attól függően, hogy milyen célra telepítettük a rendszert. Ha a rendszert RAID tömbökre szeretnéd telepíteni, a telepítés sémája egy kicsit bonyolultabb lesz, amit az alábbi ábra szemléltet. Fontos, hogy ezt megértsd, mert a telepítés során ezeket a rétegeket fogjuk felépíteni.
Ez a fizikai réteg, példánkban három merevlemezt fogunk használni. Egyet-egyet egy RAID1-es tömb kialakításához, egyet pedig tartalékként (spare) hagyunk a rendszerben, hogy egy meghibásodás esetén az azonnal átvegye a hibás diszk szerepét. A két aktív diszk a
/dev/sda
és a/dev/sdb
lesz, a tartalékot a/dev/sdc
adja.Az egyes diszkeket ebben az esetben is partíciókra kell bontani, ezek fogják adni a redundáns kötetek elemeit úgy, ahogyan az ábrán látod: a
/dev/sda1
és a/dev/sdb1
adja a tükör két elemét, a/dev/sdc1
lesz a tartalék. Ugyanígy áll elő a/dev/md1
és a/dev/md2
is.A
/dev/sda1
és a/dev/sdb1
együtteséből keletkezett elem neve kötet, a neve/dev/md0
lesz. A második partíciókból a/dev/md1
, a harmadik partíciókból a/dev/md2
keletkezik. A gyakorlatban zavaró, hogy a partíciók számozása 1-gyel, a RAID tömböké 0-val kezdődik, erre a későbbiek során figyelni kell.Fájlrendszert kialakítani az így kapott köteteken kell majd.
Megjegyzés
Fontos, hogy értsd, a RAID tömböt nem diszkekre, hanem annak partícióira építjük fel.
Gondolom, nyilvánvaló, hogy bár elvben létrehozhatnád az egyes köteteket úgy, hogy azok egy diszk különböző partícióiból állnának össze, a gyakorlatban ez nem sokat érne, hiszen az őket tartalmazó diszk meghibásodásakor minden, a kötetet alkotó partíció kiesne a tömbből, így az adatvesztés elkerülhetetlen lenne.
A virtuális gép létrehozásakor az alábbi ábr szerint három virtuális diszket vettem fel, hogy a kötetek létrehozhatók legyenek.
A telepítés során a lemezek partícionálása menüpontban kell az új feltételeknek megfelelően eljárnod.
Itt is a kézi beállításokat választom ki.
A telepítő most három virtuális merevlemez partícionálását teszi lehetővé. Egy darabig most a fenti sémánk kettes szintjén dolgozunk, elkészítjük mindhárom merevlemez három-három partícióját.
Létrehozom az üres partíciós táblát.
Mivel kis diszkjeink vannak, az msdos típusú partíciós tábla megfelel a céljainknak.
Az első merevlemezen most már kialakíthatók a partíciók. A folyamat több lépése hasonló lesz ahhoz, amit már ismersz. Ki kell választanod a SZABAD HELY sort, majd nyomj Enter-t! A fenti ábra /dev/sda1
partícióját készítjük el, ami a rendszerpartíció egyik eleme lesz.
Egy új partíciót kell létrehozni.
A mérete legyen 4GByte, ez a telepítési gyakorlatainkhoz elég.
Elsődleges típusú partíció legyen.
Haladjunk sorban, legyen a diszk elején.
Eddig minden ugyanúgy történt, mint az egyszerű telepítéskor, innentől viszont másképp járunk el.
Az új partíció típusa ne Ext4 legyen, hanem RAID fizikai kötet!
Mivel még nem fájlrendszert készítettünk elő, a fájlrendszerre jellemző beállításokat most nem kell elvégezned. Válaszd a Partíció beállítása kész menüt!
Az első partíció kész, már csak nyolc van hátra :-). Válaszd megint a SZABAD HELY menüt, és készítsd el a következő partíciót, ez a /dev/sda2
lesz, ami majd a virtuális memória egyik „lábát” adja.
Új partíciót hozunk létre.
A mérete legyen 1GByte.
Elsődleges partíciót választok.
Továbbra is sorban haladunk, ezért a szabad hely kezdetén kezdődjön ez a partíció is.
Ez a partíció sem tartalmaz közvetlenül fájlrendszert, ezért a Használat pontban itt is Raid fizikai kötetet kell megadni.
A helyes választás tehát: Raid fizikai kötet.
Nincs szükség további beállításokra, válaszd a Partíció beállítása kész menüpontot.
Két partícióval készen vagyunk, az első diszk utolsó partíciója következik. A további gyakorlatok elvégezhetősége érdekében most nem fogom a teljes szabad tárterületet felhasználni, ezért a /var
partíció is csak 4GByte-os méretű lesz. A fennmaradó szabad területet később, már a működő operációs rendszerben fogjuk használatba venni. Ismét a SZABAD HELY sort kell kiválasztani, majd folytatni a partícionálást.
Új partíciót hozunk létre.
A mérete 4 GByte.
Az új partíció most is elsődleges lesz.
És most is a szabad hely elején kezdődjön.
Ebben az esetben is megváltoztatjuk a partíció típusát.
A típus RAID fizikai kötet legyen.
Ezzel a partícióval is készen vagyunk.
A 29. képernyőképnél járunk, és még csak ott tartunk, hogy az első diszken kialakítottuk a három RAID tömbhöz szükséges három partíciót. Az eddigiek alapján bízom abban, hogy egyértelmű, hogy most a másik két diszkkel is pontosan ugyanezeket a lépéseket kell elvégezned, három-három azonos méretű partícióra van szükség a /dev/sdb
és a /dev/sdc
lemezen is.
Nem írom le ezek lépéseit, mert pontosan ugyanazok, mint amit eddig láttál, az alábbi ábrán már azt az állapotot látod, amikor már a fentieket a másik két diszken is elvégeztem. Összesen kilenc partíció áll rendelkezésre, és ezzel a partícionálási sémánk második rétegét is megvalósítottuk.
Mostantól a harmadik réteget, a RAID tömbök kialakítását fogjuk elvégezni, ehhez válaszd ki a Szoftvees RAID konfigurálása menüpontot!
Ahhoz, hogy ezt a műveletet folytatni lehessen, ki kell írni az eddig összeállított partíciós táblákat a diszkekre. (Eddig, mint az egyszerű telepítésnél is csak a telepítő számára írtuk le a partíciós táblákat, tehát azok még csak a telepítő számára ismertek.)
Hozzuk létre az első kötetet, az /dev/md0
-t! Ehhez a Többlemezes eszköz létrehozása menüpontra lesz szükség.
Meg kell adnod, hogy milyen típusú RAID tömböt akarsz készíteni. Mivel a feladatunk egy tükrözött tömb készítése tartalék diszkkel, a RAID1-et kell kiválasztani.
Meg kell adni a RAID tömbben használt aktív eszközeinek számát. A mi esetünkben ez 2 (a spare nem aktív eszköz).
Most kell megadnod, hogy hány tartalék eszközt szeretnél a tömbhöz rendelni. A koncepciónk alapján ide 1-et kell megadnod.
Most ki kell választani, hogy mely partíciókból szeretnéd összerakni a tömböt. Itt az aktív eszközöket kell kiválasztani. Ha visszatekintesz a sémánkra, láthatod, hogy a /dev/sda1
és a /dev/sdb1
alkotja ezt a kötetet, ezért azokat jelöltem be.
A tartalék eszköz a /dev/sdc1
lesz.
Az első kötetet sikeresen létrehoztuk, most a másik két köteteten a sor. A folymat ugyanaz, mint eddig. Először egy többlemezes eszközt hozunk létre.
Ez is RAID1 lesz.
Két aktív eszközzel…
és egy tartalékkal.
Összerendeljük a /dev/sda2
és a /dev/sdb2
partíciókat egy kötetbe.
Megadjuk, hogy a /dev/sdc2
legyen a spare partíciónk, és ezzel ez a kötet is készen van.
Az utolsó kötet következik, ismét válaszd ki a többlemezes eszköz létrehozásával.
Ez is RAID1 lesz.
Szintén két aktív eszközt határozunk meg.
És ehhez is tartozik egy tartalék.
A két aktív eszköz a /dev/sda3
és a /dev/sdb3
lesz.
A tartalék pedig a /dev/sdc3
.
Végeztünk a sémák szerinti harmadik szinttel, készen vannak a köteteink, lépjünk vissza a partícionálás menüjébe.
Itt a korábbiakhoz képest elég bonyolulttá vált a helyzet, látszanak a merevlemezek, a partíciók sorai, felül pedig a RAID kezdetű sorokban a kötetek láthatók. Már csak a fájlrendszereket kell az egyes köteteken kialakítanunk, ezek a korábban már megismert módszer szerint történnek. Válaszd ki a RAID1 0.eszköz 4 GByte-os sorát, úgy, ahogyan azt az alábbi ábrán látod!
Be kell állítanod ennek használatát, ami jelenleg mellőzés, ez nyilván nem felel meg az elképzeléseinknek, ezért változtassunk rajta!
Válaszd az Ext4 fájlrendszert!
Állítsd be a fájlrendszer paramétereit a korábban tanultak alapján, add meg, hogy ez a kötet szolgál majd a rendszer gyökereként, majd térj vissza a partícionálás menüjébe!
Most az 1 GByte-os nagyságú, második kötet következik, amit a virtuális memória számára hoztunk létre.
A mellőzés itt sem a megfelelő beállítás.
Ahhoz, hogy ez virtuális memória lehessen, a típusát cserehelyre kell változtatnod. Ennek nincsenek további beállítási lehetőségei, így ezzel készen is vagyunk.
Ez a kötet is készen van.
Az utolsó kötet következők. Válaszd ki a hozzá tartozó 4 GByte-os sort, és lássunk neki!
Ez is mellőzött partíció lenne, amin változtatnunk kell.
Ezen a köteten is fájlokat kell tárolnunk, ezért itt is az Ext4-et kell kiválasztani.
A sémánk szerint ennek a fájlrendszernek a /var
könyvtár lesz a mountolási pontja, ezt feltétlenül be kell állítanod. A további részletek meghatározása után visszaléphetünk a partícionálási menübe.
Készen vagyunk, a partícionálási folyamat lezárható, és folytatható a rendszer telepítése.
A telepítő megformázza a RAID eszközöket, és kialakítja a virtuális memóriát.
Tegyük fel, hogy az így kialakított rendszer egyik merevlemeze elromlik, azt cserélni kell. Ha ez az első merevlemez, akkor problémát okozhat, hogy azt a lemezt kell kivenned a rendszerből, amelyen a master boot rekord van, hiszen ez a boot folyamathoz nélkülözhetetlen. Ezért, ha RAID tömbre telepíted a rendszert, annak minden egyes elemére fel kell írni az MBR-t, azért, hogy bármelyikről képes legyen a számítógép az operációs rendszert elindítani. Az alábbi képernyőn ezt láthatod:
Azért nem felhőtlen az örömünk, mivel tartalék diszkünk, a /dev/sdc
kimaradt. A meglepetések elkerülése érdekében érdemes ezt mihamarabb pótolnod a grub-install /dev/sdc paranccsal:
koczka@raid1:~$ sudo grub-install /dev/sdc
Telepítés a(z) i386-pc platformhoz.
A telepítés befejeződött. Nem jelentettek hibát.
16.5. Munka tömbökkel¶
Lássuk, hogyan lehet kezelni a RAID tömböket egy működő rendszer esetén! Ebben a fejezetben megtanulod, hogyan tudod ellenőrizni a RAID tömb állapotát, és hogyan kell eljárnod, ha egy diszket ki kell cserélned. A legtöbb feladatra az mdadm parancsot kell majd használnod.
16.5.1. Ellenőrzés¶
Először ellenőrizzük a RAID tömbök állapotát! Ehhez nem egy hagyományos parancsot fogunk használni, hanem a /proc
fájlrendszert használjuk úgy, hogy a /proc/mdstat
fájl tartalmát olvassuk ki. Emlékeztetlek, hogy ez nem egy reguláris fájl, a /proc
könyvtárban levő fájlok csak látszólag fájlok, valójában a kernel egyes függvényeit éred el ezen fájlokon keresztül. Amikor tehát a /proc/mdstat
fájl tartalmát olvasod, valójában a kernel felé egy lekérdezést indítasz a RAID tömbök állapotáról, az egy szöveges választ ad vissza úgy, mint ha egy egyszerű textfájlt olvastál volna.
Lássunk egy példát!
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda3[0] sdb3[1] sdc3[2](S)
3904512 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1] sdc1[2](S)
3903488 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1] sdc2[2](S)
976320 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Mit jelentenek az egyes részek? Az első sorban (Personalities…) a kernel felsorolja, hogy milyen raid változatok kezelésére képes. Ez után a három RAID tömb (md2, md1, md0) tulajdonságainak és állapotának leírása következik. A nevet az állapot követi, ez jó esetben active
. A RAID típus egyértelmű, példánkban ez RAID1. A következő részben a RAID tömb alkotóelemeit láthatod, a tartalék mögött (S) olvasható.
Név |
Állapot |
RAID típus |
Részegységek |
Spare diszk |
md2 |
active |
raid1 |
sda3[0] sdb3[1] |
sdc3[2](S) |
A [2/2] [UU]
a tömb állapotát írja le. A 2/2
azt jelenti, hogy a tömb két eszközből áll, és mindkettő működik. Az [UU]
ugyanezt szemlélteti, az U
jelentése Up, esetünkben működő eszköz. Probléma esetén itt _
jelenik meg, ekkor az adott pozíción levő eszköz hiányzik.
16.5.2. Hibás elem cseréje¶
Előbb-utóbb bekövetkezik a merevlemez meghibásodása, és szükségessé válik a hibás eszköz cseréje, és a RAID tömb helyreállítása. Erre érdemes idejében felkészülni, hogy ne a probléma bekövetkeztekor kelljen ad-hoc döntéseket hoznod, vagy akkor elkezdeni utánaolvasni, hogy mit is kellene tenni.
A gyakorláshoz nem kell megvárnod, hogy valamelyik diszk valóban meghibásodjon. Az elöregedett diszkek cseréjéhez a Linux rendszerek lehetővé teszik, hogy egy eszközt működésképtelennek jelölj. Ezt fogjuk az alábbiakban kihasználni, egy diszket hibásnak jelölünk, kivesszük a tömbből, végül egy másik diszkkel pótolni fogjuk.
Először jelöljük hibásnak az /dev/sdb1 eszközt! Ehhez a mdadm parancsot fogjuk használni. Mivel szinte minden műveletet ezzel végzunk majd el, érdemes megtanulni a parancs általánosabb alakját: mdadm tömb művelet eszköz, azaz meg kell adni, hogy melyik tömbön milyen műveletet melyik eszközzel akarsz végrehajtani. Most a -f
(fail) lesz a művelet, amit az md0
tömb /dev/sdb1
eszközére vonatkoztatunk. Azaz az /dev/md0
tömbben hibásnak jelöljük a /dev/sdb1
-et.
Megjegyzés
Ha virtuális gépet használsz, és csak gyakorolsz, nem fogod majd követni a helyreállítási folyamatot, mert a kisméretű diszkekkel a rendszer pillanatok alatt végez. Ezért érdemes lehet a helyreállítás sebességét lecsökkenteni az alábbi parancsokkal:
root@raid1:~# echo 80 > /proc/sys/dev/raid/speed_limit_min root@raid1:~# echo 100 > /proc/sys/dev/raid/speed_limit_maxÉles rendszerben is lehet értelme ennek a beállításnak, ha a meghibásodott diszk cseréje utáni helyreállítási folyamat nagyon lelassítja a gép szolgáltatásait, ezzel csökkenthető a helyreállításra fordított idő. Az alapérték 1000, ennek megfelelően érdemes választanod.
mdadm /dev/md0 -f /dev/sdb1
Lássuk, mi a helyzet a RAID tömbök állapotával! Az md0 esetében sdb1[1](F)
látható, ahol az (F) jelzi az /dev/sdb1
meghibásodását, ugyanezt mutatja az [U_]
is. Mivel volt spare diszk a rendszerben, a helyreállítás azonnal megkezdődött, ennek folyamata nyomon követhető a [>....................]
sorban.
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda3[0] sdb3[1] sdc3[2](S)
3904512 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1](F) sdc1[2]
3903488 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 2.1% (85376/3903488) finish=440.3min speed=144K/sec
md1 : active raid1 sda2[0] sdb2[1] sdc2[2](S)
976320 blocks super 1.2 [2/2] [UU]
unused devices: <none>
A célunk a /dev/sdb
eltávolítása a rendszerből, ezért az azon levő másik két partíciót is hibásnak jelöljük az alábbi parancsokkal.
mdadm /dev/md1 -f /dev/sdb2
mdadm /dev/md2 -f /dev/sdb3
A rebuild ezekre csak az után kezdődik meg, miután a jelenlegivel már végzett a rendszer, addig ezek a hibás tömbök DELAYED
szinkronizációs állapotban lesznek.
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda3[0] sdb3[1](F) sdc3[2]
3904512 blocks super 1.2 [2/1] [U_]
resync=DELAYED
md0 : active raid1 sda1[0] sdb1[1](F) sdc1[2]
3903488 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 4.3% (168192/3903488) finish=372.9min speed=166K/sec
md1 : active raid1 sda2[0] sdb2[1](F) sdc2[2]
976320 blocks super 1.2 [2/1] [U_]
resync=DELAYED
unused devices: <none>
A folyamat végén a /dev/sdb
eltűnt, és a helyét a /dev/sdc
vette át, és a tömb újra teljes értékű állapotban van:
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda3[0] sdc3[2]
3904512 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdc1[2]
3903488 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[0] sdc2[2]
976320 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Megjegyzés
Ha a rendszerben nem lett volna tartalék diszk, a rebuild csak a hibás diszk kivétele és az új diszk beépítése után, a megfelelő parancsok kiadása után indult volna el. A fenti példában látszott, hogy a degradált állapot csak a szükséges ideig állt fenn.
Régebbi rendszereken ez után el kell távolítani a hibás diszken levő partíciókat, mivel a hibásnak jelölés nem végzi azt el, logikailag még a tömbök részei a
/dev/sdb1
, a/dev/sdb2
és a/dev/sdb3
. Add ki az alábbi parancsokat, amelyben a-r
kapcsoló jelentése remove! Ezzel a tömbökből eltávolítod a hibás partíciókat.mdadm /dev/md0 -r /dev/sdb1 mdadm /dev/md1 -r /dev/sdb2 mdadm /dev/md2 -r /dev/sdb3
A diszk cseréjéhez a virtuális gépben el kell távolítanod a hibás diszket. Ez a második volt, mivel a /dev/sdb
partícióit távolítottuk el. Mivel ehelyett szükség van egy új diszkre is, adj hozzá egyet a rendszerhez. Állítsd le a gépet, és végezd el a diszkek cseréjét!
Egy fizikai gépen az új diszket szinte biztosan a régi helyére kábelezed be, ezért a /dev/sdb
helyére kerül majd az új diszk. A virtuális gépen ez nem feltétlenül lesz így, azért le kell ellenőrizni, hogy mi az új diszk neve. Erre most is az lsblk parancsot érdemes használni. Ennek kimenetében látható, hogy a /dev/sda
nem tartalmaz partíciókat, tehát ez az új diszkünk.
root@raid1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
sdb 8:16 0 16G 0 disk
├─sdb1 8:17 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sdb2 8:18 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
└─sdb3 8:19 0 3,7G 0 part
└─md2 9:2 0 3,7G 0 raid1 /var
sdc 8:32 0 16G 0 disk
├─sdc1 8:33 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sdc2 8:34 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
└─sdc3 8:35 0 3,7G 0 part
└─md2 9:2 0 3,7G 0 raid1 /var
sr0 11:0 1 667M 0 rom
Az új diszken ki kell alakítani azokat a partíciókat, amelyek a másik két diszken már megvannak. Ezt megteheted a cfdisk parancsnál tanultakkal, de van egy sokkal egyszerűbb megoldás is, amelyben az egyik diszk partíciós tábláját (csak a táblát, nem az egyes partíciók adatait adatait) átmásolhatod egy másikra. Példánkban az /dev/sdb
partíciós tábláját másolom a /dev/sdb
-re:
root@raid1:~# sfdisk -d /dev/sdb | sfdisk /dev/sda
Checking that no-one is using this disk right now ... OK
Disk /dev/sda: 16 GiB, 17179869184 bytes, 33554432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS disklabel with disk identifier 0x5be58f28.
Created a new partition 1 of type 'Linux raid autodetect' and of size 3,7 GiB.
/dev/sda2: Created a new partition 2 of type 'Linux raid autodetect' and of size 954 MiB.
/dev/sda3: Created a new partition 3 of type 'Linux raid autodetect' and of size 3,7 GiB.
/dev/sda4:
New situation:
Eszköz Indítható Start Vége Szektorok Size Id Típus
/dev/sda1 2048 7813119 7811072 3,7G fd Linux raid automatikus
/dev/sda2 7813120 9766911 1953792 954M fd Linux raid automatikus
/dev/sda3 9766912 17580031 7813120 3,7G fd Linux raid automatikus
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Megjegyzés
Ha a cél diszk már tartalmaz partíciós táblát, annak felülírása csak akkor történik meg, ha használod a --force
paramétert is. Abban az esetben a helyes parancs: sfdisk -d /dev/sdb | sfdisk --force /dev/sda
Ellenőrizzük le, hogy létrejöttek-e a partíciók (igen, a /dev/sda
most már három partíciót tartalmaz):
root@raid1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 3,7G 0 part
├─sda2 8:2 0 954M 0 part
└─sda3 8:3 0 3,7G 0 part
sdb 8:16 0 16G 0 disk
├─sdb1 8:17 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sdb2 8:18 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
└─sdb3 8:19 0 3,7G 0 part
└─md2 9:2 0 3,7G 0 raid1 /var
sdc 8:32 0 16G 0 disk
├─sdc1 8:33 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sdc2 8:34 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
└─sdc3 8:35 0 3,7G 0 part
└─md2 9:2 0 3,7G 0 raid1 /var
sr0 11:0 1 667M 0 rom
Nézzük meg, milyen állapotban vannak a RAID tömbjeink! Látható, hogy most ezek az sdb és az sdc diszkekkel működnek, az sda egyik működésében sem vesz részt.
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sdc3[2] sdb3[0]
3904512 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sdb2[0] sdc2[2]
976320 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdc1[2] sdb1[0]
3903488 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Adjuk hozzá az új diszk partícióit az egyes tömbökhöz, ehhez megint az mdadm parancs kell. A művelet az -a
(add) lesz:
root@raid1:~# mdadm /dev/md0 -a /dev/sda1
mdadm: added /dev/sda1
root@raid1:~# mdadm /dev/md1 -a /dev/sda2
mdadm: added /dev/sda2
root@raid1:~# mdadm /dev/md2 -a /dev/sda3
mdadm: added /dev/sda3
Ellenőrizzük, a RAID tömbök állapotát! Látható, hogy a /dev/sdc
partíciói megjelentek az egyes tömbök spare eszközeiként, így a diszk alrendszer működését helyreállítottuk.
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda3[3](S) sdc3[2] sdb3[0]
3904512 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[3](S) sdb2[0] sdc2[2]
976320 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[3](S) sdc1[2] sdb1[0]
3903488 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Már csak egy lépés van hátra, a rendszerbetöltő telepítése az új diszkre. Ezt az alábbi paranccsal teheted meg:
root@raid1:~# dpkg-reconfigure grub-pc
A parancs a grub-pc csomagot fogja újra konfigurálni. Az első három kérdésre csak egy Enter-t kell nyomnod, a lényeg a negyedik lépésnél következik, ahol az alábbi ábrán látható módon minden diszket ki kell jelölnöd. Ennek eredményeként a rendszer bármelyik diszkről képes lesz elindulni.
16.5.3. Új tömb létrehozása¶
Az alábbi példában egy új RAID1-es tömböt hozok létre, ebben az esetben is spare diszkkel. Ehhez a diszkeken meghagyott üres helyeket fogom felhasználni.
Első lépésként a cfdisk programmal mindhárom diszken létre kell hozni a negyedik partíciót. A parancs a cfdisk /dev/sda lesz az első diszk esetében, a továbbiaknál értelemszerűen kell a diszkek nevét használni. Létrehozzuk a negyedik partíciót, a típusuk Linux raid automatikus felismeréssel
lesz. Ne feledd kiírni a változásokat, mielőtt kilépsz a programból.
Érdemes kiadni a partprobe parancsot azért, hogy a rendszer számára ismert legyen a megváltozott partíciós tábla:
root@raid1:~# partprobe
Ellenőrizzük az eredményt az lsblk paranccsal, látnunk kell a negyedik partíciókat minden diszken!
root@raid1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sda2 8:2 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
├─sda3 8:3 0 3,7G 0 part
│ └─md2 9:2 0 3,7G 0 raid1 /var
└─sda4 8:4 0 7,6G 0 part
sdb 8:16 0 16G 0 disk
├─sdb1 8:17 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sdb2 8:18 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
├─sdb3 8:19 0 3,7G 0 part
│ └─md2 9:2 0 3,7G 0 raid1 /var
└─sdb4 8:20 0 7,6G 0 part
sdc 8:32 0 16G 0 disk
├─sdc1 8:33 0 3,7G 0 part
│ └─md0 9:0 0 3,7G 0 raid1 /
├─sdc2 8:34 0 954M 0 part
│ └─md1 9:1 0 953,4M 0 raid1 [SWAP]
├─sdc3 8:35 0 3,7G 0 part
│ └─md2 9:2 0 3,7G 0 raid1 /var
└─sdc4 8:36 0 7,6G 0 part
sr0 11:0 1 667M 0 rom
Hozzunk létre egy új RAID1-es tömböt az alábbi paranccsal!
root@raid1:~# mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/sdb4 /dev/sdc4
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 7983104K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md3 started.
Az egyes paraméterek jelentése a következő:
- –create:
új tömböt hozunk létre.
- /dev/md3:
az új tömb neve. Érdemes sorban haladni,
/dev/md2
már van a rendszerünkben, ezért az új neve a 3-as lesz.- –level=1:
RAID1-es tömböt hozunk létre.
- –raid-devices=2 /dev/sdb4 /dev/sdc4:
A tömb két alapját adó partíciók száma kettő, ezek a
/dev/sdb4
és a/dev/sdc4
lesznek. Az/dev/sda4
majd a spare lesz, ezért nem haladtam sorban a diszkekkel.
A tömb létrejön, és azonnal megkezdődik az egyes partíciók szinkronizálása:
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md3 : active raid1 sdc4[1] sdb4[0]
7983104 blocks super 1.2 [2/2] [UU]
[==============>......] resync = 70.1% (5596672/7983104) finish=0.2min speed=155118K/sec
md2 : active raid1 sda3[3](S) sdc3[2] sdb3[0]
3904512 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[3](S) sdb2[0] sdc2[2]
976320 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[3](S) sdc1[2] sdb1[0]
3903488 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Hozzáadjuk a spare partíciót:
root@raid1:~# mdadm /dev/md3 -a /dev/sda4
mdadm: added /dev/sda4
Ellenőrizzük az eredményt! Látszik, hogy az md4 kötetet az sdc4[1] és az sdb4[2] alkotja, a tartalék pedig az sda4(S).
root@raid1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md3 : active raid1 sda4[2](S) sdc4[1] sdb4[0]
7983104 blocks super 1.2 [2/2] [UU]
md2 : active raid1 sda3[3](S) sdc3[2] sdb3[0]
3904512 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[3](S) sdb2[0] sdc2[2]
976320 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[3](S) sdc1[2] sdb1[0]
3903488 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Formázzuk meg a /dev/md4
kötetet ext4-es fájlrendszerrel!
root@raid1:~# mkfs.ext4 /dev/md3
mke2fs 1.42.13 (17-May-2015)
Fájlrendszer létrehozása 1995776 4 blokkal és 499712 inode-dal
Fájlrendszer UUID: 860d48c5-078d-4298-999b-93ec78b866ae
Tartalék szuperblokkok tárolva a blokkokon:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Csoporttáblák foglalása: kész
Inode táblák írásakor: kész
Napló létrehozása (32768 blokk): kész
Szuperblokkok és fájlrendszer-könyvelési információk írása: kész
Végül mountoljuk fel a /mnt
könyvtárba!
root@raid1:~# mount /dev/md3 /mnt
Megjegyzés
Ha el szeretnéd távolítani ezt a tömböt, az alábbiak szerint kell eljárnod. Először umountold a kötetet:
root@raid1:~# umount /mntMajd állítsd le a tömböt a --stop kapcsolóval:
root@raid1:~# mdadm --stop /dev/md3 mdadm: stopped /dev/md3Végül szüntesd meg a tömböt a --remove kapcsolóval:
root@raid1:~# mdadm --remove /dev/md3Végül ellenőrizd az eredményt a cat /proc/mdstat paranccsal!
16.6. Kötetkezelés Windows-on¶
A szoftveres RAID funkciók nem hiányoznak a Windows rendszerekből sem. Az alábbiakban megmutatom, hogy hogyan lehet ezt megvalósítani Windows 10 rendszeren. Ahhoz, hogy minden esetre tudjak példát adni, a virtuális gépbe 3 merevlemezt építek be, az elsőre fogom telepíteni az operációs rendszert úgy, hogy nem használom fel a teljes diszket, hanem a már korábban látott módon csak az első felét használom fel. A további részeket a telepítés során üresen hagyom.
A virtuális gép kialakításakor tehát három merevlemezt adok a géphez. Új lemez hozzáadásához a párbeszédablakban kattints az Add hard disk gombra!
Mivel három diszket akarunk a rendszerbe felvenni, ezért a diszkeket a SATA kontrollerhez kell kapcsolni. (Az alap beállításban szereplő IDE kontroller csak két diszket képes kezelni, az IDE amúgy is a múlté már.) Az átállítás módját az alábbi ábra szerint, egyesével végezd el.
A Windows telepítésekor az első diszk (0. meghajtó) felét használd csak fel! A fennmaradó szabad területre később szükséged lesz.
Figyeld meg, hogy a telepítő további három partíciót hozott létre, ebből az egyik a GPT-hez szükséges indító partíció. A rendszert az első diszk negyedik partíciójára kell telepítened. A többi diszket hagy érintetlenül, majd az operációs rendszer telepítése után fogjuk azokat használatba venni.
Veszélyforrás!
Ha a telepítő csak két új partíciót hozott létre, akkor nem kapcsoltad be az EFI BIOS-t a virtuális gépben. Ebben az esetben ne folytasd a telepítést, mert a későbbiekben ez probléma lesz, nem tudod majd végigvinni a gyakorlatunkat.
Telepítsd fel az operációs rendszert! Minden értéket hagyj alapbeállításon, most nem kell a részletekkel foglalkoznunk. A célunk egy rendszer gyors feltelepítése és a lemezkezelés megismerése lesz.
16.6.1. A lemezkezelő¶
A partíciók (később kötetek) kezeléséhez szükséges program indításához a Start menün kattints a jobb egérgombbal, majd válaszd ki a Lemezkezelés menüpontot.
A program elindul, majd felsorolja a rendszerben detektált lemezeket, és azok partícióit, köteteit (utóbbiról kicsit később). Az ablak alsó részében szemlélteti is ezeket, itt látható a három lemezt szimbolizáló sáv. A sávok elején levő blokkban olvasható le a lemez sorszáma, típusa, mérete és az állapota.
Példánkban a Lemez 1 és a Lemez 2 még nem tartalmaz partíciós táblát, ezt fejrészben is jelzi: ismeretlen partíció típust és nem inicializált állapotot jelöl. Ilyen esetekben azonnal kezdeményezi a partíciós tábla kialakítását úgy, ahogyan azt alábbi ábrán ezt látod. A partíciós tábla típusának GPT-t ajánl. Az MBR itt az msdos típusú partíciós táblát jelenti.
A partíciós tábla kialakítása után a mindhárom diszk elérhető, a típusuk alaplemez, GPT típusú partíciós tábla van rajtuk. Az 1-es és a 2-es diszk nem tartalmaz partíciót, ezt a Nem lefoglalt szöveg jelzi.
16.6.2. Új partíció¶
Új partíció létrehozásához kattints a 0-s lemez nem lefoglalt 16.00 GByte-os területébe az egér jobb gombjával! A megjelenő helyi menüben válaszd ki az Új egyszerű kötet pontot!
Egy varázsló indul el (az interakciót nem igénylő lépések bemutatását kihagyom). Az első lépésben add meg az új kötet méretét! (A példákban csak kisméretű köteteket fogok létrehozni, a gyakorlatban ezek nem igazán lennének értelmes méretek.) Készítsünk egy 1 GByte-os kötetet!
Mi történjen az új kötettel a létrehozása után? Három lehetőséged van:
A hagyományos felhasználás során az új kötetet egy betűjellel azonosítja a rendszer, itt kiválaszthatod, hogy ez melyik legyen.
A második lehetőség a Unixoknál már megszokott mountolás. Igen, a Windows is ismeri ezt, kiválaszthatsz egy (célszerűen) üres mappát, és abba csatolhatod ezt a kötetet úgy, ahogyan azt a Unixok teszik.
Érintetlenül is hagyhatod a kötetet, ebben az esetben nem sok mindenre tudod majd használni.
Végül a fájlrendszer kialakítása következik. Kiválaszthatod a fájlrendszer típusát, ez merevlemezek esetében valószínűleg NTFS a célszerű választás, kisebb diszkek köteteinél esetleg FAT, vagy FAT32. A kötetcímke a partíció nevét jelenti, ezt látod majd viszont pl. a Sajátgépben. A gyorsformázás esetén csak a szükséges táblázatokat, leírókat készíti el a program, nem formázza „végig” a teljes partíciót. A tömörítés engedélyezésével bekapcsolod az ún. röptömörítést, ekkor az operációs rendszer a fájlok és mappák tárolása előtt tömöríti azokat, így azok kevesebb helyet foglalnak a diszken. Ez a gép teljesítményétől függően diszk műveletek esetén sebességcsökkenést, gyors gép esetén viszont növekedést hozhat.
A beállítások áttekintése után a kötet kialakítása és a fájlrendszer kialakítása, a formázás kezdetét veszi.
Az új kötet elkészült, a Lemezkezelőben, a 0. diszken látható is a Data
nevű új kötet. (Egyúttal a Sajátgépben is megjelenik.)
16.6.3. Kötet kiterjesztése¶
Egy kötet mérete a mai Windows rendszereken könnyen megváltoztatható. A növelés az egyszerűbb, kezjdük ezzel! Ha egy kötet alulméreteztél, és még van hely a lemezen, kattints jobb gombbal rajta, a helyi menüben válaszd a Kötet kiterjesztése pontot.
Most még csak egy lemezt, a Lemez 0-t használhatod (később, ha dinamikus köteteket használsz, már a többi lemez is igénybe vehető lesz.) Add meg a növekményt az alsó beviteli mezőben, az itt megadott mérettel lesz nagyobb a kötet. A tovább gomb megnyomásával elindul az átméretezés.
A Lemekezelőben mát az új méret, példánkban 3 GByte jelenik meg.
16.6.4. Kötet zsugorítása¶
Egyáltalán nem jellemző, hogy a kötetek méretét csökkenteni is lehetne, de a Windows kötetkezelője erre is képes. Ehhez kattints jobb gombbal a kiszemelt partícióra, majd válaszd a Kötet zsugorítása pontot.
Add meg a kötet új méretét! A folyamat hosszabb időt is igénybe vehet, mert a méret csökkentése előtt az operációs rendszernek át kell helyeznie a fájlok blokkjait úgy, hogy azok a csökkentett méretű köteten belül legyenek.
A zsugorítási folyamat végén az új kötet mérete a megadottra csökken.
16.6.5. Dinamikus kötetek¶
Ahhoz, hogy a Windows kötetkezelési szolgáltatásait teljes egészében kihasználhasd, az egyes diszkeket dinamikus lemezzé kell konvertálni. Ehhez a diszk információs blokkjában jobb gombbal kell kattintanod, majd a menüben a Konvertálás dinamikus lemezzé pontot kell választanod. A konvertálást minden diszkre el kellene végezni, de a Windows megkönnyíti a dolgodat: egy újabb párbeszédablakban lehetővé teszi, hogy minden lemezt kiválassz, így egy lépésben végezd el a konverziókat. A konverziót egy újabb ablakban jóvá is kell hagynod. Fontos, hogy a dinamikus diszkek adminisztrációja a rendszer szempontjából bonyolultabb, egy esetleges diszk hiba, összeomlás esetén az adatok helyreállítása lényegesen bonyolultabb feladatot jelent, mint az alaplemezek esetén.
Veszélyforrás!
A konvertálást nem szabad elvégezned, ha valamelyik lemez más, bootolható operációs rendszert is tartalmaz. Ez a rendszer a konverzió után már nem tud elindulni, amit az alábbi párbeszédablak is jelez.
A konverzió lefutása után az egyes kötetek színe megváltozik, és a diszkek típusa alaplemezről dinamikus lesz.
16.6.5.1. RAID 0¶
A RAID 0 a Windows terminológiájában a csíkozott kötet nevet kapta. Egy ilyen létrehozásához két diszkre van szükség, melyen a kötet két „lába” létrehozható. Első lépésként egy szabad diszk területen kattints az egér jobb gombjával, és válaszd az Új csíkozott kötet menüpontot!
A kötet létrehozásához meg kell adnod, melyik legyen a másik lemez, ami a kötet másik lábát adja. Példánkban ez a 2-es lemez lesz. Meg kell adni a kötet méretét is, amit 1024 MByte-ra állítok be. A teljes kötet mérete így 2048 MByte lesz.
Ezt a panelt már ismered, a kötet elérésének módját állíthatod itt be. Az új kötetet F: néven szeretném majd elérni.
A fájlrendszer legyen NTFS, címkeként a Stripe
nevet adom meg (a RAID 0 angol neve Stripe Set.)
A formázást követően a kötet létrejön, az ezt alkotó két láb látható az 1-es és a 2-es lemezen is.
16.6.5.2. RAID 1¶
A RAID 1-es tömb létrehozása analóg módon történik. Első lépésként a szabad terület helyi menüjében válaszd a Új tükrözött kötet pontot!
A következő lépésben most is meg kell adnod, hogy melyik diszken legyen a tükör másik fele, és itt is meg kell határoznod a méretet. A tükrözés természetéből adódóan az 1024 MByte most egy 1 GByte-os kötet létrehozását jelenti.
Az új kötet legyen a G: meghajtó!
A fájlrendszer kialakítását a szokásos módon végezzük. A kötet neve legyen Mirror
!
A RAID1-es tömböt a Windows szinkronizálja, majd F: meghajtó néven használható is.
16.6.5.3. RAID 5¶
A Windows kötetkezelője csak a Windows szerver változatai esetében teszi lehetővé a RAID 5-ös tömb létrehozását.
16.6.5.4. Átnyúló kötet¶
Az átnyúló kötet – ahogyan a nevéből következik is – olyan kötetet jelent, amely diszkeken nyúlik át. Jelentősége a kisebb szabad helyek kihasználásában, illetve a nagyméretű diszkek egy meghajtóként történő felhasználásakor van. Fontos, hogy az átnyúló kötet nem redundáns, így bármelyik, a kötet részeként működő diszk üzemképtelenné válása a teljes kötet elvesztését jelenti. Új átnyúló kötethez válaszd a Új átnyúló kötet pontot a kiinduló diszk helyi menüjében!
Válaszd ki, hogy mely diszkek vegyenek részt a kötet kialakításában, és add meg a kötet méretét is! (A példa sikeréért olyan méretet adj meg, hogy az átnyúlásra mindenképp szükség legyen!)
A kötetre H: meghajtóként akarunk majd hivatkozni, a kötet címkéje legyen Átnyúló!
Végezd el a formázást!
Az új kötet a 0-s és az 1-es lemezen is használ fel helyet.
16.6.6. Sérült kötetek helyreállítása¶
Nézzük meg, milyen meghajtókat tartalmaz most a rendszerünk! Az egyes kötetek nevei mutatják azok működési elvét.
Most nézzük meg, mi történik, és hogyan kell eljárni abban az esetben, ha a rendszert alkotó diszkek valamelyike elvész. A (majdnem) legnyagyobb bonyodalom érdekében állítsd le a virtuális gépet, távolítsd el a 2-es lemezt, és adj hozzá egy újat! (Ne felejtsd el a SATA1 vezérlőhöz kapcsolni az új diszket!) Ezzel azt a helyzetet állítjuk elő, amikor ez egyik diszk meghibásodik (ezt vettük ki) és a pótlására egy újat adtunk a rendszerhez.
- A gép elindítását követően a meghajtók száma megcsappant:
A C: és az E: meghajtók megvannak, ezek csak az első diszket használták, és az sértetlen.
Az F: meghajtó (Stripe) eltűnt, a korábban tanultak alapján ennek adataitól búcsút is vehetünk.
Ugyanez a helyzet az átnyúló kötet esetében is: a H: meghajtónak is nyoma veszett.
A G: meghajtó megvan, a tükör egyik fele még működőképes.
Kezdjük meg a rendrakást! Első lépésként a tükrözött kötetnek adjunk egy újabb lábat! Először távolítsuk el a hiányzó felet a tükrözött kötet helyi menüjében, a Tükör eltávolítása pont kiválasztásával!
A hiányzó felet kell kiválasztani.
Ahhoz, hogy a tükör másik lábát létrehozhassuk, először csatlakoztatni kell az új diszket az ábrán látható módon:
A lemezt inicializálni kell.
GPT-t használj!
Majd konvertáld dinamikus lemezzé!
A tükrözött kötet működő felének helyi menüjében válaszd ki a Tükör hozzáadása menüt!
Az új láb a 2-es lemezen jöjjön létre! (Az 1-es lemez is használható lett volna, ha a hibás kötetek „maradékát” előbb töröljük. Mivel azon most nincs szabad hely, ezért az nem válaszható ki.)
A 2-es lemezen létrejön a tükör másik fele, megtörténi a kötet alkotóelemeinek szinkronizálása is.
Megjegyzés
Ezzel a módszerrel „békeidőben” bármelyik egyszerű kötetet utólag is tükrözött kötetté alakíthatod és viszont: a Tükör hozzáadása és a Tükör eltávolítása menükkel ez könnyen elvégezhető.
16.7. Ellenőrző kérdések¶
Mi a partíció és mi a szerepe?
Milyen partícionálási sémákat ismersz, és mi jellemzi ezeket?
Mutasd be a cfdisk használatát!
Mik a fájlrendszerek? Sorolj fel néhányat és jellemezd őket!
Hogyan alakíthatók ki fájlrendszerek Unix rendszereken?
Hogyan végezhető el a fájlrendszerek csatolása és leválasztása?
Hogyan vehető használatba egy iso image?
Mi a
/etc/fstab
file szerepe?Milyen használati esetei vannak a dd parancsnak?
Mi a RAID? Milyen típusai vannak?
Ismertesd a RAID0 felépítését, biztonságát, sebességét és egyéb jellemzőit!
Ismertesd a RAID1 felépítését, biztonságát, sebességét és egyéb jellemzőit!
Ismertesd a RAID5 felépítését, biztonságát, sebességét és egyéb jellemzőit!
Hogyan működik a RAID5 ECC számítása? Adj egy példát erre!
Milyen hibrid RAID megoldások léteznek?
Milyen hardver elemek vannak a redundáns diszkek kezelésére?
Hogyan kezelhetők a RIAD tömbök a gyakorlatban?
Hogyan telepíthető Linux szoftveres RAID tömbre?
Hogyan ellenőrizhető egy RAID tömb állapota és hogyan végezhető el a javítása a Linux szoftveres RAID megoldásában?
Hogyan használható a Windows kötetkezelése?
16.8. Feladatok¶
Linux
Számold ki, hogy egy 1 TByte-os merevlemez vásárlásakor valójában mennyivel kisebb diszket kapsz, ha feltételezed, hogy 1 Tebi-s lemezt vettél, pedig csak 1 TByte-osat.
A virtuális gépedhez adj hozzá egy újabb 1 GByte-os diszket! Indítsd el a rendszert és hozz létre rajta egy 500 GByte-os elsődleges, és egy 500 GByte-os logikai meghajtót!
Formázd mindkét partíciót ext4-es fájlrendszerre!
Az első partíciót csatold a
/home/oktatok
mappába!Gondoskodj arról, hogy ez a mountolás a rendszer indulásakor automatikusan megtörténjen!
Végezz telepítést az alábbiak szerint:
Használj GPT-t! Ne feleddkezz meg a biosboot partícióról!
Telepítsd a rendszert egy tükrözött diszkekből álló tömbre, ahol álljon rendelkezésre még egy tartalék diszk is!
Windows
Telepíts egy virtuális Windows 10-et! Ennek a gépnek egy 10 GByte-os és két 1 GByte-os merevlemezt biztosíts, az első diszket partícionáld kétfelé és csak az elsőre telepítsd az operációs rendszert!
Indítsd el a Windows-t és jelentkezz be! A lemezkezelőben végezd el a következő feladatokat:
Inicializáld az első adatdiszket, alakíts ki rajta egy 500 Mbyte méretű partíciót! Gyorsformázd, a kötet neve legyen Fileserver!
Hozz létre egy újabb kötetet, ennek mérete 100 Mbyte legyen, a neve pedig DataBase!
Bővítsd a Fileserver kötetet 200 Mbyte-tal! Figyeld meg, hogyan jeleníti meg ezt a lemezkezelő!
Bővítsd ezt a kötetet a másik adatdiszk 500 Mbyte-os darabjával!
Törölj egy szeletet (ne az utolsót) a Fileserver kötetből! Figyeld meg mi történik!
Törölje az adatdiszkről minden partíciót! Alakíts ki egy átnyúló kötetet, mely mindkét adatdiszket felhesználja! Gyorsformázd NTFS-re, a neve legyen Spanned!
Másold bele a Windows könyvtárból az Explorer.exe fájlt!
Állítsd le a szervert, kapcsold ki a data2 meghajtót, majd indítsd el a szervert! Figyeld meg, mi történt a spanned meghajtóval!
Állítsd le a szervert, állítsd vissza a data2 meghajtót, majd indítsd újra! Elérhető újra az összefüggő meghajtó? Töröld az átnyúló kötetet!
Alakíts ki egy csíkozott kötetet, mely mindkét adatdiszket felhasználja! Gyorsformázd NTFS-re, a neve legyen Stripe!
Másold bele a Windows könyvtárból az Explorer.exe fájlt!
Állítsd le a szervert, kapcsold ki a data2 meghajtót, majd indítsd el a szervert! Figyeld meg, mi történt a Stripe meghajtóval!
Állítsd le a szervert, állítsd vissza a data2 meghajtót, majd indítsd újra! Elérhető újra a csíkozott kötet? Töröld a csíkozott kötetet!
Alakíts ki egy tükrözött kötetet, mely mindkét adatdiszket felhasználja! Gyorsformázd NTFS-re, a neve legyen Mirror!
Másold bele a Windows könyvtárból az Explorer.exe fájlt!
Állítsd le a szervert, a data2 meghajtót cseréld le a spare meghajtóra (amit a 2. feladatban hoztál létre), majd indítsd el a szervert! Figyeld meg, mi történt a Mirror meghajtóval!
Állítsd helyre a tömböt! (Első lépés: Remove mirror a hiányzó merevlemezre.)