Tarkvaralise RAID massiivi kasutamine Linuxiga

Allikas: Kuutõrvaja

Sissejuhatus

RAID (Redundant Arrays of Inexpensive/Independent Disks, ingl. k. redundantne massiiv odavaid/iseseisvaid kõvakettaid) http://en.wikipedia.org/wiki/RAID tehnika abil saab mitmetest iseseisvatest füüsilistest plokkseadmetest moodustada loogilisi plokkseadmeid. Praktiliselt esinevad kasutatavad füüsilised plokkseadmed kõvaketaste või kõvaketta fdisk partitsioonide kujul. RAID lahendusel on üksiku füüsilise seadme kasutamise ees sellised eelised

  • kasutada olevatest füüsilistest kõvaketastest saab moodustada loogilise plokkseadme, mille maht ületab massiiivi mistahes kompenendi mahu eraldivõetuna
  • sõltuvalt RAID skeemi valikust saab korraldada suuremat kiirust, paremat redundantsust või mõlemat võrreldes üksiku kõvakettaga

Juurutamise keerukuse seisukohalt võiks eristada kahte tarkvaralise RAID massiivi kasutamise juhtumit

  • /boot ja / failisüsteemid ei asu tarkvaralise RAID massiivil, vaid nö tavalisel plokkseademel, massiivi kasutatakse nt /srv all olevate andmete jaoks; sellise olukorra käsitletemisest käesolev tekst alustab kuna on lihtsam käivitada
  • /boot ja / failisüsteemid asuvad tarkvaralisel RAID massiivil; sellist olukorda käsitleb tekstis punkt 'Operatsioonisüsteemi alglaadimine RAID1 skeemilt'

Riistvaraline ja tarkvaraline RAID

Kui loogilise seadme moodustamiseks kasutatakse nt arvuti PCI-E siinile ühendatud spetsiaalselt riistvaralist RAID kontrollerit, mille külge on omakorda ühendatud kõvakettad, siis on tegu riistvaralise RAID lahendusega. Operatsioonisüsteem peab sel juhul toetama kasutusel olevat riistavaralise RAID massiivi kontrollerit ja tugi esineb tavaliselt tuuma mooduli kujul. Operatsioonisüsteemi jaoks paistab loogiline seade ühe SCSI seadmena, kusjuures riistvaralist RAID massiivi reeglina ei saa operatsioonisüsteemi vahenditega hallata, haldus toimub nt kontrolleri BIOS kaudu arvuti käivitamisel. Selliseks näiteks on 3ware RAID kontrolleri kasutamine.

Ostub aga, et kuigi kõvakettad ühendada nt otse SATA kontrolleri külge, saab siiski korraldada nende RAID lülituse, sel juhul tegeleb RAID lülituse pidamiseks vajalike tegevustega operatsioonisüsteemi tuum. Sellisel moel korraldatud RAID lülitust nimetatakse tarkvaraliseks ning tal on riistvaralise ees järgmised eelised

  • tarkvaralise RAID massiivi kuuluvaid kettaid saab hõlpsasti liigutada arvutite vahel muretsemata, kas arvutites on sama tootja kontrolleri sama mudel
  • tarkvaralise RAID massiivi tööks kasutada olevat arvutusjõudlust saab muuta arvuti protsessori ja mälu skaleerimise teel

RAID ja LVM

Kuigi tihtipeale kasutatakse RAID ja LVM (Logical Volume Management) tehnikat koos ja teatud lahendusi saab moodustada praktiliselt mõlemiga, on sisuliselt tegu kahe erineva küsimusega:

  • RAID tegeleb peaasjalikult füüsilistest plokk-seadmetest loogiliste plokk-seadmete moodustamisega ja selle tulemusena moodustunud süsteemi haldamisega, nt asendab automaatselt riknenud kõvaketta hot-spare'ga ning sünkroniseerib andmed õiges suunas
  • LVM tegeleb peaasjalikult plokk-seadmele köidete (ingl. k. volume), millele tavaliselt moodustatakse, kas failisüsteem või saaleala, moodustamise ja haldamisega, nt võimaldab köitei suurust muuta ning teha snapshot'te

Seega loogilises mõttes asub RAID LVM'ist kiht allpool, materjali esituse selguse mõttes esitatakse nad Kuutõrvajas erinevates punktides. Käesolev pala kõneleb tarkvaralise RAIDi kasutmisest Linuxiga, aga ka nt Solarisega ning *BSD operatsioonisüsteemidega on tarkvaralise RAIDi kasutamine populaarne.

RAID skeemid

