Logikai kötetkezelés

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(Diskek)
(Diskek)
681. sor: 681. sor:
 
6. c1t10d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
 
6. c1t10d0 <SUN9.0G cyl 4924 alt 2 hd 27 sec 133>
 
/pci@1f,0/pci@1/scsi@1,1/sd@a,0
 
/pci@1f,0/pci@1/scsi@1,1/sd@a,0
  +
</pre>
  +
1 disk:
  +
<pre>
  +
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
 
</pre>
 
</pre>
 
x86:
 
x86:
698. sor: 709. sor:
 
/pci@0,0/pci-ide@7,1/ide@1/cmdk@1,0
 
/pci@0,0/pci-ide@7,1/ide@1/cmdk@1,0
 
</pre>
 
</pre>
  +
1 disk:
  +
<pre>
  +
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
  +
</pre>
  +
Muveltek vegzese 1 disken formattal:
  +
<pre>
  +
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
  +
</pre>
  +
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.
   
 
=== Meta devices ===
 
=== Meta devices ===

A lap 2006. szeptember 28., 19:55-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ó:

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ó:

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:
      1. "Egy pillanatra" leállítjuk az adatbázist.
      2. Csinálunk az LV-ről egy snapshotot (ez gyors művelet).
      3. Újra elindítjuk az adatbázist. A snapshoton az eredeti, konzisztens tartalom látszik.
      4. A kedvenc offline backup-eszközünkkel elmentjük a snapshot volume-on található adatbázispéldányt.
      5. 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:
      1. Snapshotot csinálunk a rendszerről.
      2. Belechrootolunk.
      3. Kipróbáljuk, amit ki akartunk próbálni. Csak a snapshot módosul.
      4. Töröljük a snapshotot.
      5. 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.

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

2.3 ZFS

3 Ajánlott irodalom

Személyes eszközök