LVM tükrözés Ubuntu 12.04 LTS szerveren

Eleddig BSD és AIX írások „születtek tőlem”, most azonban egy idevágó gyakorlati probléma miatt úgy gondoltam, hogy egy rövid how-to-t írok egy másik témakörben – Linux operációs rendszer konfigurációval kapcsolatban.  Úgy jött ki a lépés, hogy saját szerver építése kapcsán egy kisebb problémába ütköztem, melynek a megoldása végül azonban nem is volt olyan magától értetődő.  Ennek a rövid leírásáról szól ez a cikk.

 

LVM tükrözés Ubuntu 12.04 LTS szerveren

 

A szerver operációs rendszer kiválasztásánál az Ubuntu 12.04 LTS szerver 64 bites verziójára esett a választás. A nyilvánvaló okok, gondolom, ismeretesek: stabilitás, Debian alap, kiváló support, az LTS miatt várhatóan hosszú ideig, kényelmes, kezes. A lemez kiosztáshoz a rugalmasság miatt az LVM-re esett a választásom. Azonban a rugalmasság és performancia mellett az adatbiztonságot sem tekintettem elhanyagolható szempontnak, és mivel a hardver-konfiguráció kettő darab hard disk-et tartalmaz, úgy döntöttem, tükrözött logical volume-kat fogok használni. Ez elsőre nagyon szimplán hangzik, de a létrehozásakor már nem tűnt annak. Lássuk a megoldást!

 

A hardver

Alapgép: HP ML110 G5 szerver
RAM: 8GB
CPU: Intel Q6600 CPU (4 mag)
Operatív tár: 2 db Maxtor 300GB SATAII merevlemez
Operációs rendszer: Ubuntu Linux 12.04 LTS server verzió, 64bit-es

A telepítéskor kettő darab  partíciót hoztam létre mindkét merevlemezen:

– /dev/sda1  (250GB)
– /dev/sda2  (1GB)
– /dev/sdb1  (250GB)
– /dev/sdb2  (1GB)

Ezeket felhasználva létrehoztam egy ’xtvg’ nevű volume groupot (a továbbiakban: VG). Ez azonban még semmi mást nem tartalmazott, mint egy szintén létrehozott  ’rootvol’ nevű logical volumet (továbbiakban: LV), erre telepítettem az alaprendszert. A partícionálatlan területeket későbbi felhasználásra szántam. Természetesen, ezzel nem voltam megelégedve, hiszen szervert építettem, minimum szerettem volna külön területet a /home-nak, a /tmp-nek , a /var-nak és a swap is hiányzott még, továbbá egy nagyobb filerendszer a kiszolgálandó adatoknak, ez lett a /data. Az alábbiak szerint:

# lvscan

Ez önmagában nem probléma, hiszen a szokásos módon, az lvcreate parancsot használva létrehozható az LV, majd tetszőleges filerendszerrel formázva már csatolható és használatba vehető. Ám még mindig nem tükrözött a kötet.

A fizikai kötetek (továbbiakban: PV) így néznek ki:

 

Megoldás

Az Ubuntu LVM kezelésének része az  ’lvconvert’ alkalmazás, melynek segítségével meglevő LV konvertálható a megadott paraméterek szerint. A vonatkozó fórumbejegyzések szinte mindegyike a következőt parancsot javasolta:

# lvconvert -m 1 –corelog xtvg/rootvol

Ez szépnek is tűnt és első ránézésre örültem is. Egyedül a ’corelog’ nem volt tiszta, hogy mit jelent, hát utánanéztem. Az eredmény láttán gyorsan rájöttem, hogy nem ez az, ami nekem kell. A ’—corelog’ kapcsoló ugyanis azt csinálja, hogy az LV tranzakciós logját a memóriában tartja. Mit is jelent ez? Nem egyebet, minthogy egyrészt a tranzakciós log a memóriát foglalja (ezt én nem akarom), másfelől – és ez a rosszabb -, ha újraindul a szerver, a mirrornak újra kell épülnie (ez nagyon sok idő, és a szerver közben igen belassulhat), hiszen a memória tartalma kiürült, így a mirror státusza is ismeretlen. Ráadásul én a tranzakciós logot is redundánssá szerettem volna tenni, mert ha csak az egyik PV-n foglal helyet, akkor annak meghibásodása esetén megint csak bajban vagyok.

Erre való az ’lvconvert’ következő paramétere:

# lvconvert -m 1 xtvg/rootvol –mirrorlog mirrored