RAID massiiv ehk RAID lahendus märgivad üldiselt asjaolu, et kasutatakse RAID tehnoloogiat. RAID skeemiks ehk RAID lülituseks nimetatakse seda, kuidas komponendid (nt füüsilised kõvakettad, üldisemalt plokk-seadmed) on kokku ühendatud, kõige levinumad on sellised skeemid

  • RAID1 (peegel, ingl. k. mirror) - skeemis saab osaleda n > 1 komponenti, kõigile kirjutatakse samad andmed. Maksimiseeritud on redundantsus, kirjutamine on võrreldav üksikule kõvakettale kirjutamisega, lugemine on n korda kiirem. Skeem on veel kasutatav kui on riknenud kõik peale ühe komponendi. Tavaliselt ühendatakse peeglisse kaks komponenti.
  • RAID0 (vööditud, ingl. k. stripe) - skeemis saab osaleda n > 1 komponenti, igale ühele kirjutatakse mingi osa andmetest. Maksimiseeritud on nii lugemise kui kirjutamise kiirus (4 x n), redundantsus on halvem kui üksikult kõvakettal. Skeem ei ole enam kasutatav kui peaks riknema kasvõi üks komponent.
  • RAID5 - skeemis saab osaleda n > 2 komponenti.
  • RAID10 - peegleid on kokku vööditud, n > 3
  • RAID01 - vööditud on ühendatud peeglisse, n > 3

Ettevalmistused

Tarkvaralise RAID massiivi kasutamiseks on mõttekas omada arvutis vähemalt kahte füüsilist kõvaketast, mis võiks olla sarnaste omadustega, kõige toredam kui nad oleks mahu ja nö tehnoloogilise põlvkonna mõttes sarnased, aga mitte sama tootaja omad. Sel põhjusel, et kui on muretsetud sama seeria kettad, siis on tõenäosus suhteliselt suur, et neil esinevad samad probleemid ja redundantsus ei ole nii hästi tagatud kui kahe erineva tootja puhul see olla võiks.

Harjutamise eesmärgil saab hästi hakkama ka ühe füüsilise kettaga, lihtsalt tuleb moodustada losetup programmiga failidele vastavad seadmed ning kasutada neid

# dd if=/dev/zero of=/data/disk-1.img bs=1024x1024 count=128
# losetup -f /data/disk-1.img
# fdisk /dev/loop0
Disk /dev/loop0: 134 MB, 134217728 bytes
255 heads, 63 sectors/track, 16 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/loop0 doesn't contain a valid partition table

Nii moodustatud seadme eemaldamine toimub öeldes

# losetup -d /dev/loop0

Üheks alternatiiviks harjutada on kasutada virtuaaliseerimistarkvara, nt VMware on selleks sobiv.

Tarkvara paigaldamine

Tänapäevased Linuxi distributsioonid sisaldavad vaikimisi tarkvaralise RAID kasutamise jaoks sobivat tuuma ning haldusutiliiti mdadm, http://cgi.cse.unsw.edu.au/~neilb/SoftRaid, mis on reeglina pakendatud kujul kättesaadav, näiteks Debiani puhul tuleb öelda

# apt-get install mdadm

Paigaldamise tulemusena on süsteemi lisatud

  • /sbin/mdadm - mdadm utiliit
  • /etc/default/mdadm - seadistusfail
  • /etc/mdamd/mdadm.conf - seadistusfail
  • /etc/init.d/mdadm - käivitusskript
  • /usr/share/initramfs-tools - initramfs skriptid
  • /lib/modules/2.6.26-2-amd64/kernel/drivers/md - tuuma moodulid

RAID haldamist lihtsustab, kui kasutada udev tarkvara seadmetega tegelemiseks, nt nii on vaikimisi Debian Lennis.

Kui on vajadus ise tuuma kompileerida, siis RAID jaoks vajalik osa asub 2.6 tuuma puhul sektsioonis

Device Drivers -> Multi-device support (RAID and LVM)

Lisaks on oluline, et tuumas sisalduksid nende kõvaketta kontrollerite draiverid, mille külge füüsilised kettad on ühendatud.

RAID1 skeemi moodustamine

Tarkvaralisi RAID lülitusi on kahte tüüpi

  • superplokke kasutavate komponentidega lülitused
  • ilma superplokkideta nn legacy lülitused

Üldiselt soovitatakse kasutada superplokkidega lülitusi, legacy lülitused on olemas peamiselt sel põhjusel, et mdadm tarkvara oleks tagasiühinduv oma eelkäijatega. Superbloki kasutamine tähendab seda, et iga lülituses sisalduva komponendi enda sees on spetsiaalselt selleks tarbeks reserveeritud kohas kirjas selle komponendi omadused sh millissesse lülitusse ta kuulub. Nende andmete alusel on tuumal võimalik vajadusel iseseisvalt komponendid ühendada kokku skeemideks ja seetõttu, et on tingimata RAID massiivi kasutamisel kasutaja seadistusfaili.

