Logikai kötetkezelés
(→Diskek) |
(→Meta devices) |
||
841. sor: | 841. sor: | ||
=== Meta devices === |
=== Meta devices === |
||
+ | A meta eszközök működése hasonló, mint a linux alatti szoftver raid-é, Solarisban ezt hívják volume managernek. Általában a meta keszdetű parancsok ezt tekergetik (elég sok van belőle). Körülbelül ugyanazokat a dolgokat lehet vele megvalósítani, mint a linux alatti md-vel. Legfontosabb külömbség, hogy a meta eszközökhöz tartozó adatbázis replikák adminisztrációja itt kézzel történik (a metadb-nek érdemes külön slice-ot csinálni). A meglévő replikákat a metadb paranccsal lehet megnézni: |
||
+ | <pre> |
||
+ | # metadb |
||
+ | metadb: mp3: there are no existing databases |
||
+ | </pre> |
||
+ | Hozzunk létre 3 disken metadb replikákat: |
||
+ | <pre> |
||
+ | # metadb -a -f c0t0d0s7 c1t2d0s7 c1t3d0s7 |
||
+ | # metadb |
||
+ | flags first blk block count |
||
+ | a u 16 8192 /dev/dsk/c0t0d0s7 |
||
+ | a u 16 8192 /dev/dsk/c1t2d0s7 |
||
+ | a u 16 8192 /dev/dsk/c1t3d0s7 |
||
+ | |||
+ | </pre> |
||
+ | Meg mégegyet, mert ilyet is lehet: |
||
+ | <pre> |
||
+ | # metadb -a c1t5d0s7 |
||
+ | # metadb |
||
+ | flags first blk block count |
||
+ | a u 16 8192 /dev/dsk/c0t0d0s7 |
||
+ | a u 16 8192 /dev/dsk/c1t2d0s7 |
||
+ | a u 16 8192 /dev/dsk/c1t3d0s7 |
||
+ | a u 16 8192 /dev/dsk/c1t5d0s7 |
||
+ | </pre> |
||
+ | |||
+ | Ha a metadb replikák legalább fele ugyanazt mondja a diskekről, akkor rendben van minden, automatikusan az ő tartalmuk fog érvényesülni. Ha nem, a meta eszközök nem fognak működni, ilyenkor kézzel kell megadni, hogy melyik replika lesz érvényes. |
||
+ | |||
+ | A linuxhoz hasonlóan, itt is egyszerűen megvalósíthatók a különböző szoftver RAID-ek. |
||
+ | RAID0: |
||
+ | <pre> |
||
+ | # metainit d1 1 2 c1t2d0s0 c1t3d0s0 |
||
+ | d1: Concat/Stripe is setup |
||
+ | |||
+ | # metastat |
||
+ | d1: Concat/Stripe |
||
+ | Size: 34807563 blocks (16 GB) |
||
+ | Stripe 0: (interlace: 32 blocks) |
||
+ | Device Start Block Dbase Reloc |
||
+ | c1t2d0s0 0 No Yes |
||
+ | c1t3d0s0 3591 No Yes |
||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 |
||
+ | c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT |
||
+ | </pre> |
||
+ | Utána létre lehet rajta hozni UFS fájlrendszert: |
||
+ | <pre> |
||
+ | # newfs /dev/md/rdsk/d1 |
||
+ | newfs: construct a new file system /dev/md/rdsk/d1: (y/n)? y |
||
+ | Warning: 4342 sector(s) in last cylinder unallocated |
||
+ | /dev/md/rdsk/d1: 34807562 sectors in 5666 cylinders of 48 tracks, 128 sectors |
||
+ | 16995.9MB in 355 cyl groups (16 c/g, 48.00MB/g, 5824 i/g) |
||
+ | super-block backups (for fsck -F ufs -o b=#) at: |
||
+ | 32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920, |
||
+ | Initializing cylinder groups: |
||
+ | ...... |
||
+ | super-block backups for last 10 cylinder groups at: |
||
+ | 33918112, 34016544, 34114976, 34213408, 34311840, 34410272, 34508704, |
||
+ | 34607136, 34705568, 34804000 |
||
+ | </pre> |
||
+ | Fel is lehet mountolni, sőt, umountolni is: |
||
+ | <pre> |
||
+ | # mount /dev/md/dsk/d1 /mnt |
||
+ | # df -h|grep d1 |
||
+ | /dev/md/dsk/d1 16G 17M 16G 1% /mnt |
||
+ | |||
+ | # umount /dev/md/dsk/d1 |
||
+ | </pre> |
||
+ | |||
+ | Törölni is egyszerű: |
||
+ | <pre> |
||
+ | # metaclear d1 |
||
+ | d1: Concat/Stripe is cleared |
||
+ | </pre> |
||
+ | A RAID1 esetében mindez már kicsit komplikáltabb. RAID1 tömböt úgy lehet létrehozni, hogy létrehozunk 2 db RAID0-t (sima mirror esetén ezek 1 diskesek), majd megadjuk, hogy azok egymás tükrei legyenek. Első látásra ez valamilyen szinten komplikáltnak tűnik, a RAID10 tömb egyszerű létrehozhatósága miatt van így megoldva. Másik előnye, hogy a módszerrel egy éles rendszer root fájlrendszere is tükrözhető, anélkül, hogy az élesen kívül más operációs rendszert használnánk ehhez (nem kell single user módba bootolni, és livecd szerűségre sincs szükség). A root fájlrendszer tükrözéséhez a metaroot segédprogram használandó, ez még a vfstab-ot is módosítja megfelelően. |
||
+ | Ezek után egy RAID1 tömb létrehozási procedúrája: |
||
+ | <pre> |
||
+ | -bash-3.00# metainit d11 1 1 c1t2d0s0 |
||
+ | d11: Concat/Stripe is setup |
||
+ | |||
+ | -bash-3.00# metainit d12 1 1 c1t3d0s0 |
||
+ | d12: Concat/Stripe is setup |
||
+ | |||
+ | -bash-3.00# metainit d10 -m d11 |
||
+ | d10: Mirror is setup |
||
+ | |||
+ | -bash-3.00# metattach d10 d12 |
||
+ | d10: submirror d12 is attached |
||
+ | |||
+ | -bash-3.00# metastat |
||
+ | d10: Mirror |
||
+ | Submirror 0: d11 |
||
+ | State: Okay |
||
+ | Submirror 1: d12 |
||
+ | State: Resyncing |
||
+ | Resync in progress: 0 % done |
||
+ | Pass: 1 |
||
+ | Read option: roundrobin (default) |
||
+ | Write option: parallel (default) |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | |||
+ | d11: Submirror of d10 |
||
+ | State: Okay |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | Stripe 0: |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t2d0s0 0 No Okay Yes |
||
+ | |||
+ | |||
+ | d12: Submirror of d10 |
||
+ | State: Resyncing |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | Stripe 0: |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t3d0s0 0 No Okay Yes |
||
+ | |||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT |
||
+ | c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 |
||
+ | </pre> |
||
+ | |||
+ | Ha már a redundanciáról esik szó, van lehetőség hot spare-ek használatára: |
||
+ | <pre> |
||
+ | -bash-3.00# metahs -a hsp001 c1t5d0s0 |
||
+ | hsp001: Hotspare is added |
||
+ | -bash-3.00# metahs -i |
||
+ | hsp001: 1 hot spare |
||
+ | Device Status Length Reloc |
||
+ | c1t5d0s0 Available 17409168 blocks Yes |
||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | c1t5d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJR34002000019460G0S |
||
+ | |||
+ | -bash-3.00# metastat |
||
+ | d10: Mirror |
||
+ | Submirror 0: d11 |
||
+ | State: Okay |
||
+ | Submirror 1: d12 |
||
+ | State: Resyncing |
||
+ | Resync in progress: 67 % done |
||
+ | Pass: 1 |
||
+ | Read option: roundrobin (default) |
||
+ | Write option: parallel (default) |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | |||
+ | d11: Submirror of d10 |
||
+ | State: Okay |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | Stripe 0: |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t2d0s0 0 No Okay Yes |
||
+ | |||
+ | |||
+ | d12: Submirror of d10 |
||
+ | State: Resyncing |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | Stripe 0: |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t3d0s0 0 No Okay Yes |
||
+ | |||
+ | |||
+ | hsp001: 1 hot spare |
||
+ | Device Status Length Reloc |
||
+ | c1t5d0s0 Available 17409168 blocks Yes |
||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT |
||
+ | c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 |
||
+ | c1t5d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJR34002000019460G0S |
||
+ | </pre> |
||
+ | Az így létrehozott hot spare-ek az összes tömbnek melegtartaléka lesz (amire értelmezhető, RAID0-nak nem). |
||
+ | Törölni is lehet: |
||
+ | <pre> |
||
+ | -bash-3.00# metahs -d hsp001 c1t5d0s0 |
||
+ | hsp001: Hotspare is deleted |
||
+ | -bash-3.00# metahs -i |
||
+ | hsp001: is empty |
||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | |||
+ | -bash-3.00# metahs -d hsp001 |
||
+ | hsp001: Hotspare pool is cleared |
||
+ | |||
+ | -bash-3.00# metahs -i |
||
+ | metahs: mp3: no hotspare pools found |
||
+ | |||
+ | -bash-3.00# metastat |
||
+ | d10: Mirror |
||
+ | Submirror 0: d11 |
||
+ | State: Okay |
||
+ | Submirror 1: d12 |
||
+ | State: Okay |
||
+ | Pass: 1 |
||
+ | Read option: roundrobin (default) |
||
+ | Write option: parallel (default) |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | |||
+ | d11: Submirror of d10 |
||
+ | State: Okay |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | Stripe 0: |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t2d0s0 0 No Okay Yes |
||
+ | |||
+ | |||
+ | d12: Submirror of d10 |
||
+ | State: Okay |
||
+ | Size: 17409168 blocks (8.3 GB) |
||
+ | Stripe 0: |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t3d0s0 0 No Okay Yes |
||
+ | |||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT |
||
+ | c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 |
||
+ | </pre> |
||
+ | A mirror lebontása a felépítéshez hasonlóan bonyolult: |
||
+ | <pre> |
||
+ | -bash-3.00# metadetach d10 d12 |
||
+ | d10: submirror d12 is detached |
||
+ | |||
+ | -bash-3.00# metaclear d10 |
||
+ | d10: Mirror is cleared |
||
+ | |||
+ | -bash-3.00# metaclear d12 |
||
+ | |||
+ | d12: Concat/Stripe is cleared |
||
+ | |||
+ | -bash-3.00# metaclear d11 |
||
+ | d11: Concat/Stripe is cleared |
||
+ | </pre> |
||
+ | Mirror esetében ha a metadevice megszűnik, akkor az annak megfelelő slice-okat mount-olva lehet rajtuk látni az UFS-t és használni őket. Elegánsabb megoldás, ha egyből cseréljük a disket, majd a metareplace paranccsal helyreállítjuk a mirrort (RAID5 esetén csak ez működik). Igen, RAID5-őt is lehet csinálni: |
||
+ | <pre> |
||
+ | -bash-3.00# metainit d1 -r c1t2d0s0 c1t3d0s0 c1t5d0s0 |
||
+ | d1: RAID is setup |
||
+ | -bash-3.00# metastat |
||
+ | d1: RAID |
||
+ | State: Initializing |
||
+ | Initialization in progress: 0.7% done |
||
+ | Interlace: 32 blocks |
||
+ | Size: 34807563 blocks (16 GB) |
||
+ | Original device: |
||
+ | Size: 34810432 blocks (16 GB) |
||
+ | Device Start Block Dbase State Reloc Hot Spare |
||
+ | c1t2d0s0 3921 No Initializing Yes |
||
+ | c1t3d0s0 3921 No Initializing Yes |
||
+ | c1t5d0s0 3921 No Initializing Yes |
||
+ | |||
+ | Device Relocation Information: |
||
+ | Device Reloc Device ID |
||
+ | c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 |
||
+ | c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT |
||
+ | c1t5d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJR34002000019460G0S |
||
+ | </pre> |
||
+ | Valamiért ezt hívják RAID-nak a Solaris volume managerben. Ennél persze jóval többet tud, ajánlom a meta kezdetű parancsok manualjait, valamint a docs.sun.com-on lévő Solaris Admin Guide-okat a továbblépéshez. |
||
+ | |||
=== ZFS === |
=== ZFS === |
||
A lap 2006. szeptember 28., 21:19-kori változata
A logikai kötetkezelés egy új logikai absztrakciós réteget biztosít a gépben található háttértárolók és a fájlrendszerek között. Ez egyebek mellett lehetővé teszi, hogy a fizikai tárolóeszközöket logikai egységekbe szervezzük, és rugalmasan átméretezhető logikai köteteket hozzunk létre. Ha később új diszk kerül a gépbe, azt is hozzáadhatjuk egy kötetcsoporthoz, és teljesen transzparens módon átlóghatnak rá a filerendszereink, anélkül, hogy külön foglalkoznunk kellene azzal, hogy melyik fizikai diszkre is kerüljenek.
Tartalomjegyzék |
1 Linux LVM
(Itt most csak a 2.6-os kernelben levő LVM2-vel foglalkozunk. A 2.4-es szériában található LVM1 nagyjából ugyanezt tudta, csak volt néhány korlátozása.)
A Linux LVM (Logical Volume Management) a következő fogalmakkal dolgozik:
1.1 Physical extent
Allokációs egység. Ekkora egységenként oszthatjuk szét a volume groupban levő helyet a logical volume-ok között (l. később).
Ha akarjuk, hívhatjuk magyarul fizikai mértéknek, de ez elég sután hangzik.
1.2 Physical volume
A physical volume olyan fizikai háttértároló, amin létrehoztuk az LVM metaadat-struktúráját a pvcreate paranccsal. Pl:
# pvcreate /dev/hda Physical volume "/dev/hda" successfully created # pvcreate /dev/loop0 Physical volume "/dev/loop0" successfully created # pvcreate /dev/sda3 Physical volume "/dev/sda3" successfully created
Fontosab opciók:
- --uuid: minden physical volume-nak van egy egyedi azonosítója. Ha egy diszket kicserélünk, és az új diszket be akarjuk tenni a régi helyére az LVM-be, akkor a --uuid kapcsolóval be kell állítanunk rajta a régi diszk azonosítóját.
Dokumentáció:
- man pvcreate: pvcreate(8)
- man lvm: lvm(8)
Ha akarjuk, a physical volume-ot hívhatjuk magyarul fizikai kötetnek.
1.2.1 Physical volume-ok kezelése
A pvdisplay paranccsal nézhetjük meg, milyen physical volume-jaink vannak:
# pvdisplay --- Physical volume --- PV Name /dev/md2 VG Name raid5 PV Size 697.91 GB / not usable 0 Allocatable yes PE Size (KByte) 32768 Total PE 22333 Free PE 4094 Allocated PE 18239 PV UUID elN9K7-dvxq-b0fd-daqR-693p-fHqD-SwbDpD --- NEW Physical volume --- PV Name /dev/loop0 VG Name PV Size 31.81 MB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID hlzs9k-H253-ERpK-R39N-8ICT-4bU6-D0xtc1
Láthatjuk, hogy az első megtalált physical volume a /dev/md2-n, egy RAID tömbön van, és a raid5 nevű volume group része (l. később). A második volume a /dev/loop0 loopback device-on (tehát valójában egy ehhez a device-hoz tartozó image file-ban) van, és még nem rendeltük hozzá volume grouphoz, ezért nem is használható a benne levő hely (Allocatable: no). A közölt adatok:
- PV Name - annak a unix device-nak a neve, amin a physical volume található.
- VG Name - annak a volume groupnak a neve, amelyhez a physical volume tartozik.
- PV Size - a PV mérete (mit jelent és milyen esetben jelenik meg a "not usable X"?)
- Allocatable - Felhasználható-e a PV-n levő hely (van valakinek kedve precízebb megfogalmazást keresni erre?)
- PE Size - a physical extentek mérete abban a volume groupban, amelyhez a PV tartozik.
- Total, Free, Allocated PE - összes physical extent száma, ebből hány szabad, hány foglalt.
- PV UUID - egyedi azonosító.
Majdnem ugyanezt tudja a pvs parancs is:
# pvs PV VG Fmt Attr PSize PFree /dev/loop0 lvm2 -- 31.81M 31.81M /dev/md2 raid5 lvm2 a- 697.91G 127.94G
A pvs esetén testreszabhatóbb a kimenet formája. Részletesebben l. a dokumentációban.
A pvscan outputja is nagyon hasonló:
PV /dev/md2 VG raid5 lvm2 [697.91 GB / 127.94 GB free] PV /dev/loop0 lvm2 [31.81 MB] Total: 2 [697.94 GB] / in use: 1 [697.91 GB] / in no VG: 1 [31.81 MB]
A különbség az, hogy a pvscan újra végignézi az összes block device-t, a pvs és a pvdisplay pedig a kernel adatstruktúráiból szedi az információt.
A pvmove segítségével az egyik phyiscal volume-ban levő physical extenteket átmozgathatjuk a volume group egy másik physical volume-jára. Ennek akkor van értelme, ha pl. ki akarjuk venni az adott fizikai diszket a gépből, vagy a volume groupból. A pvmove online művelet, vagyis menet közben is használhatjuk, írhatjuk és olvashatjuk az érintett volume-ot.
A pvremove segítségével eltávolíthatjuk az LVM-címkét egy PV-ről, így az LVM a továbbiakban nem vesz róla tudomást.
1.3 Volume group
A volume group lényegében egy logical volume-okkal "partícionálható" absztrakt merevlemez; physical volume-ok egy csoportja. Közvetlenül nem lehet rá adatokat írni, de a benne levő helyet tetszés szerint szétoszthatjuk logical volume-ok között.
Létrehozása a vgcreate paranccsal történik.
# vgcreate proba /dev/loop0 Volume group "proba" successfully created # pvdisplay [...] --- Physical volume --- PV Name /dev/loop0 VG Name proba PV Size 28.00 MB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 7 Free PE 7 Allocated PE 0 PV UUID hlzs9k-H253-ERpK-R39N-8ICT-4bU6-D0xtc1
Egynél több PV-t is felsorolhatunk a parancssorban; ezek mind bekerülnek az új volume groupba (hívhatjuk kötetcsoportnak).
Fontosabb opciók:
- -s, --physicalextentsize PhysicalExtentSize[kKmMgGtT]: a physical extentek méretét adja meg.
Ilyen granularitással oszthatjuk szét a helyet a logical volume-ok között. A filerendszer I/O teljesítményére elvileg nincs hatással, csak az LVM segédprogramjai lesznek lassúbbak, ha túl sok van (mert túl kicsik). A meta-adatok mennyisége is nagyobb lehet, ha több PE van. Manapság kevés olyan felhasználást lehet elképzelni, ahol szükség lehet 16MB-nál kisebb granularitásra.
Dokumentáció:
- man vgcreate: vgcreate(8)
- man lvm: lvm(8)
1.3.1 Volume groupok kezelése
Listázás: vgdisplay
# vgdisplay --- Volume group --- VG Name raid5 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 21 VG Access read/write VG Status resizable MAX LV 32 Cur LV 5 Open LV 5 Max PV 16 Cur PV 1 Act PV 1 VG Size 697.91 GB PE Size 32.00 MB Total PE 22333 Alloc PE / Size 18239 / 569.97 GB Free PE / Size 4094 / 127.94 GB VG UUID I4pM7R-wmD9-m3VP-0OI1-ahbb-hdKy-QIQXnL --- Volume group --- VG Name proba System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 28.00 MB PE Size 4.00 MB Total PE 7 Alloc PE / Size 0 / 0 Free PE / Size 7 / 28.00 MB VG UUID U2pJ4S-J3fj-ebb0-ojYt-Vn7c-VAHU-w7WIlS
A vgdisplaynek van egy -v kapcsolója, aminek a hatására a logical volume-okat is listázza.
A pv*-gal analóg módon van vgs és vgscan is.
A vgchange-dzsel lehet "aktiválni" és "deaktiválni" a kötetcsoportokat (ha nem aktiváljuk, nem tudjuk mountolni a benne levő LV-ket).
# vgchange -a y 5 logical volume(s) in volume group "raid5" now active 0 logical volume(s) in volume group "proba" now active
A vgcfgbackup/vgcfgrestore segítségével készíthetünk ill. állíthatunk vissza biztonsági mentést az LVM-konfigurációnkról. A felhasználói adatokat természetesen nem menti el, de arra az esetre, ha megsérülnének az LVM saját adatterületei, vagy véletlenül megszüntetnénk egy fontos LV-t, jól jön.
A vgck ellenőrzi a meta-adatok konzisztenciáját.
Ha egy kötetcsoportot át akarunk vinni egy másik számítógépbe, akkor először exportálnunk kell a vgexport segítségével:
# vgexport proba Volume group "proba" successfully exported # vgdisplay proba WARNING: volume group "proba" is exported --- Volume group --- VG Name proba System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status exported/resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 28.00 MB PE Size 4.00 MB Total PE 7 Alloc PE / Size 0 / 0 Free PE / Size 7 / 28.00 MB VG UUID U2pJ4S-J3fj-ebb0-ojYt-Vn7c-VAHU-w7WIlS
Az exportált kötetcsoport nem aktiválható, amíg nem importáljuk:
# vgchange -a y proba Volume group "proba" is exported # vgimport proba Volume group "proba" successfully imported # vgchange -a y proba 0 logical volume(s) in volume group "proba" now active
Növelés: vgextend. A vgextend segítségével a kötetcsoporthoz új PV-ot adhatunk hozzá.
Összehúzás: vgreduce. A vgreduce segítségével a kötetcsoportból eltávolíthatunk egy üres PV-t (tehát olyat, amin egyetlen PE-t - physical extentet - sem foglal egyetlen LV - logical volume - sem).
Összevonás: vgmerge. A vgmerge segítségével egy inaktív VG-ot beolvaszthatunk egy másik létező VG-ba, ha a PE-méretek megegyeznek. A cél-VG-ban ezután benne lesznek mindkét kiinduló-VG LV-jai.
Szétválasztás: vgsplit. A kiinduló kötetcsoport fizikai kötetei közül néhányból új kötetcsoportot hozunk létre. A logikai kötetek nem lóghatnak át egyik kötetcsoportból a másikba (erről előtte szükség esetén pvmove-val gondoskodni kell).
A vgmknodes boot közben fut le, létrehozza a /dev alatt a volume groupjainkhoz tartozó bejegyzéseket.
Törlés: vgremove. Teljesen megszünteti a kötetcsoportot és újra felszabadítja a PV-jait.
Átnevezés: vgrename.
Növeljük meg a proba kötetcsoportot; adjunk hozzá egy újabb 32MB-os loop device-t.
# dd if=/dev/zero of=loop1 bs=1048576 count=32 32+0 records in 32+0 records out 33554432 bytes (34 MB) copied, 0.146919 seconds, 228 MB/s # losetup /dev/loop1 loop1 # pvcreate /dev/loop1 Physical volume "/dev/loop1" successfully created # vgextend proba /dev/loop1 Volume group "proba" successfully extended
1.4 Logical volume
A logical volume (legyen logikai kötet) úgy viselkedik, mint egy merevlemezpartíció, azzal a különbséggel, hogy:
- szabadon, on-line átméretezhető (a rajta/benne található filerendszert ettől persze külön át kell méretezni);
- on-line átmozgatható másik diszkre;
- készíthető róla snapshot.
Létrehozása: lvcreate:
# lvcreate -L 8M -n proba_lv_1 proba Logical volume "proba_lv_1" created
Fontosabb opciók:
- -L - méret byte-ban, megabyteban, gigabyteban stb.
- -l - méret PE-ben
- -n - a létrehozandó LV neve
- -i - csíkszám (hány különböző PV-n szórja szét - kvázi RAID0)
- --mirrors - tükrök száma (hány különböző PV-n tárolja ugyanazt - kvázi RAID1, de naplózva, úgyhogy nem kell minden crash után resyncelni)
- --type - típus: striped, zero, error, snapshot, mirror
- Ebből közvetlenül csak a zerot és az errort lehet értelme megadni (ellenvélemény?)
- zero: nullákkal teli (írhatatlan) virtuális volume
- error: hibákkal teli (olvashatatlan és írhatatlan) virtuális volume
- Ezeket átméretezéskor is megadhatjuk, tehát bővíthetjük ilyen típusú PE-kkel a LV-ot.
- Házi feladat: mire jó ez?
A csíkozás és a tükrözés jelenleg nem használható egyszerre, de ez nem probléma, mert a hagyományos linuxos softraiddel mindezt meg tudjuk csinálni.
1.4.1 Logical volume-ok kezelése
Hozzunk létre egy tükrözött és egy csíkozott LV-t. Ehhez csináltam egy proba2 kötetcsoportot, ami három PV-ből áll; az egyikben lesz az első tükör, a másikban a második, a harmadikban pedig a napló (az LVM lognak hívja, nem journalnak).
# lvcreate --mirrors 1 -l 2 -n proba_lv_1 proba2 Logical volume "proba_lv_1" created # vgdisplay proba2 --- Volume group --- VG Name proba2 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 4 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 180.00 MB PE Size 4.00 MB Total PE 45 Alloc PE / Size 5 / 20.00 MB Free PE / Size 40 / 160.00 MB VG UUID K03ymb-kgin-AHf4-vPBZ-6I5E-xKTs-LbLjRu # lvdisplay /dev/proba2/proba_lv_1 --- Logical volume --- LV Name /dev/proba2/proba_lv_1 VG Name proba2 LV UUID rF1Wa4-23kr-9G0o-GH0D-O8QG-M7oF-pPPRcI LV Write Access read/write LV Status available # open 0 LV Size 8.00 MB Current LE 2 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:8 # lvcreate -l 6 -i 3 -n proba_lv_2 proba2 Using default stripesize 64.00 KB Logical volume "proba_lv_2" created # vgdisplay proba2 --- Volume group --- VG Name proba2 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 8 VG Access read/write VG Status resizable MAX LV 0 Cur LV 5 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 180.00 MB PE Size 4.00 MB Total PE 45 Alloc PE / Size 11 / 44.00 MB Free PE / Size 34 / 136.00 MB VG UUID K03ymb-kgin-AHf4-vPBZ-6I5E-xKTs-LbLjRu # lvdisplay /dev/proba2/proba_lv_2 --- Logical volume --- LV Name /dev/proba2/proba_lv_2 VG Name proba2 LV UUID q8OujL-uysn-75KG-2A6l-p15a-ewQ4-mgP8d8 LV Write Access read/write LV Status available # open 0 LV Size 24.00 MB Current LE 6 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:9 # lvs LV VG Attr LSize Origin Snap% Move Log Copy% proba_lv_1 proba2 mwi-a- 8.00M proba_lv_1_mlog 100.00 proba_lv_2 proba2 -wi-a- 24.00M # lvscan ACTIVE '/dev/proba2/proba_lv_1' [8.00 MB] inherit ACTIVE '/dev/proba2/proba_lv_2' [24.00 MB] inherit
dmsetuppal látjuk a mirrorokat és a logot is:
# dmsetup info Name: proba2-proba_lv_1_mimage_1 State: ACTIVE Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 253, 7 Number of targets: 1 UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuaM82P6ppVyBjJsv32VdW4a8auXRZNnaj Name: proba2-proba_lv_1_mimage_0 State: ACTIVE Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 253, 6 Number of targets: 1 UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuS4NGUUe90L1UOyuPDqVGMVBgTnLCPRQl Name: proba2-proba_lv_1_mlog State: ACTIVE Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 253, 5 Number of targets: 1 UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuc8xYiqrk26zrQMaJb14k6Fxlcw9QmETz Name: proba2-proba_lv_1 State: ACTIVE Tables present: LIVE Open count: 0 Event number: 1 Major, minor: 253, 8 Number of targets: 1 UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRurF1Wa423kr9G0oGH0DO8QGM7oFpPPRcI Name: proba2-proba_lv_2 State: ACTIVE Tables present: LIVE Open count: 0 Event number: 0 Major, minor: 253, 9 Number of targets: 1 UUID: LVM-K03ymbkginAHf4vPBZ6I5ExKTsLbLjRuq8OujLuysn75KG2A6lp15aewQ4mgP8d8 # dmsetup status proba2-proba_lv_1_mimage_1: 0 16384 linear proba2-proba_lv_1_mimage_0: 0 16384 linear proba2-proba_lv_1_mlog: 0 8192 linear proba2-proba_lv_2: 0 49152 striped proba2-proba_lv_1: 0 16384 mirror 2 253:6 253:7 16/16
A dmsetup amúgy a kernelben levő device mapper alrendszerrel kommunikál, és információnyerésen kívül más érdekes dolgokra is használható. A felhasználási területek körüljárása egy lehetséges házi feladat. Lehet vele pl. titkosított block device-t csinálni.
Átméretezés: lvextend, lvreduce, lvresize. A -L/-l kapcsolókkal megadhatjuk az új méretet abszolút értékkel vagy az előzőhöz képest (pl. lvextend -L +1G /dev/raid5/var - egy gigabyte-tal megnöveljük a raid5 kötetcsoport var nevű logikai kötetét).
Törlés: lvremove.
Átnevezés: lvrename.
1.4.2 Snapshot Logical Volume
- Pillanatfelvétel egy LV aktuális állapotáról.
- Copy-on-write szemantika: ha az eredetit módosítjuk, akkor a snapshotban létrejön a korábbi tartalom másolata.
- Ha kevés az írás, viszonylag kis snapshot volume is elég lehet viszonylag nagy adatterülethez.
- A snapshot írható is (az LVM1-ben csak olvasható volt).
- Felhasználás pl.:
- Majdnem-online adatbázis-backup:
- "Egy pillanatra" leállítjuk az adatbázist.
- Csinálunk az LV-ről egy snapshotot (ez gyors művelet).
- Újra elindítjuk az adatbázist. A snapshoton az eredeti, konzisztens tartalom látszik.
- A kedvenc offline backup-eszközünkkel elmentjük a snapshot volume-on található adatbázispéldányt.
- Töröljük a snapshot volume-ot.
- Rendszer-rollback:
- Upgrade vagy egyéb veszélyes beavatkozás előtt az összes volume-ról csinálunk snapshotot.
- Ha vissza akarunk térni a korábbi állapothoz, mindent visszamásolunk a snapshotból.
- Akár bootlhatunk is úgy, hogy a snapshotokat mountoljuk a "valódi" LV-k helyett.
- Ehhez az kell, hogy a rootfs snapshotjában levő fstabban a snapshotok szerepeljenek a valódi LV-k helyett.
- Tehát a snapshot létrehozása után át kell írni az fstabot a snapshoton.
- Sandbox:
- Snapshotot csinálunk a rendszerről.
- Belechrootolunk.
- Kipróbáljuk, amit ki akartunk próbálni. Csak a snapshot módosul.
- Töröljük a snapshotot.
- Ha jól működött, amit kipróbáltunk, megcsináljuk a valódi rendszeren is; ha nem, nem.
- VM klónozás:
- Ha sok hasonló virtuális gépet akarunk futtatni, csinálunk egy master LV-ot, amiben összerakjuk a filerendszert.
- Ennek a snapshotjait kapják meg a virtuális gépek (pl. UML vagy xenU).
- Így sokkal kevesebb helyet foglalnak, mivel az adatok nagy része közös helyen lesz.
- Ez csak akkor jó, ha kevés a változás; ha sok, akkor idővel (legfeljebb) ugyanannyi helyet fognak foglalni a snapshotok, mintha eleve külön LV-ket hoztunk volna létre.
- Majdnem-online adatbázis-backup:
Létrehozása: lvcreate -s.
Próbáljuk ki:
# mke2fs /dev/proba2/proba_lv_2 [...] # mount /dev/proba2/proba_lv_2 /mnt/proba_lv_2 # cat <<EOF >/mnt/proba_lv_2/tesztfile heredoc> Boci boci tarka heredoc> Se fule se farka heredoc> Oda megyunk lakni heredoc> Ahol tejet kapni heredoc> EOF # cd /mnt/proba_lv_2 # ls -la total 15 drwxr-xr-x 3 root root 1024 Sep 26 02:02 . drwxr-xr-x 18 root root 1024 Sep 26 02:01 .. drwx------ 2 root root 12288 Sep 26 02:00 lost+found -rw-r--r-- 1 root root 67 Sep 26 02:02 tesztfile # cat tesztfile Boci boci tarka Se fule se farka Oda megyunk lakni Ahol tejet kapni # lvcreate -l 1 -s -n proba_lv_2_snap /dev/proba2/proba_lv_2 Logical volume "proba_lv_2_snap" created # lvs LV VG Attr LSize Origin Snap% Move Log Copy% proba_lv_1 proba2 mwi-a- 8.00M proba_lv_1_mlog 100.00 proba_lv_2 proba2 owi-ao 24.00M proba_lv_2_snap proba2 swi-a- 4.00M proba_lv_2 0.39 # dmsetup status proba2-proba_lv_2-real: 0 49152 striped proba2-proba_lv_2_snap-cow: 0 8192 linear proba2-proba_lv_2_snap: 0 49152 snapshot 32/8192 proba2-proba_lv_1_mimage_1: 0 16384 linear proba2-proba_lv_1_mimage_0: 0 16384 linear proba2-proba_lv_1_mlog: 0 8192 linear proba2-proba_lv_2: 0 49152 snapshot-origin proba2-proba_lv_1: 0 16384 mirror 2 253:6 253:7 16/16 # lvdisplay /dev/proba2/* --- Logical volume --- LV Name /dev/proba2/proba_lv_1 VG Name proba2 LV UUID rF1Wa4-23kr-9G0o-GH0D-O8QG-M7oF-pPPRcI LV Write Access read/write LV Status available # open 0 LV Size 8.00 MB Current LE 2 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:8 --- Logical volume --- LV Name /dev/proba2/proba_lv_2 VG Name proba2 LV UUID q8OujL-uysn-75KG-2A6l-p15a-ewQ4-mgP8d8 LV Write Access read/write LV snapshot status source of /dev/proba2/proba_lv_2_snap [active] LV Status available # open 1 LV Size 24.00 MB Current LE 6 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:9 --- Logical volume --- LV Name /dev/proba2/proba_lv_2_snap VG Name proba2 LV UUID Am9wZ6-YHy2-DkeM-UDY1-K8X6-nZ1d-HAeoYl LV Write Access read/write LV snapshot status active destination for /dev/proba2/proba_lv_2 LV Status available # open 0 LV Size 24.00 MB Current LE 6 COW-table size 4.00 MB COW-table LE 1 Allocated to snapshot 0.59% Snapshot chunk size 8.00 KB Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:12 # mount /dev/proba2/proba_lv_2_snap /mnt/proba_lv_2_snap /mnt# ls -la proba_lv_2* proba_lv_2: total 15 drwxr-xr-x 3 root root 1024 Sep 26 02:02 . drwxr-xr-x 19 root root 1024 Sep 26 02:07 .. drwx------ 2 root root 12288 Sep 26 02:00 lost+found -rw-r--r-- 1 root root 67 Sep 26 02:02 tesztfile proba_lv_2_snap: total 15 drwxr-xr-x 3 root root 1024 Sep 26 02:02 . drwxr-xr-x 19 root root 1024 Sep 26 02:07 .. drwx------ 2 root root 12288 Sep 26 02:00 lost+found -rw-r--r-- 1 root root 67 Sep 26 02:02 tesztfile # df -h Filesystem Size Used Avail Use% Mounted on [...] /dev/mapper/proba2-proba_lv_2 24M 14K 23M 1% /mnt/proba_lv_2 /dev/mapper/proba2-proba_lv_2_snap 24M 14K 23M 1% /mnt/proba_lv_2_snap # echo 'Ooooh, edes bociiii! Adj nekunk tejeeeeeeet!' >proba_lv_2/tesztfile # cat */tesztfile Ooooh, edes bociiii! Adj nekunk tejeeeeeeet! Boci boci tarka Se fule se farka Oda megyunk lakni Ahol tejet kapni # lvs LV VG Attr LSize Origin Snap% Move Log Copy% proba_lv_1 proba2 mwi-a- 8.00M proba_lv_1_mlog 100.00 proba_lv_2 proba2 owi-ao 24.00M proba_lv_2_snap proba2 swi-ao 4.00M proba_lv_2 0.59 # echo 'Ezt is lehet' >proba_lv_2_snap/tesztfile /mnt# cat */tesztfile Ooooh, edes bociiii! Adj nekunk tejeeeeeeet! Ezt is lehet # lvs LV VG Attr LSize Origin Snap% Move Log Copy% proba_lv_1 proba2 mwi-a- 8.00M proba_lv_1_mlog 100.00 proba_lv_2 proba2 owi-ao 24.00M proba_lv_2_snap proba2 swi-ao 4.00M proba_lv_2 0.98 # umount /mnt/proba_lv_2_snap # lvremove /dev/proba2/proba_lv_2_snap Do you really want to remove active logical volume "proba_lv_2_snap"? [y/n]: y Logical volume "proba_lv_2_snap" successfully removed # lvs LV VG Attr LSize Origin Snap% Move Log Copy% proba_lv_1 proba2 mwi-a- 8.00M proba_lv_1_mlog 100.00 proba_lv_2 proba2 -wi-a- 24.00M
xfs filerendszer esetén a snapshotot csak a nouuid opcióval tudjuk bemountolni; enélkül az xfs azt hiszi, hogy ugyanazt a fizikai filerendszert próbáljuk mountolni másodszor is.
1.5 EVMS
EVMS: Enterprise Volume Management System. Nem a népszerű scifisorozat hangerejének kezelésére szolgál.
LVM-ebb az LVM-nél. Részletek házi feladatként.
2 Solaris
A Solaris 10 update 2 (6/06), illetve az opensolaris előtt a Solarisban nem vált szét élesen a logikai kötetkezelés és a szoftver RAID. Az így létrehozott metadevice-okon ugyanúgy UFS-t lehet használni, mint alapesetben a diskeken. 2006 júniusában azonban az megjelent a ZFS a kereskedelmi solarisban, ami elég sok újítést hozott, és valamilyen szinten elavulttá tette az addigi logikai kötetkezelést. A metadevice-ok létrehozásának lehetősége a Solaris 9-től volt része a kereskedelmi Solarisnak (előző verziókhoz is elérhető volt patch formájában).
2.1 Diskek
SPARC architektúra esetén minden disk tartalmaz 8 slice-ot, ebbol 7-re lehet fájlrendszereket létrehozni, a 2-es számú pedig az egész disket jelöli (mint pl. linux alatt a /dev/hda). A diskek a format parancs segitsegevel tekinthetok meg. SPARC:
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c0t0d0 <ST39140A cyl 17660 alt 2 hd 16 sec 63> /pci@1f,0/pci@1,1/ide@3/dad@0,0 1. c1t2d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> /pci@1f,0/pci@1/scsi@1,1/sd@2,0 2. c1t3d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> /pci@1f,0/pci@1/scsi@1,1/sd@3,0 3. c1t5d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> /pci@1f,0/pci@1/scsi@1,1/sd@5,0 4. c1t8d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> /pci@1f,0/pci@1/scsi@1,1/sd@8,0 5. c1t9d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> /pci@1f,0/pci@1/scsi@1,1/sd@9,0 6. c1t10d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> /pci@1f,0/pci@1/scsi@1,1/sd@a,0
1 disk:
0 root wm 0 - 4847 8.30GB (4848/0/0) 17409168 1 unassigned wu 0 0 (0/0/0) 0 2 backup wu 0 - 4923 8.43GB (4924/0/0) 17682084 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 4848 - 4923 133.26MB (76/0/0) 272916
x86:
bash-3.00# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c0d0 <DEFAULT cyl 4092 alt 2 hd 128 sec 32> /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0 1. c0d1 <VMware V-0000000000000000-0001-8.00GB> /pci@0,0/pci-ide@7,1/ide@0/cmdk@1,0 2. c1d0 <DEFAULT cyl 4093 alt 2 hd 128 sec 32> /pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0 3. c1d1 <VMware V-0000000000000000-0001-8.00GB> /pci@0,0/pci-ide@7,1/ide@1/cmdk@1,0
1 disk:
Part Tag Flag Cylinders Size Blocks 0 root wm 3 - 3820 7.46GB (3818/0/0) 15638528 1 swap wu 3821 - 4076 512.00MB (256/0/0) 1048576 2 backup wm 0 - 4091 7.99GB (4092/0/0) 16760832 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 4077 - 4091 30.00MB (15/0/0) 61440 8 boot wu 0 - 0 2.00MB (1/0/0) 4096 9 alternates wu 1 - 2 4.00MB (2/0/0) 8192
Muveltek vegzese 1 disken formattal:
Specify disk (enter its number): 2 selecting c1t3d0 [disk formatted] FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format> format> verify Primary label contents: Volume name = < > ascii name = <SUN9.0G cyl 4924 alt 2 hd 27 sec 133> pcyl = 4926 ncyl = 4924 acyl = 2 nhead = 27 nsect = 133 Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 0 (0/0/0) 0 1 unassigned wu 0 0 (0/0/0) 0 2 backup wu 0 - 4923 8.43GB (4924/0/0) 17682084 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 format> partition PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk !<cmd> - execute <cmd>, then return quit partition> 0 Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 0 (0/0/0) 0 Enter partition id tag[unassigned]: root Enter partition permission flags[wm]: Enter new starting cyl[0]: Enter partition size[0b, 0c, 0e, 0.00mb, 0.00gb]: 8.3gb partition> print Current partition table (unnamed): Total disk cylinders available: 4924 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 4847 8.30GB (4848/0/0) 17409168 1 unassigned wu 0 0 (0/0/0) 0 2 backup wu 0 - 4923 8.43GB (4924/0/0) 17682084 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 partition> 7 Part Tag Flag Cylinders Size Blocks 7 unassigned wm 0 0 (0/0/0) 0 Enter partition id tag[unassigned]: Enter partition permission flags[wm]: Enter new starting cyl[0]: 4848 Enter partition size[0b, 0c, 4848e, 0.00mb, 0.00gb]: 4923e partition> print Current partition table (unnamed): Total disk cylinders available: 4924 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 4847 8.30GB (4848/0/0) 17409168 1 unassigned wu 0 0 (0/0/0) 0 2 backup wu 0 - 4923 8.43GB (4924/0/0) 17682084 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 4848 - 4923 133.26MB (76/0/0) 272916 partition> label Ready to label disk, continue? y
Az előbbiekben 1 üres disken létrehoztam 2 partíciót, így készíthető elő a fizikai eszköz arra, hogy majd metadevice része legyen.
2.2 Meta devices
A meta eszközök működése hasonló, mint a linux alatti szoftver raid-é, Solarisban ezt hívják volume managernek. Általában a meta keszdetű parancsok ezt tekergetik (elég sok van belőle). Körülbelül ugyanazokat a dolgokat lehet vele megvalósítani, mint a linux alatti md-vel. Legfontosabb külömbség, hogy a meta eszközökhöz tartozó adatbázis replikák adminisztrációja itt kézzel történik (a metadb-nek érdemes külön slice-ot csinálni). A meglévő replikákat a metadb paranccsal lehet megnézni:
# metadb metadb: mp3: there are no existing databases
Hozzunk létre 3 disken metadb replikákat:
# metadb -a -f c0t0d0s7 c1t2d0s7 c1t3d0s7 # metadb flags first blk block count a u 16 8192 /dev/dsk/c0t0d0s7 a u 16 8192 /dev/dsk/c1t2d0s7 a u 16 8192 /dev/dsk/c1t3d0s7
Meg mégegyet, mert ilyet is lehet:
# metadb -a c1t5d0s7 # metadb flags first blk block count a u 16 8192 /dev/dsk/c0t0d0s7 a u 16 8192 /dev/dsk/c1t2d0s7 a u 16 8192 /dev/dsk/c1t3d0s7 a u 16 8192 /dev/dsk/c1t5d0s7
Ha a metadb replikák legalább fele ugyanazt mondja a diskekről, akkor rendben van minden, automatikusan az ő tartalmuk fog érvényesülni. Ha nem, a meta eszközök nem fognak működni, ilyenkor kézzel kell megadni, hogy melyik replika lesz érvényes.
A linuxhoz hasonlóan, itt is egyszerűen megvalósíthatók a különböző szoftver RAID-ek. RAID0:
# metainit d1 1 2 c1t2d0s0 c1t3d0s0 d1: Concat/Stripe is setup # metastat d1: Concat/Stripe Size: 34807563 blocks (16 GB) Stripe 0: (interlace: 32 blocks) Device Start Block Dbase Reloc c1t2d0s0 0 No Yes c1t3d0s0 3591 No Yes Device Relocation Information: Device Reloc Device ID c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT
Utána létre lehet rajta hozni UFS fájlrendszert:
# newfs /dev/md/rdsk/d1 newfs: construct a new file system /dev/md/rdsk/d1: (y/n)? y Warning: 4342 sector(s) in last cylinder unallocated /dev/md/rdsk/d1: 34807562 sectors in 5666 cylinders of 48 tracks, 128 sectors 16995.9MB in 355 cyl groups (16 c/g, 48.00MB/g, 5824 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920, Initializing cylinder groups: ...... super-block backups for last 10 cylinder groups at: 33918112, 34016544, 34114976, 34213408, 34311840, 34410272, 34508704, 34607136, 34705568, 34804000
Fel is lehet mountolni, sőt, umountolni is:
# mount /dev/md/dsk/d1 /mnt # df -h|grep d1 /dev/md/dsk/d1 16G 17M 16G 1% /mnt # umount /dev/md/dsk/d1
Törölni is egyszerű:
# metaclear d1 d1: Concat/Stripe is cleared
A RAID1 esetében mindez már kicsit komplikáltabb. RAID1 tömböt úgy lehet létrehozni, hogy létrehozunk 2 db RAID0-t (sima mirror esetén ezek 1 diskesek), majd megadjuk, hogy azok egymás tükrei legyenek. Első látásra ez valamilyen szinten komplikáltnak tűnik, a RAID10 tömb egyszerű létrehozhatósága miatt van így megoldva. Másik előnye, hogy a módszerrel egy éles rendszer root fájlrendszere is tükrözhető, anélkül, hogy az élesen kívül más operációs rendszert használnánk ehhez (nem kell single user módba bootolni, és livecd szerűségre sincs szükség). A root fájlrendszer tükrözéséhez a metaroot segédprogram használandó, ez még a vfstab-ot is módosítja megfelelően. Ezek után egy RAID1 tömb létrehozási procedúrája:
-bash-3.00# metainit d11 1 1 c1t2d0s0 d11: Concat/Stripe is setup -bash-3.00# metainit d12 1 1 c1t3d0s0 d12: Concat/Stripe is setup -bash-3.00# metainit d10 -m d11 d10: Mirror is setup -bash-3.00# metattach d10 d12 d10: submirror d12 is attached -bash-3.00# metastat d10: Mirror Submirror 0: d11 State: Okay Submirror 1: d12 State: Resyncing Resync in progress: 0 % done Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 17409168 blocks (8.3 GB) d11: Submirror of d10 State: Okay Size: 17409168 blocks (8.3 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c1t2d0s0 0 No Okay Yes d12: Submirror of d10 State: Resyncing Size: 17409168 blocks (8.3 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c1t3d0s0 0 No Okay Yes Device Relocation Information: Device Reloc Device ID c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2
Ha már a redundanciáról esik szó, van lehetőség hot spare-ek használatára:
-bash-3.00# metahs -a hsp001 c1t5d0s0 hsp001: Hotspare is added -bash-3.00# metahs -i hsp001: 1 hot spare Device Status Length Reloc c1t5d0s0 Available 17409168 blocks Yes Device Relocation Information: Device Reloc Device ID c1t5d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJR34002000019460G0S -bash-3.00# metastat d10: Mirror Submirror 0: d11 State: Okay Submirror 1: d12 State: Resyncing Resync in progress: 67 % done Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 17409168 blocks (8.3 GB) d11: Submirror of d10 State: Okay Size: 17409168 blocks (8.3 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c1t2d0s0 0 No Okay Yes d12: Submirror of d10 State: Resyncing Size: 17409168 blocks (8.3 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c1t3d0s0 0 No Okay Yes hsp001: 1 hot spare Device Status Length Reloc c1t5d0s0 Available 17409168 blocks Yes Device Relocation Information: Device Reloc Device ID c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 c1t5d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJR34002000019460G0S
Az így létrehozott hot spare-ek az összes tömbnek melegtartaléka lesz (amire értelmezhető, RAID0-nak nem). Törölni is lehet:
-bash-3.00# metahs -d hsp001 c1t5d0s0 hsp001: Hotspare is deleted -bash-3.00# metahs -i hsp001: is empty Device Relocation Information: Device Reloc Device ID -bash-3.00# metahs -d hsp001 hsp001: Hotspare pool is cleared -bash-3.00# metahs -i metahs: mp3: no hotspare pools found -bash-3.00# metastat d10: Mirror Submirror 0: d11 State: Okay Submirror 1: d12 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 17409168 blocks (8.3 GB) d11: Submirror of d10 State: Okay Size: 17409168 blocks (8.3 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c1t2d0s0 0 No Okay Yes d12: Submirror of d10 State: Okay Size: 17409168 blocks (8.3 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c1t3d0s0 0 No Okay Yes Device Relocation Information: Device Reloc Device ID c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2
A mirror lebontása a felépítéshez hasonlóan bonyolult:
-bash-3.00# metadetach d10 d12 d10: submirror d12 is detached -bash-3.00# metaclear d10 d10: Mirror is cleared -bash-3.00# metaclear d12 d12: Concat/Stripe is cleared -bash-3.00# metaclear d11 d11: Concat/Stripe is cleared
Mirror esetében ha a metadevice megszűnik, akkor az annak megfelelő slice-okat mount-olva lehet rajtuk látni az UFS-t és használni őket. Elegánsabb megoldás, ha egyből cseréljük a disket, majd a metareplace paranccsal helyreállítjuk a mirrort (RAID5 esetén csak ez működik). Igen, RAID5-őt is lehet csinálni:
-bash-3.00# metainit d1 -r c1t2d0s0 c1t3d0s0 c1t5d0s0 d1: RAID is setup -bash-3.00# metastat d1: RAID State: Initializing Initialization in progress: 0.7% done Interlace: 32 blocks Size: 34807563 blocks (16 GB) Original device: Size: 34810432 blocks (16 GB) Device Start Block Dbase State Reloc Hot Spare c1t2d0s0 3921 No Initializing Yes c1t3d0s0 3921 No Initializing Yes c1t5d0s0 3921 No Initializing Yes Device Relocation Information: Device Reloc Device ID c1t2d0 Yes id1,sd@SSEAGATE_ST39173W_SUN9.0GLMD830490000793052T2 c1t3d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJP95339000019470FHT c1t5d0 Yes id1,sd@SSEAGATE_ST39102LCSUN9.0GLJR34002000019460G0S
Valamiért ezt hívják RAID-nak a Solaris volume managerben. Ennél persze jóval többet tud, ajánlom a meta kezdetű parancsok manualjait, valamint a docs.sun.com-on lévő Solaris Admin Guide-okat a továbblépéshez.
2.3 ZFS
3 Ajánlott irodalom
- Tomka Gergely: RAID és ENBD - gyakorlati útmutató. Könnyed bevezetés a RAID, az LVM és az ENBD (Enhanced Network Block Device) használatába.