Sätta upp mjukvaru-RAID
LinuxWiki.se
I den här artikeln beskrivs hur du kan göra för att sätta upp en enkel mjukvaru-RAID. Det förutsätts att du har förståelse för hårdvara och åtminstone grundläggande kännedom om Linux-kommandon redan.
Utrustningen som ska RAID:as är 4 st SATA-diskar á 500 GB som tillsammans ska ge 1 TB speglat lagringsutrymme. Operativsystemet som används i guiden är Debian, så om du kör något annat system kan det finnas skillnader (framförallt är det väl pakethanteraren, apt-get, som skiljer).
Guiden är baserad på exakt hur jag gick tillväga för att skapa min RAID-array. Längst ner beskriver jag ett par problem som jag stötte på och hur jag gjorde för att lösa dem, därför är det viktigt att du läst och förstått allt innan du sätter igång!
Innehåll |
[redigera] Så här har jag gjort
Jag har valt att ha operativsystemet och alla program på en vanlig disk, utanför RAID-arrayen. Det ligger klart utanför denna guide.
RAID-arrayen har jag, efter att ha rådfrågat webben valt att sätta upp så här:
/dev/sda och /dev/sdb bildar tillsammans en RAID 1-array (de speglar varandra). /dev/sdc och /dev/sdd bildar ytterligare en RAID 1-array. Dessa båda arrayer kopplas ihop till en enda RAID 0-array (i RAID 0 delas datan upp mellan diskarna så att de tillsammans bildar en enda stor disk).
Det första jag gjorde var att partitionera diskarna med fdisk. Det är väldigt enkelt gjort:
$ fdisk /dev/sda n (ny partition) e (partitionen ska vara utökad) 1 (alla partitionerna ska i mitt fall vara den första på disken) [Enter]x2 (godkänn standardvärdena) w (skriv partitionen och avsluta)
Upprepa för alla fyra diskarna.
Nästa steg var att installera paketet mdadm som används för just RAID-hantering:
$ apt-get install mdadm
Jag fick ett par frågor av apt där mina svar utgick från dels att jag inte ska köra root-partitionen på RAID-systemet (det har jag valt att lägga på en annan disk) och dels att jag inte ännu har något RAID-system igång.
För att skapa systemet lät jag mdadm skapa de båda RAID 1-arrayerna, så här:
$ mdadm -Cv /dev/md1 -l1 -n2 /dev/sda /dev/sdb $ mdadm -Cv /dev/md2 -l1 -n2 /dev/sdc /dev/sdd
Vad flaggorna betyder kan du läsa i manualen för mdadm.
När detta var gjort var det dags att skapa RAID 0-arrayen:
$ mdadm -Cv /dev/md0 -l0 -n2 /dev/md1 /dev/md2
Nu när RAID-arrayen är skapad måste den ha ett filsystem. Efter lite läsande bestämde jag mig för XFS.
$ mkfs -t xfs -f /dev/md0
Det enda som är kvar nu är att montera filsystemet. Jag har inte själv bestämt exakt hur jag har tänkt använda det ännu, men bara för att testa att allt fungerar monterade jag det i /mnt/raid tills vidare:
$ mkdir /mnt/raid $ mount /dev/md0 /mnt/raid
Nu kan vi testa att det fungerar:
$ df -vhT
Om den nyligen monterade volymen syns med allt sitt lagringsutrymme så stämmer allt. Jag hade 932 GiB, helt enligt planerna.
[redigera] Problem efter att ha gjort allt enligt ovanstående
När jag senare startade om datorn lyckades jag inte få igång /dev/md0 igen. Genom att kika i /proc/mdstat ser jag att md1 och md2 är upptagna med att synkas, vilket beräknas ta drygt tre timmar:
$ cat /proc/mdstat
Morgonen därpå har jag försökt få igång md0 igen men får bara felmeddelanden. Jag bestämde mig därför för att återskapa md0 (det kan ju vara så att den ville ha md1 och md2 helt klara innan den satte ihop md0 - och nu är md1-2 klara). Jag stoppade md0 och byggde om den på nytt:
$ mdadm -S /dev/md0 $ mdadm -Cv /dev/md0 -l0 -n2 /dev/md1 /dev/md2
Nu fungerar allt som det ska, även efter en omstart. De data som jag skrivit till arrayen igår när jag testade fanns faktiskt kvar (ett par testmappar) så det verkar inte som att någonting har "gått sönder".
[redigera] Hitta fel
Kolla mdstat-filen för att få information om din array:
$ cat /proc/mdstat
Det här är en fullt frisk array:
Personalities : [raid0] [raid1]
md0 : active raid0 md1[0] md2[1]
976772864 blocks 64k chunks
md2 : active raid1 sdc[0] sdd[1]
488386496 blocks [2/2] [UU]
md1 : active raid1 sda[0] sdb[1]
488386496 blocks [2/2] [UU]
unused devices: <none>
Som tur är går det oftast lätt att laga en array och du kan göra det medan maskinen är igång och alla tjänster fortsätter som vanligt (dock med sämre diskprestanda).
[redigera] Försvunnen disk
I den här arrayen har en disk försvunnit eller plockats bort ur md2:
Personalities : [raid0] [raid1]
md0 : active raid0 md1[0] md2[1]
976772864 blocks 64k chunks
md2 : active raid1 sdc[0]
488386496 blocks [2/1] [U_]
md1 : active raid1 sda[0] sdb[1]
488386496 blocks [2/2] [UU]
unused devices: <none>
Laga genom att lägga till disken igen:
$ mdadm --add /dev/md2 /dev/sdd
Den återskapas automatiskt.
Om du får ett felmeddelande kan det vara så att du måste rensa bort all tidigare RAID-information från disken. Kör då följande innan du lägger in disken i din array igen:
$ mdadm --zero-superblock /dev/sdd
[redigera] Disk ur synk / trasiga data
Det vanligaste felet i en RAID-array är att diskarna kommer ur synk. Det händer lätt om man till exempel stoppar maskinen "den hårda vägen" utan att göra en snygg nedstängning (till exempel vid strömavbrott). Samma symptom får man om datat på en disk blivit korrupt. Så här kan det se ut när /dev/sdb är trasig:
Personalities : [raid0] [raid1]
md0 : active raid0 md1[0] md2[1]
976772864 blocks 64k chunks
md2 : active raid1 sdc[0] sdd[1]
488386496 blocks [2/2] [UU]
md1 : active raid1 sda[0] sdb[1](F)
488386496 blocks [2/1] [U_]
unused devices: <none>
Laga genom att plocka ut disken ur arrayen och sedan sätta in den igen:
$ mdadm --remove /dev/md1 /dev/sdb $ mdadm --add /dev/md1 /dev/sdb
[redigera] Flytta diskarna till ny maskin
Någon gång kanske det händer att hela din dator rasar samman. Kanske går moderkortet sönder, huset brinner ner och bara diskarna överlever etc. eller så känner du bara för att köpa lite nyare hårdvara. Hur flyttar du då diskarna?
Om du skapat din RAID-array på en kärna som är version 2.6 så är det enkelt. Då ha RAID-strukturen skrivits ner till var och en av diskarna som ingår i din array. Detta skrivs i ett så kallat "super block", ett eget område på disken (du tappar upp till 128 KB av diskytan på varje disk för detta block, men det är det värt). Därför är det bara att stoppa in diskarna i din nya dator, se till att ha drivrutiner för att läsa dem (brukar oftast finnas) och sedan är det egentligen klart - Linux-kärnan hittar och sätter ihop din array automatiskt*.
Inte nog med det, strukturen som skrivs ner är helt oberoende av vad diskarna kallas i systemet. Varje disk har istället fått ett unikt ID-nummer som lagrats på disken. Därför spelar det ingen roll om de kallas /dev/sda eller /dev/disks/bad_ass_mothafucker
*) Detta gäller i alla fall om du kör Debian med en standardkärna. Kör du en annan kärna måste du se till att ha md-modulerna laddade i kärnan. Om du vet mer om detta är det fritt fram att uppdatera artikeln med mer information.