Samasugustele füüsilistele kõvaketastele vastavatest plokkseadmetest /dev/sda ja /dev/sdb RAID1 skeemi moodustamiseks tuleb öelda

# mdadm --create /dev/md0 -l raid1 -n 2 /dev/sda /dev/sdb

ning vaadates tulemust

# mdadm -Q /dev/md0
/dev/md0: 511.94MiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail.

ning detailsemalt

# mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Jan 29 21:30:56 2008
     Raid Level : raid1
     Array Size : 524224 (512.02 MiB 536.81 MB)
    Device Size : 524224 (512.02 MiB 536.81 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Jan 29 21:30:56 2008
          State : clean, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

Rebuild Status : 14% complete
 
         UUID : 314b8be6:785cf466:7616d059:8f0dcbd5 (local to host mpath.auul)
       Events : 0.1

  Number   Major   Minor   RaidDevice State
     0       8        0        0      active sync   /dev/sda
     1       8       16        1      active sync   /dev/sdb

Kusjuures on näha, et toimub peegli ühe poole teise vastu sünkroniseerimine, millest on valmis 14%.

Komponentide omadusi saab küsida võtmega -E, näiteks selliselt

# mdadm -E /dev/sda
/dev/sda:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 314b8be6:785cf466:7616d059:8f0dcbd5 (local to host mpath.auul)
  Creation Time : Tue Jan 29 21:30:56 2008
     Raid Level : raid1
    Device Size : 524224 (512.02 MiB 536.81 MB)
     Array Size : 524224 (512.02 MiB 536.81 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Tue Jan 29 21:31:12 2008
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : e73fa20c - correct
         Events : 0.2
 

    Number   Major   Minor   RaidDevice State
this     0       8        0        0      active sync   /dev/sda

   0     0       8        0        0      active sync   /dev/sda
   1     1       8       16        1      active sync   /dev/sdb

kui

  • UUID numbri 314b8be6:785cf466:7616d059:8f0dcbd5 järgi teada, et komponent /dev/sda kuulub skeemi /dev/md0

Peale skeemi moodustamist saab skeemi kohe kasutama asuda. Arvutis, kus töötab RAID lahendus ei tööta otseselt sellega seotud deemonit kuigi sõltuvalt kasutusel olevatest skeemidest esinevad vastavad protsessid, nn tuuma lõimed, mille eest hoolitseb tuum.

Töötava skeemi kohta saab küsida andmeid ka öeldes

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sda1[0] sdb1[1]
      524224 blocks [2/2] [UU]
      
unused devices: <none>

Kui massiivi komponentidena kasutada fdisk partitsioone, tuleb tüübina kasutada fd (Linux raid autodetect). RAID kasutamise seisukohast ei ole partitsiooni tüüp oluline, kuid teoreetiliselt peaks tuum automaatselt võtma kasutusele ainult fd tüüpi massiivid, praktiliselt tundub, et massiivid võetakse kasutusele igal juhul.

Skeemi käivitamine ja seiskamine

Peale skeemi moodustamist on skeem kasutamiseks valmis, öeldakse, et töötavas olekus. Skeemi saab viia mitte-töötavasse olekusse käsuga

# mdadm -S /dev/md0
mdadm: stopped /dev/md0

Olemasoleva ehk seadistatud ja mitte-töötavas olekus skeemi töötavasse olekusse viimiseks tuleb öelda

# mdadm -A /dev/md0 /dev/sda /dev/sdb
mdadm: /dev/md0 has been started with 2 drives.

Skeemi saab käivitada ka näidates ära RAID seadme UUID väärtuse

# mdadm -A /dev/md0 --uuid 314b8be6:785cf466:7616d059:8f0dcbd5
mdadm: /dev/md0 has been started with 2 drives.

Seadistusfail mdadm.conf

mdadm kasutab Debian Lennis seadistusfaili /etc/mdadm/mdadm.conf kuigi see on praktiliselt vajalik ainult keerulisematel juhtumitel, vaikimisi ühendab tuum arvuti käivitamisel kasutada olevad RAID massiivid korrektselt kokku.

Eeltoodud RAID seadistusi sobib ilmutatud kujul seadistusfailis esitada selliselt

DEVICE /dev/sda /dev/sdb
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=314b8be6:785cf466:7616d059:8f0dcbd5

et tuleb muudustada eelnevalt RAID skeemiks konfigureeritud seadmetest /dev/sda ja /dev/sdb näidatud UUID väärtusega massiiv.

Kusjuures teise rea esitab käsk

# mdadm --detail --scan
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=314b8be6:785cf466:7616d059:8f0dcbd5

Seadistufail lihtsustab kirjeldatud massiivi kasutamist, nt siis piisab massiivi käivitamiseks öelda

# mdadm -A /dev/md0

Skeemi kustutamine ja seadmete vabastamine

Skeemi kustutamine ja seadmete vabastamine, nt selleks, et saada seadmeid mõnes muus skeemis kasutada, tuleb neid seadmeid sisaldav skeem esmalt peatada öeldes

# mdadm -S /dev/md0
mdadm: stopped /dev/md0

ning kustutada komponentidel superblokid

# mdadm --zero-superblock /dev/sda
# mdadm --zero-superblock /dev/sdb

Seejärel saab neid seadmeid kasutada mujal, arusaadavalt kaasneb sellega vastaval skeemil olnud andmete hävinemine.

Kui töötavas skeemis kasutuses olevaid seadmeid püüda kasutada mõnes muus skeemis, annab arvuti sellise veateate

# mdadm --create -l raid0 -n 2 /dev/md0 /dev/sda /dev/sdb
mdadm: Cannot open /dev/sda: Device or resource busy
mdadm: Cannot open /dev/sdb: Device or resource busy
mdadm: create aborted

Kui aga mitte-töötavas skeemis olevaid seadmeid püüda kasutada mõnes muus skeemis, annab arvuti hoiatuse, aga lubab tegevusega edasi minna

# mdadm --create -l raid0 -n 2 /dev/md0 /dev/sda /dev/sdb
mdadm: /dev/sda appears to be part of a raid array:
    level=raid1 devices=2 ctime=Tue Jan 29 22:21:12 2008
mdadm: /dev/sdb appears to be part of a raid array:
    level=raid1 devices=2 ctime=Tue Jan 29 22:21:12 2008
Continue creating array? 

Kui eelnevalt oleks vastavate komponentide superblokid kustutatud, siis ei oleks selliseid hoiatusi esitatud.

Skeemi kasutamine

Moodustatud plokkseadet /dev/md0 saab kasutada nagu tavalist kõvaketast, näiteks fdisk või parted abil moodustada sinna partitsioonid või lvm abil voluumid ning seejärel failisüsteemid. Näiteks parted programmi abil seadmega tutvumiseks tuleb öelda

# fdisk /dev/md0 -l

Disk /dev/md0: 512 MB, xxx bytes
2 heads, 4 sectors/track, 1000016 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x8d6aab13

    Device Boot      Start         End      Blocks   Id  System
/dev/md0p1               1      488282     1953126   83  Linux
/dev/md0p2          488283     1000016     2046936   83  Linux

kus

  • partitsioonide nimed esinevad kujul /dev/md0p1 ja /dev/md0p2

RAID0 skeemi moodustamine

RAID0 skeemi moodustamine toimub käsuga

# mdadm --create /dev/md1 -l raid0 -n 2 /dev/sdc /dev/sdd --auto=yes

Võtme --auto=yes kasutamisel moodustatakse vajadusel skeemi tekitamisel /dev/md1 seade.

RAID5 skeemi moodustamine

RAID5 skeem koosneb kolmest või enamast plokkseadmest, nt neljast

 # mdadm --create /dev/md0 -l raid5 -n 4 /dev/sdb /dev/sdc /dev/sdd /dev/sde 
 mdadm: array /dev/md0 started.

RAID10 skeemi moodustamine

RAID10 skeem koosneb kahest peeglist, mis on omavahel stripe'i lülitatud, moodustamine toimub kahe sammuna, esmalt moodustatakse peeglid

# mdadm --create /dev/md0 -l raid1 -n 2 /dev/sda /dev/sdb --auto=yes
# mdadm --create /dev/md1 -l raid1 -n 2 /dev/sdc /dev/sdd --auto=yes

ja seejärel ühendatakse peeglid stripe'i

# mdadm --create /dev/md2 -l raid0 -n 2 /dev/md0 /dev/md1 --auto=yes

Et sellise skeemi kasutuselevõtmine toimuks automaatselt, sobib kasutada sellise sisuga seadistusfaili

DEVICE /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/md0 /dev/md1
ARRAY /dev/md2 level=raid0 num-devices=2 UUID=12348be6:785cf466:7616d059:8f0dcbd5

kus

  • DEVICE - loetleb kõik viisil või teisel kasutuses olevad RAID komponendid
  • ARRAY - kirjeldab seadme UUID väärtuse, praktiliselt tundub, et see rida ei ole vajalik

Sellise RAID10 skeemi heaks omaduseks on suhteliselt hea kiirus ning kõrge redundantsus, maksimaalselt võib minna katki kuni kaks ketast tingimusel, et nad on erinevatest peeglitest. Samas kasutatav maht on kaks korda väiksem füüsiliste komponentide mahust.

Hot spare kasutamine

Hot spare kasutamine on võimalik selliste RAID skeemide puhul, kus on olemas redundantsus, nt RAID1 või RAID5. Kui töö ajal peaks üks komponent riknema, siis tarkvaraline RAID hoolitseb automaatselt selle eest, et skeemis riknenud kompoent asendatakse hot-spare'iga. Näiteks kahe peeglisse lülitatud ja ühe hot spare seadmega skeemi moodustamine toimub selliselt

# mdadm --create /dev/md1 -l raid1 -n 2 -x 1 /dev/sda /dev/sdb /dev/sdc

Olemasolevale skeemile saab lisada hot spare selliselt

# mdadm -a /dev/md0 /dev/sdd 
mdadm: added /dev/sdd

ning eemaldada

#  mdadm -r /dev/md0 /dev/sdc
mdadm: hot removed /dev/sdc

kusjuures lisamine ja eemaldamine võib toimuda ka skeemi töötamise ajal. Arusaadavalt ei saa skeemist eemaldada rohkem seadmeid, kui skeemi töötamiseks on minimaalselt tarvis.

Mitte-redundantses olekus redundantse skeemi moodustamine

Kui mingil põhjusel on tarvis moodustada redundantne skeem, aga parasjagu ei ole olemas kõiki komponente, siis tuleb käsureal puudu olevate seadmete nimede kohal kasutada parameetrit 'missing'. Näiteks moodustame ühe poolega peegli

# mdadm --create -l raid1 -n 2 /dev/md0 /dev/sda missing

Kui sellisesse skeemi lisada võtmega -a seade juurde, siis toimub automaatselt andmete sünkroniseerimine.

Komponendi riknenud olekusse märkimine

Näiteks haldusprotseduuride kontrollimise eesmärgil võib olla kasulik läbi proovida, kuidas süsteem reageerib RAID skeemi komponendi riknemisele. Ilma midagi füüsiliselt rikkumata saab loogiliselt märkida võtmega -f seadme riknenuks

# mdadm /dev/md0 -f /dev/sda
mdadm: set /dev/sda faulty in /dev/md0

Kui tegu on redundantse skeemiga, siis selliseks märgitud komponendi skeemi tagasi ühendamiseks tuleb ta järgnevalt eemaldada ning siis lisada, seejärel toimub andmete sünkroniseerimine ja taastub esialgne olukord

# mdadm /dev/md0 -r /dev/sda
mdadm: hot removed /dev/sda
# mdadm /dev/md0 -a /dev/sda
mdadm: re-added /dev/sda

Viimase tegevusega kaasnevad dmesg'is sellised teated, kust on muu seas näha, et andmete sünkroniseerimine toimub maksimaalselt kiirusega 200 000 KB/sec

md: bind<sdb>
RAID1 conf printout:
--- wd:1 rd:2
disk 0, wo:0, o:1, dev:sda
disk 1, wo:1, o:1, dev:sdb
md: recovery of RAID array md1
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
md: using 128k window, over a total of 966751424 blocks.
...
md: md1: recovery done.
RAID1 conf printout:
--- wd:2 rd:2
disk 0, wo:0, o:1, dev:sda
disk 1, wo:0, o:1, dev:sdb

RAID1 parandamine

Kui RAID1 lülituses on komponent riknenud, siis reeglina on süsteem kasutatav, kuid riknenud komponent tuleks asendada töötavaga, et taastada süsteemi andmekandja redundantsus. Peale sobiva suurusega füüsilise seadme asendamist tuleb süsteemis öelda nt

# mdadm /dev/md1 -a /dev/sdc2

Seejärel ehitatakse peegel üles

# mdadm -D /dev/md1
/dev/md1:
        Version : 00.90
  Creation Time : Sun Dec 21 12:38:49 2008
     Raid Level : raid1
     Array Size : 966751424 (921.97 GiB 989.95 GB)
  Used Dev Size : 966751424 (921.97 GiB 989.95 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Thu Apr 22 00:32:46 2010
          State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 1% complete

           UUID : 8d2e9ec5:29cadfbb:42a83fca:1e6f8c97
         Events : 0.3626790

    Number   Major   Minor   RaidDevice State
       0       8       18        0      active sync   /dev/sdb2
       2       8       34        1      spare rebuilding   /dev/sdc2

Lisaks on näha progressi öeldes

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdc2[2] sdb2[0]
      966751424 blocks [2/1] [U_]
      [>....................]  recovery =  1.7% (17303488/966751424) finish=220.9min speed=71624K/sec
      
unused devices: <none>

Operatsioonisüsteemi alglaadimine RAID1 skeemilt

Eelmistes punktides on keskendutud RAID kasutamisele käsitlemata, kuidas seejuures toimub arvuti alglaadimine, st on eeldatud, et arvuti töötab nö tavalistel seadmetel asuvate /boot ja / failisüsteemidega. Kui arvuti /boot ja / failisüsteemid asuvad samuti RAID1 lülituses, siis tagab see täiendava redundantsuse. Tehniliselt peab ainult /boot failisüsteem olema RAID1 lülituses ja juurfailisüsteem võib olla suvalises RAID lülituses, mida parasjagu kasutatav initramfs toetab.

Füüsilisi kõvakettaid /dev/sda ja /dev/sdb kasutav RAID1 skeemilt töötavate /boot ja / failisüsteemidega arvuti näeb välja nt selline

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              2.9G  908M  1.8G  34% /
tmpfs                 503M     0  503M   0% /lib/init/rw
udev                   10M  600K  9.5M   6% /dev
tmpfs                 503M  4.0K  503M   1% /dev/shm
/dev/md0              122M   24M   92M  21% /boot

kus

  • /boot - /dev/md0 seade koosneb fdisk partitsioonidest /dev/sda1 ja /dev/sdb1
  • swap - /dev/md1 seade koosneb fdisk partitsioonidest /dev/sda2 ja /dev/sdb2
  • / - /dev/md2 seade koosneb fdisk partitsioonidest /dev/sda3 ja /dev/sdb3

GRUB alglaadijaga saab RAID1 skeemilt töötavat süsteemi käivitada.

Sellist süsteemi saab tekitada kahel viisil

  • operatsiooni paigaldamise käigus eeldusel, et installer seda võimaldab
  • nö tavaliselt töötava süsteemi migreerides

Töötava süsteemi migreerimine RAID1 skeeme kasutavatele failisüsteemidele

Olgu lähtepunktiks arvuti, millel on selline kõvakettakasutus

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              2.9G  908M  1.8G  34% /
tmpfs                 503M     0  503M   0% /lib/init/rw
udev                   10M  600K  9.5M   6% /dev
tmpfs                 503M  4.0K  503M   1% /dev/shm
/dev/sda1              122M   24M   92M  21% /boot

kusjuures

  • /dev/sda1 - /boot failisüsteem
  • /dev/sda2 - saaleala
  • /dev/sda3 - juurfailisüsteem
  • /dev/sdb - lisaks on süsteemis teine füüsiline seade, mis on samasugune kui /dev/sda

RAID1 kasutamiseks peab olema süsteemi paigaldatud mdadm tarkvara, kusjuures initramfs ei vaja eraldi seadistamist Debian Lenny puhul.

/dev/sdb seadme ettevalmistamine

/dev/sdb seadme partisioneeritakse täpsel selliselt nagu seade /dev/sda, kusjuures failisüsteemide tüübiks määratakse fd nt programmiga fdisk, sfdisk või parted, tulemus on selline

# fdisk /dev/sdb -l
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            1          24      192748+  fd  Linux raid autodetect
/dev/sdb2           25          86      498015   fd  Linux raid autodetect
/dev/sdb3           87         522     3502170   fd  Linux raid autodetect

mdadm seadmete ettevalmistamiseks tuleb öelda, esialgu koosnevad RAID skeemid ainult ühes komponendist

# mdadm --create -l raid1 -n 2 /dev/md0 missing /dev/sdb1
# mdadm --create -l raid1 -n 2 /dev/md1 missing /dev/sdb2
# mdadm --create -l raid1 -n 2 /dev/md2 missing /dev/sdb3

Tulemus on selline

# cat /proc/mdstat 
Personalities : [raid1] 
md2 : active raid1 sdb3[1]
      3502080 blocks [2/1] [_U]
      
md1 : active raid1 sdb2[1]
      497920 blocks [2/1] [_U]
      
md0 : active raid1 sdb1[1]
      192640 blocks [2/1] [_U]
      
unused devices: <none>

Seejärel tuleb moodustada RAID seadmetele failisüsteemid ja saaleala

# mke2fs -j /dev/md0
# mkswap /dev/md1
# mke2fs -j /dev/md2

Failisüsteemide kopeerimine

Ühendada failisüsteemid külge, nt

Filesystem            Size  Used Avail Use% Mounted on
...
/dev/md2              3.3G   70M  3.1G   3% /tmp/md2
/dev/md0              183M  5.6M  168M   4% /tmp/md2/boot

ning kopeerida andmed

# cat /tmp/ef
/dev
/proc
/sys
/tmp
# rsync -avH --numeric-ids --exclude-from=/tmp/ef / /tmp/md2/

ning moodustada puuduvad kataloogid

# cd /tmp/md2
# mkdir dev proc sys tmp
# chmod 1777 tmp

Süsteemi alglaadimine RAID skeemidelt

Selleks, et süsteemi saaks alglaadida RAID seadmetelt tuleb

  • kohendada RAID seadmel asuvat /etc/fstab faili, see peab sisaldama
/dev/md2       /               ext3    errors=remount-ro 0       1 
/dev/md0       /boot           ext3    defaults        0       2 
/dev/md1       none            swap    sw              0       0 
  • kohendada /dev/sda1 failisüsteemis alglaaduri seadistusfaili /boot/grub/menu.list, mis peab sisaldama sektsiooni
title           md2
root            (hd1,0)
kernel          /vmlinuz-2.6.26-2-amd64 root=/dev/md2 ro        
initrd          /initrd.img-2.6.26-2-amd64

Seejärel saab süsteemi alglaadida RAID skeemidel asuvate failisüsteemidega, tulemuseks on

# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/md2              3.3G  558M  2.6G  18% /
/dev/md0              183M   22M  152M  13% /boot

RAID skeemidesse puuduvate komponentide lisamine

Kui süsteem töötab /dev/sdb kettal olevatelt RAID komponentidelt tuleb

  • muuta /dev/sda partitsioonide tüübiks fd
  • arvuti vajadusel rebootida ja käivitada uuesti RAID skeemidelt, et eelmises punktis tehtud muudatus kehtestada
  • lisada RAID skeemidesse ka vastavad /dev/sda ketta partitsioonid
# mdadm --add /dev/md0 /dev/sda1
# mdadm --add /dev/md1 /dev/sda2
# mdadm --add /dev/md2 /dev/sda3

Alglaaduri paigaldamine

Lõpuks tuleks paigaldada /dev/sda ja /dev/sdb kettale uuesti GRUB

# grub
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded. succeeded
 Running "install /grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
 Done.
grub> quit
# grub
grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
setup (hd1) 
grub> quit

Alglaaduri seadistusfail /boot/grub/menu.lst peab sisaldama

default         0
fallback        1
...

title           md2 sda
root            (hd0,0)
kernel          /vmlinuz-2.6.26-2-amd64 root=/dev/md2 ro
initrd          /initrd.img-2.6.26-2-amd64

title           md2 sdb
root            (hd1,0)
kernel          /vmlinuz-2.6.26-2-amd64 root=/dev/md2 ro
initrd          /initrd.img-2.6.26-2-amd64

kus

  • fallback 1 - kui default 0 valikuga ei õnnestu süsteemi alglaadida, proovitakse kasutada järgmist valikut

Testimine

Kui RAID1 skeemilt alglaaditud arvutiga tegeledaks nt ESX virtuaalserveri guestis, siis on sobib ühendada vaheldumisi üks ja teine ketas korraks küljest ära ning veenduda, et arvuti käivitub.

Märkused

  • RAID skeemidel ei pruugi kasutada otseselt failisüsteeme, vaid nt LVM'i.
  • Osutub, et KMV virtuaalset arvutit ei saa kasutada RAID1 testimiseks kuna grub saab seal kasutada ainult hd0 seadet.

Kasulikud lisamaterjalid

Üks teine suhteliselt eksootiline võimalus bootida arvutit, mille juurfailisüsteem asub RAID skeemil on bootida arvuti võrgust. St bootloader, tuum ja initramfs võetakse võrgust.

Monitooring

mdadm monitooring töötab kahel viisil

  • nn monitor režiimis töötav mdadm protsess, mis jälgib massiiivi ja saadab teateid
  • cron tööta regulaarselt käivitatav /usr/share/mdadm/checkarray skript

Massiivi tõrgete kohta teadete saatmine

mdadm programmi abil saab jälgida RAID skeemi tööd ning vajadusel korraldada näiteks e-posti aadressile või syslogi teadete saatmist. Monitooringu käivitamiseks peab sisalduma /etc/mdadm/mdadm.conf failis eposti aadress, nt

MAILADDR priit@loomaaed.tartu.ee

ning /etc/default/mdadm failis rida

# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true

Tulemusena töötab protsess

# ps aux | grep mdadm | grep -v grep
root 2180  0.0  0.1  12364   632 ?  Ss   Apr24   0:00 /sbin/mdadm --monitor \
  --pid-file /var/run/mdadm/monitor.pid --daemonise --scan --syslog

ja tõrke puhul saadetakse kasutajale nt sellise sisuga kiri

From: mdadm monitoring <root@loomaaed.tartu.ee>
To: priit@loomaaed.tartu.ee
Subject: Fail event on /dev/md1:loomaaed.tartu.ee
Message-Id: <20100425122119.D955D13D6C@loomaaed.tartu.ee>
Date: Sun, 25 Apr 2010 08:21:19 -0400 (EDT)

This is an automatically generated mail message from mdadm
running on loomaaed.tartu.ee

A Fail event had been detected on md device /dev/md1.

It could be related to component device /dev/sdb2.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sda1[0] sdb1[1]
      192640 blocks [2/2] [UU]
      
md1 : active raid1 sda2[0] sdb2[1](F)
      497920 blocks [2/1] [U_]
      
md2 : active raid1 sda3[0] sdb3[1]
      3502080 blocks [2/2] [UU]
      
unused devices: <none>

Massiivi kontrollimine

Vaikimisi käivitatakse Debiani puhul iga kuu esimesel pühapäeval checkarray utiliit

# grep -v ^# /etc/cron.d/mdadm 
57 0 * * 0 root [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ] && \
  /usr/share/mdadm/checkarray --cron --all --quiet

millega kaasneb logis teade

md: data-check of RAID array md1
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth \
 (but not more than 200000 KB/sec)for data-check.
md: using 128k window, over a total of 966751424 blocks.
md: md1: data-check done.
RAID1 conf printout:
 --- wd:2 rd:2
 disk 0, wo:0, o:1, dev:sdc2
 disk 1, wo:0, o:1, dev:sdb2

Täiendavat infot selle kohta on kirjas failis /usr/share/doc/mdadm/README.checkarray

Märkused

  • RAID skeemidega tegelemisel on abiks jälgida programmiga iostat moodustatud seadmete ja nende koosseisu kuuluvate komponentide tegevust. Näiteks jälgida, mis toimub peegli ühe poole teise vastu sünkroniseerimise ajal.
  • Informatiivne on jälgida kuidas RAIDi skeemi oleku muutumisel, nt hot spare lisamisel, see kajastub käsu mdadm -D /dev/seadmenimi väljundis.
  • RAID skeemi kasutusele võtmisel võiks programmidega top ja vmstat hinnata kui palju süsteemi ressurssi kulub RAID'iga tegelemisele.
  • Lisaks RAID'ile kasutatakse vahel järgnevust RAED - Redundant Array of Expensive Disks.
  • RAID skeeme sisaldava RAID skeemi puhul tuleb lisada /etc/mdadm/mdadm.conf failis DEVICE reale samuti komponentidele vastavad RAID seadmed, nt /dev/md1, /dev/md2
  • Kui arvutis on mitu kõvakettakontrollerit, siis vahel võib see asjaolu põhjustada segadust, millised seadmenimed kõvakettad igal boodil omandavad. Üks võimalik viis olukorda kontrollida on eemaldada ramdiskist kõik draiverid pealt ühe kontrolleri oma. Muude draiverid loetakse sisse juba arvuti bootimise käigus lokaalsest failisüsteemist. Draiveri eemaldamine ramdiskist võiks toimuda liigutades draiveri /lib/modules kataloogist ajutiselt ära, moodustades mkinitramfs abil ramdiski ning seejärel liigutades tagasi.
  • Üks võimalik mdadm kasutusjuht võiks olla ka failisüsteemi, õigemine vastava plokkseadme kloonimine. Seda saab korraldada redundantsesse RAID skeemi komponentide juurde ja lahti ühendades.
  • Kui RAID komponendina kasutada füüsilise kõvaketta partitsiooni, nt /dev/sdc2, siis on sobiv valida partitsiooni tüübiks fd (Linux raid autodetect)
  • RAID ja multipath ei leia selles mõttes otseselt koos kasutamist, kuna RAID kasutab mitmeid erinevaid füüsilisi seadmeid, aga multipath teeb operatsioonisüsteemile kättesaadavaks erinevate nimedega sama füüsilise seadme
  • Kui RAID skeemi komponendi lülitamisel öeldakse
mdadm: Cannot open /dev/sdc2: Device or resource busy

tasub kontrollida, et nt mingil põhjusel ei ole multpath võtnud seadet kasutusele

# multipath -ll
mpath7 (SATA_ST31000340NS_9QJ04S8Y) dm-14 ATA     ,ST31000340NS  
[size=932G][features=0][hwhandler=0]
\_ round-robin 0 [prio=1][active]
 \_ 2:0:0:0 sdc 8:32  [active][ready]

Kasulikud lisamaterjalid