Azonban mikor ezt kiadtam, egy szép, kövér hibaüzenetet kaptam:

Not enough PVs with free space available for parallel allocation.
Consider –alloc anywhere if desperate.

Ezt sem értettem, hiszen két PV-m (a /dev/sda2 és /dev/sdb2) gyakorlatilag érintetlen volt. De OK. Legyen neki.

# lvconvert -m 1 xtvg/rootvol –mirrorlog mirrored –alloc anywhere

Ez le is futott, hiba nélkül. Azonban mikor a tükrözött LV paramétereit lekértem, tisztán látszott, hogy a mirrorlog, amelyett szintén tükrözni akartam, ugyanannak a merevlemeznek a két partíciójából kreált PV-jén helyezkedik el. Itt már azért ráncoltam a szemöldökömet, bosszantott kissé a dolog. Azt nem is említve, hogy szerettem volna a tranzakciós logot is egy külön LV-on tárolni!

Megpróbáltam egy kisebb LV-t létrehozni erre a célra:

# lvcreate -m1 –nosync -n logvol xtvg -L 50M

Ez létre is jött, de a ’rootvol’ LV tükörré konvertálásakor ehhez hozzá sem nyúlt, viszont ismét a már fentebb idézett hibaüzenetet kaptam. Hmm. Töröltem a ’logvol’ LV-t.

A megoldás következő lett, és ezután minden ment, mint a karikacsapás. A bűvös parancssor:

# lvcreate -i2 –L 50M -n logvol -I 128 xtvg

ahol a –i2 a csíkok száma, a –I 128 pedig a stripe mérete kilobájtban és 50MB nagyságú.

Ezután az első parancs kiadásakor használt paraméterekkel az ’lvconvert’ hiba nélkül lefutott. Automatikusan detektálta az így létrehozott ‘logvol‘ nevű log LV-t és használatba is vette. Ezután megkreáltam a többi igényelt LV-t, és az eredmény a következő lett:

# lvs -a -o +devices

Látjuk, hogy a ’rootvol’ LV a /dev/sda1 és /dev/sdb1 PV-ken van tükrözve, míg a ’rootvol’ tranzakciós logja a /dev/sda2 ill. /dev/sdb2 PV-ken. Jihháá, ezt akartam! Ezt a lépést a többi LV-n is végrehajtottam, az igényeimnek megfelelően, mint az fentebb is látszik. A swap kivételével mind kapott egy ext3 filerendszert, majd módosítottam az fstabot.

# cat /etc/fstab

# df –h

 

 

Összegzés

Az igényelt struktúra létrehozása – úgy gondolom – jogos igény. Kezdetben nem voltam birtokában a szükséges lépéseknek, csak annyiban voltam szinte biztos, hogy valami úton-módon ez megvalósítható. Teljesen bizonyossá azonban csak akkor vált, miután hosszas kísérletezés után eljutottam ahhoz a konfigurációhoz, melyet megálmodtam erre a szerverre. Akinek hasonló igénye van, remélem tudtam segíteni ezzel az írással!

 

 

LVM tükrözés Ubuntu 12.04 LTS szerveren” bejegyzéshez 4 hozzászólás

  1. Szia!

    Bár nem mai az írás, azért hátha emlékszel rá. Ugyanezzel küzdök épp, és ha megfeszülök sem akarja a két mirrorlog-ot külön PV-kre tenni. Azt látom, hogy neked sikerült, csak azt nem látom, hogy ennek mi köze ahhoz, hogy létrehoztál előtte egy stripe-olt LV-t is? (Azért a biztonság kedvéért, kipróbáltam én is, de ugyanaz, egy lábra tette mind a két mirrorlog tükröt.)

    1. Szia,

      Tényleg régen volt már; nem annyira emlékszem :( De ha lesz egy szabad estém, kijátszom a konfigot neked újra egy Virtualbox-on. Üdv.

  2. Közben nagy nehezen megfejtettem végre, úgyhogy már nem aktuális, köszi. Ha esetleg érdekel, annyi a titok, hogy az lvconvert parancsnál mindkét diszket meg kell adni, nem csak az újat, amit be akarunk vonni, hanem azt is, ami már az LV alatt van. Pl:
    lvconvert -m 1 xtvg/rootvol –mirrorlog mirrored –alloc anywhere /dev/sda /dev/sdb
    Így a két mirrorlog másolatot is mindkét diszkre ráteszi.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük