FTFM: Root RAID1
Root-tiedostojärjestelmä RAID1-toteutuksella
Kirjoittanut: APz <> (06/04/2006)

Miksi RAID?

Ottaen huomioon nykyisten kovalevyjen laatu, ei ole kovinkaan tavatonta huomata eräänä päivänä kovalevynsä muuttuneen verkonpainoksi. Backupit ovat luonnollisesti pelastus, mutta koko järjestelmä on uuden levyn hankkimiseen asti alhaalla. Jos kyseessä on esimerkiksi oma pieni palvelin, on edessä mahdollisesti pitkä downtime. Ratkaisuksi on tarjolla siirtää käyttöjärjestelmä RAID1-partitiolle, jossa sama tieto tallennetaan kahdelle eri kovalevylle, ja toisen hajotessa järjestelmä voi jatkaa toimintaansa jäljelle jääneellä täysin normaalisti.

Mitä tarvitaan?



On suositeltavaa, että kovalevyt ovat ERI väylissä. Ainakin perinteisen IDEn kanssa kun voi käydä niin, että master-levyn kilahtaessa väylä tukkiutuu ja myöskin slave on silloin poissa pelistä.

Esimerkeissämme meillä on käytössä 2 IDE-levyä, hda ja hdc. Molemmissa on yksi koko levyn kokoinen partitio, eli hda1 ja hdc1. hda1 sisältää tällä hetkellä esimerkiksi ext3-tiedostojärjestelmän päällä olevan käyttöjärjestelmän.

Arrayn luominen

Tulemme seuraavaksi luomaan RAID1-arrayn /dev/md0, jonka muodostavat /dev/hda1 ja /dev/hdc1. Koska hda1 kuitenkin sisältää tällä hetkellä vielä toimivan järjestelmän, merkitsemme hda1:n rikkinäiseksi, jolloin md0 on pelkästään hdc1. Tätä ennen sinun on muutettava fdiskillä partition tyypiksi 'fd', 'Linux raid autodetect'. Tämä käy kätevästi esimerkiksi cfdiskllä, valitset Type ja listasta 'fd'. Tee tämä kummallekin levylle. Sen jälkeen luodaan itse array komennolla:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/hdc1


Avainsana 'missing' kertoo, että kyseisessä kohdassa oleva levy ei juuri nyt ole käytettävissä. Käytännössä tämä estää sen, ettei RAID käynnistyessään vedä tällä hetkellä käyttöjärjestelmän käytössä olevaa levyä sileäksi.

Huom: Tämä komentorivi EI tarkoita, että /dev/hdc1 on 'missing', vaan array koostuu kahdesta laitteesta, jotka ovat 'missing' ja '/dev/hdc1'


Arrayn formatointi

Komennon antamisen jälkeen laite /dev/md0 on käytettävissä. Formatoi se haluamallesi tiedostojärjestelmälle, esimerkiksi:

ext3:
mke2fs -j /dev/md0
ReiserFS:
mkreiserfs /dev/md0
Reiser4:
mkreiser4 /dev/md0


Tiedostojen kopiointi

Formatoimisen jälkeen voit mountata uuden arraysi jonnekin, esimerkissämme se on /move. Seuraavaksi uudelle partitiolle on luotava ne hakemistot, joiden kopiointi normaalikonstein ei onnistu tai ei kannata. Luo siis hakemistot tmp, proc, mnt sekä mahdollisesti kerneliä 2.6 käyttäessäsi sys.

Kopioi tämän jälkeen kaikki muu, paitsi edellä mainitut hakemistot uuteen sijoituspaikkaansa. Todennäköisesti on hyvä idea pysäyttää ylimääräiset daemonit tämän ajaksi. Voit kopioida sisällön joko komennolla:

cp -avx (lähde) /move


Tai sitten luistaa ja tehdä saman esimerkiksi tiedostonhallintaohjelmalla, kuten mc. Ennenkuin unmounttaat /move:n, editoi /move/etc/fstab ja muuta root-levyksi hda1:n tilalle md0. Korjaa myös tiedostojärjestelmä, mikäli formatoit arrayn muulla tiedostojärjestelmällä, kuin alkuperäisen root-levyn. Tämän jälkeen voit unmountata sen. Varmista tosin, että olet TODELLA kopioinut kaiken tärkeän md0:lle, sillä seuraavassa vaiheessa tuhoamme hda1:n alkuperäisen sisällön.

Muutokset ennen boottia

