LVM mirror => md RAID1

Gondoltam, ha mar jegyzeteltem munka kozben, leirom itt is, hatha valakit erdekel az eljaras.

--- Alaphelyzet

/dev/sda - boot (nem foglalkozom vele)
/dev/sdb - data1 (LVM mirror primary) => RAID1
/dev/sdc - data2 (LVM mirror secondary) => RAID1
/dev/sdd - mirrorlog
/dev/vg00 - regi VG
/dev/vgraid1 - uj VG

--- A mirror lebontasa az 1. diszkrol

Minden LV-re:

# lvconvert -m 0 /dev/vg00/lv02 /dev/sdb

Nem tudom, mennyire trivialis, de ez azonnal, egy masodperc alatt vegbemegy. Tehat a /dev/sdc -vel valo szinkron azonnal megszunik, es a mirrorlog is rogton inaktiv allapotba kerul.

--- Az elso diszk es az LVM mirrorlog device eltavolitasa:

# vgreduce /dev/vg00 /dev/sdb
# vgreduce /dev/vg00 /dev/sdd

--- RAID1 array letrehozasa egyelore 1 diszken

# mdadm -C -l 1 -n 2 /dev/sdb missing
mdadm: device /dev/sdb exists but is not an md array.

szoval ize...

# mdadm -C /dev/md0 -l 1 -n 2 /dev/sdb missing
mdadm: array /dev/md0 started.

szerk. A fenti a hosszu kapcsolokkal:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb missing

Igy nez ki eddig a RAID:

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid1 sdb[0]
488386496 blocks [2/1] [U_]

unused devices:

--- RAID1 array LVM PV-kent valo definialasa (ne kerdezzetek, miert jo a --metadatacopies 2 opcio...)

# pvcreate --metadatacopies 2 /dev/md0
Physical volume "/dev/md0" successfully created

--- Uj VG letrehozasa

# vgcreate vgraid1 /dev/md0
Volume group "vgraid1" successfully created

--- Uj LV-k letrehozasa

# lvcreate -L 100G /dev/vgraid1/lv_00

...aztan miutan rajottem, hogy erre folosleges 100GB, egy kis atmeretezes (ha filerendszer is van rajta, akkor umount es fsadm):

# lvresize -L 50G /dev/vgraid1/lv_00
WARNING: Reducing active logical volume to 50.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_00? [y/n]: y
Reducing logical volume lv_00 to 50.00 GB
Logical volume lv_00 successfully resized

Ez lett belole (a valos devicenevek kisse hetkoznapibbak):

# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv00 vg00 -wi-ao 100.00G
lv01 vg00 -wi-ao 100.00G
lv02 vg00 -wi-ao 30.00G
lv_00 vgraid1 -wi-a- 50.00G
lv_01 vgraid1 -wi-a- 100.00G
lv_02 vgraid1 -wi-a- 100.00G

A regi LV-k /dev/sdc -n, a pillanat, amikor az adatbol 1 peldany van:

# lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
lv00 vg00 -wi-ao 100.00G /dev/sdc(7680)
lv01 vg00 -wi-ao 100.00G /dev/sdc(33280)
lv02 vg00 -wi-ao 30.00G /dev/sdc(0)
...

--- Filerendszer letrehozasa az uj LV-ken:

# mkfs.ext3 -m 1 -L WTF /dev/vgraid1/lv_00
mke2fs 1.41.8 (11-July-2009)

...

--- Adatok atkuldese rsync-kel

# time rsync -a /honnan /hova

--- Regi LV-k torlese

# umount /dev/mapper/vg00-lv02
# lvremove /dev/mapper/vg00-lv02
Do you really want to remove active logical volume lv02? [y/n]: y
Logical volume "lv02" successfully removed

--- A regi VG torlese

# vgremove vg00
Volume group "vg00" successfully removed

--- Az fstab szerkesztese

--- Vegul a felszabaditott 2. diszk hozzacsapasa a RAID1 array-hez:

# mdadm /dev/md0 --add /dev/sdc
mdadm: added /dev/sdc

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid1 sdc[2] sdb[0]
488386496 blocks [2/1] [U_]
[>....................] recovery = 0.0% (185600/488386496) finish=87.6min speed=92800K/sec

unused devices:

Ennek figyelesere lehet dmesg-t is hasznalni, en ezt a sort irtam (az echo helyett lehet barmi, egy 'eject' vagy 'aplay fart.wav' is):

# while [[ $(cat /sys/class/block/md0/md/sync_action) != idle ]];
do sleep 1; done; echo "Resync complete at $(date)"

--- Init scriptek, reboot

Mivel nalam nem particiokra kerultek a RAID tagjai, a kernel autodetect nem fogja megtalalni az arrayt:

md: Autodetecting RAID arrays.
md: Scanned 0 and added 0 devices.
md: autorun ...
md: ... autorun DONE.

Igy valahova az init scriptekbe kell beletenni a kovetkezot, en ertelemszeruen az LVM ele tettem:

mdadm --assemble --scan

amihez kell egy mdadm.conf is. Az elso sor nalam a konkret devicenevekkel van kitoltve, a masodik pedig a 'mdadm --examine --scan' kimenete.

DEVICE /dev/sdb /dev/sdc
ARRAY /dev/md0 UUID=....

Vegul nem art egy reboot sem, hogy az egesz mukodokepesseget leteszteljuk...

---

Ami elegge nyilvanvalo, hogy az mdadm-nel ugyanezt a rovid kapcsolokkal (-As, -C...) is le lehet irni, de itt valahogy szemleletesebbnek tuntek a hosszu valtozatok.

A devicenevekre lehet kozvetlenul a device-mapper node-ok, de szimbolikus nevek alapjan is hivatkozni, viszont szinte mindenhol full path kell, amit a '*display -c' -vel lehet a leggyorsabban kideriteni.

Tobbek kozott azt sem ertem en, hogy a tisztan csak 'view' funkciokat ellato vgs, lvs es pvs parancsok miert nem mennek id -u != 0 userrel... Pedig a /sys/class/block/dm-* alatt lenyegeben minden LV informacio elerheto a usereknek.

Hozzászólások

Szia!

Miért jobb a DM RAID1 mint az LVM mirror?

Ennyit biztosan tudok:

- LVM mirror minden reboot utan ujraepul (tehat ujra le kell syncelnie a VG-t) - ez eleg felelmetes szerintem
- LVM mirrort szinte a kutya se hasznal, md-t annal tobben (ergo howto meg debug info is joval kevesebb van hozza)
- a legujabb LVM release-ekben is felelmetes bugokat javitottak (jo, ez mashol is elofordul), eleg csak az LV-k kezeleset jol ellatnia

"- LVM mirror minden reboot utan ujraepul (tehat ujra le kell syncelnie a VG-t)"

Ez már szerencsére nem így van, a manpage szerint a default az,hogy van neki egy külön kis adatterülete, és nem syncel minden boot (lv aktiválás) során.

Viszont a kérdés felmerült bennem, hogy az lvm alapú mirrorozás jóval rugalmasabb, hisz egy vg-n belül csinálhatok mirroros és nem mirroros lv-ket is, attól függően, hogy mire van szükségem. Plusz igény szerint bővíthető a vg. Az alternatívák mind kevésbé rugalmasak, ám (lehet hogy) jóval gyorsabbak (raid10) vagy már milliószor ki lettek tesztelve (raid1+0).

Épp az előtt állok, hogy választani kéne a lehetőségek között, ám tény, hogy félek a tisztán lvm-es megoldástól (nem mellesleg a raid10-től is, ehe). Valakinek van tapasztalata a fentiekkel?

A fenti RAID tomb 'importalasa' kulso USB hazban:


$ sudo mdadm --examine --scan # mdadm -Es 
ARRAY /dev/md0 UUID=0afefc32:92a550f9:9eb53816:96edd572
$ sudo mdadm --assemble --scan # mdadm -As
mdadm: /dev/md/0_0 has been started with 2 drives.
$ cat /proc/mdstat
Personalities : [linear] [raid1]
md127 : active raid1 sdb[0] sdc[1]
      488386496 blocks [2/2] [UU]

unused devices: <none>

dmesg:


[  917.465380] md: md127 stopped.
[  917.470261] md: bind<sdc>
[  917.470768] md: bind<sdb>
[  917.489644] md: raid1 personality registered for level 1
[  917.489956] bio: create slab <bio-1> at 1
[  917.490106] md/raid1:md127: active with 2 out of 2 mirrors
[  917.490153] md127: detected capacity change from 0 to 500107771904
[  917.502804]  md127: unknown partition table

Volume group:
A rootvg a rendszer, a vgraid1 az adatokat tartalmazo, RAID feletti VG.


$ sudo vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vgraid1" using metadata type lvm2
  Found volume group "rootvg" using metadata type lvm2
$ sudo vgchange -ay vgraid1
  5 logical volume(s) in volume group "vgraid1" now active
$ sudo lvs vgraid1
  LV         VG      Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_films   vgraid1 -wi-a-  50.00g
  lv_gabor   vgraid1 -wi-a-  50.00g
  lv_install vgraid1 -wi-a-  50.00g
  lv_music   vgraid1 -wi-a- 100.00g
  lv_photo   vgraid1 -wi-a- 100.00g

Hat ennyi. Innen csak a mount van hatra...

---

Leallitas:


$ sudo vgchange -an vgraid1
$ sudo mdadm -S /dev/md127

dmesg:


[ 2035.045805] md127: detected capacity change from 500107771904 to 0
[ 2035.045811] md: md127 stopped.
[ 2035.045817] md: unbind<sdb>
[ 2035.048087] md: export_rdev(sdb)
[ 2035.048140] md: unbind<sdc>
[ 2035.052057] md: export_rdev(sdc)