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., 20: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.