Tämän jälkeen editoi /etc/lilo.conf, ja muuta sieltä root=/dev/md0. Anna tässä vaiheessa vielä boot=-rivin olla, se ei häiritse tässä vaiheessa. Aja lilo ja boottaa kone.

Ensimmäinen bootti

Bootin jälkeen varmista mount-komennolla, että root-partitio on nyt todellakin md0. Esimerkiksi:
/dev/md0 on / type ext3 (rw,errors=remount-ro)


Koneen bootatessa se luki hda1:n boottiraidan ja myös kernelin sn sieltä, mutta otti md0:n käyttöön root-partitioksi. /move/etc/fstab:iin tehdyn muutoksen ansiosta md0 tuli read/write-tilaan, ja järjestelmäsi pitäisi toimia nyt kuten ennenkin.

Toisen levyn lisääminen arrayhyn

Nyt kuitenkin RAID1-partitio MD0 toimii vain yhdellä levyllä, joka siis on hdc1. Nyt komennamme RAIDia lisäämään hda1:n samaan arrayhyn:

mdadm -a /dev/md0 /dev/hda1


Välittömästi tämän komennon jälkeen levyjen väylässä pitäisi alkaa tapahtua. RAID synkronoi nyt levyjen sisällöt niin, että molemmilla on täsmälleen sama sisältö. Saatuaan operaation valmiiksi ajuri tekee saman kirjoitusoperaation aina kummallekin levylle, kunnes toinen todetaan rikkinäiseksi ja poistetaan arraystä. Synkronointi kestää levyn koosta ja väylän nopeudesta riippuen kymmenestä minuutista useaan tuntiin. Katso /proc/mdstat-tiedostoa, sieltä näet tilanteen ja ajan.

Voit levyjen synkronoituessa käyttää järjestelmää aivan normaalisti, mutta älä uudelleenkäynnistä sitä, ennenkuin synkronointi on päättynyt ja olet suorittanut seuraavan vaiheen.

Boottiraita jokaiseen levyyn

Seuraavaksi editoi /etc/lilo.conf:ia ja tee seuraavat muutokset:

boot=/dev/md0
root=/dev/md0
raid-extra-boot="/dev/hda,/dev/hdc"


Listaa raid-extra-boot-kohdassa jokainen levy, joka kyseisessä arrayssä on. Tämän jälkeen aja LILO. Jos LILO valittaa tuntemattomista parametreistä, on sinulla liian vanha versio käytössäsi. Mikäli ajo onnistui, on lopputulos suunnilleen tämän näköinen:

Added Linux *
Added LinuxOLD
The boot record of  /dev/md0  has been updated.
The boot record of  /dev/hda  has been updated.
Warning: /dev/hdc is not on the first disk
The boot record of  /dev/hdc  has been updated.


Kun synkronointi on mennyt loppuun, voit bootata koneen, tai vaihtoehtoisesti vaan jatkaa käyttämistä. Järjestelmäsi kestää nyt yhden levyn hajoamisen ongelmitta.

Ylläpito

Seuraa aika ajoin /proc/mdstat-tiedostoa. Sen pitäisi näyttää suunnilleen tältä:

md0 : active raid1 hdc1[1] hda1[0]
      6297344 blocks [2/2] [UU]


Mutta ennemmin tai myöhemmin yksi levyistäsi muuttuu ovistopperiksi tai verkonpainoksi. Rikkinäisen levyn nimen perään ilmestyy /etc/mdstat:ssa (F). Esimerkkitapauksessa hdc on päättänyt maallisen vaelluksensa:

md0 : active raid1 hdc1[1](F) hda1[0]
      6297344 blocks [2/1] [U_]


Kun uusi levy on hyppysissä, ilmoitamme RAIDille, että edellinen levy olisi hyvä poistaa arraystä. Ole erittäin tarkkana, että poistat todellakin rikkoutuneen levyn!

mdadm /dev/md0 -r /dev/hdc1


Sammuta kone, irroita asema ja vaihda uusi tilalle. Vaihtoehtoisesti mikäli käytät hotswapattavia laitteita, vaihda uusi kiinni sammuttamatta. Kun kone on ajossa ja uusi levy sisällä, luo siihen samanlainen partitio kuin edelliseenkin ja anna komento:

mdadm -a /dev/md0 /dev/hdc1


Synkronointi käynnistyy ja polttaa levyaktiviteetin valoa iloisen kirkkaasti, mutta voit käyttää konetta normaalisti.
Tämä on apz.fi-projekti