Hogyan tegyük a Linux LVM mirrorlog mindkét példányát külön lábra

RedHat alatt kellett volna tesztelnem az LVM tükrözés használhatóságát, és bizony pár napot elböngészgettem ezzel a problémával, mert a redhat.com dokumentációjának ide vonatkozó fejezete enyhén elnagyolt:

You can specify which devices to use for the mirror legs and log, and which extents of the devices to use. To force the log onto a particular disk, specify exactly one extent on the disk on which it will be placed. LVM does not necessary respect the order in which devices are listed in the command line. If any physical volumes are listed that is the only space on which allocation will take place. Any physical extents included in the list that are already allocated will get ignored.
The following command creates a mirrored logical volume with a single mirror and a single log that is not mirrored. The volume is 500 MB in size, it is named 

mirrorlv

, and it is carved out of volume group 

vg0

. The first leg of the mirror is on device 

/dev/sda1

, the second leg of the mirror is on device 

/dev/sdb1

, and the mirror log is on 

/dev/sdc1

.

# 

lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1

Oké, csakhogy én azt szeretném, hogy a meta adatok (mirrorlog), amik a tükör szinkronállapotát tartalmazzák, szintén mindkét lábon le legyenek tárolva, különben mi értelme van az egésznek. (Ha a mirrorlog nem elérhető, az LVM a tükör mindkét lábát újra felnyálazza – persze ha egyáltalán elérhető mindkét láb -, hogy újra generálja azt. És amíg ez megy, az LV-k használhatatlanok.) Nem nagyon akarom túl bő lére ereszteni, hogy mi mindent szívtam végig, mire teljesen véletlenül sikerült jól megcsinálni (utólag silabizáltam ki, hogy most vajon mitől lett jó, és eddig miért nem), a lényeg, hogy így kell (az LVM használatának részletesebb kifejtése sem célja ennek az írásnak, van róla használható infó a neten bőven):

Tegyük fel, hogy van két diszkem (/dev/sda1 és /dev/sdb1) és ezeket szeretném egy vg0 volume groupba fogni, amin egy 500MB méretű, mirrorlv nevű logical volume-ot szeretnék tükrözötten létrehozni, úgy, hogy mindkét diszken legyen egy-egy lába. Kapásból kétlábasra csinálni nekem a mai napig nem sikerült. Mindig vagy az LV-nek, vagy a mirrorlognak került mindkét példánya azonos lábra. Viszont, ha megcsinálom az LV-t normál egypéldányosra (linear), és utána konvertálom át tükrözötté, úgy összejött:

# 

lvcreate -L 500M -n mirrorlv vg0 /dev/sda1
# 

lvconvert -m1 vg0/mirrorlv --mirrorlog mirrored --alloc anywhere /dev/sdb1 /dev/sda1

A “-m1” -gyel megadjuk, hogy innentől egy tükör példányt is szeretnénk a “vg0/mirrorlv” LV-nek, tükrözött mirrorloggal, amit bárhol elhelyezhet (egyébként az alapértelmezett –alloc érték az “disk”, amivel egy külön, jelen esetben 3. diszkre tehetnénk a mirrorlogot, amit legutolsó paraméterként kell megadnunk, illetve lehet “core”, ami pedig memóriában tárolja – ennek csak rövid életű tükrök esetén lehet értelme.) És akkor a trükk: az lvconvert-nek nem csak az új diszket kell megadni, amire a tükröt szeretnénk tenni, hanem utána (és a sorrend nem mindegy!) meg kell adni az eredeti diszket is, amin már az LV rajta van, különben a mirrorlogot csak az új diszkre teszi – két példányban.



[root@lnx ~]# lvs -a -o +devices
  LV                       VG   Attr   LSize    Origin Snap%  Move Log           Copy%  Convert Devices
  mirrorlv                 vg0  mwi-ao  512.00m                    mirrorlv_mlog 100.00         mirrorlv_mimage_0(0),mirrorlv_mimage_1(0)
  [mirrorlv_mimage_0]      vg0  iwi-ao  512.00m                                                 /dev/sda1(0)
  [mirrorlv_mimage_1]      vg0  iwi-ao  512.00m                                                 /dev/sdb1(0)
  [mirrorlv_mlog]          vg0  mwa-ao  512.00m                                  100.00         mirrorlv_mlog_mimage_0(0),mirrorlv_mlog_mimage_1(0)
  [mirrorlv_mlog_mimage_0] vg0  iwi-ao  512.00m                                                 /dev/sda1(1)
  [mirrorlv_mlog_mimage_1] vg0  iwi-ao  512.00m                                                 /dev/sdb1(1)

És ennyi, akinek van kiegészítő infója, hogy hogyan lehet ezt egy lépéssel megcsinálni, az megoszthatná egy kommentben, köszi! :)

Néhány további hasznos írás  a Linux LVM mirroringról:

http://www.datadisk.co.uk/html_docs/redhat/rh_lvm.htm
http://www.sandelman.ca/mcr/blog/lvm/
http://kairo.wordpress.com/2009/05/06/making-lvm-mirror-on-linux-using-red-hat-cluster-suite-clvm-cluster-lvm-on-rhel-5/
http://www.joshbryan.com/blog/2008/01/02/lvm2-mirrors-vs-md-raid-1/
http://serverfault.com/questions/126851/linux-lvm-mirror-vs-md-mirror
http://deranfangvomende.wordpress.com/2011/04/04/linux-lvm-mirroring-comes-at-a-price/
http://unixlinux.tmit.bme.hu/Logikai_k%C3%B6tetkezel%C3%A9s

If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.
This entry was posted in Egyéb and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>