DocRev 2.0 2018-06-09 / Arto
Jääskeläinen
Software RAID
--- Ubuntu
Johdanto
SoftaRAID: n etuna on riippumattomuus laitteista. Jos kone hajoaa voi levyt siirtää toiseen koneeseen. Tuo ei välttämättä onnistu käytettäessä levyohjaimiin integroitua RAIDia tai välimuotoa jossa osa koodista on levyohjaimessa ja osa softana. RAIDin asentaminen softana Ubuntuun / Linux Minttiin ei ole tolkuttoman monimutkaista.
Mitä tarvitaan
Lähtötilanteeksi tässä oletetaan valmiiksi asennettu kone jossa systeemilevyllä on jo toimiva Ubuntu/Linux Mint/vastaava ja RAIDia varten on erikseen levyt. Tässä esimerkissä käsittelen vain RAID5 toteutusta 4 levyllä jotka yhdessä muodostavat RAID-pakan. Nämä 4 levyä ovat liitetty tavanomaiseen SATA-ohjaimeen. Tässä 4 levyn tapauksessa hyötytilaksi saadaan 3 levyn määrä ja vikasietoisuus yhden levyn rikkoutumisen varalta. Malli on helposti sovellettavissa muihinkin levymääriin ja RAID-tasoihin.
Toimintaperiaate
Toiminnan tekninen idea on siinä että RAID-pakan koko levytilasta muodostetaan uusi laite ”/dev/md0” joka näyttää koko pakasta hyödyksi jäävän tilan yhtenä isona levynä joka on myös vikasietoinen.
Asennus
Asennus on täysin päätetyöskentelyä. Asennuksessa tarvitaan osiointiohjelmia jotka osaavat GPT-osiotaulun käsittelyn kuten ”gdisk” ja ”parted”. Jälkimmäinen löytyy yleensä valmiina koneesta mutta ”gdisk” enimmäkseen ei eli asennetaan se. Tarvitset hieman näiden ohjelmien käytön osaamista. Lisäksi tarvitaan ”mdadm” ohjelma RAID-määritysten tekoon.
•sudo apt-get install gdisk
•sudo apt-get install mdadm
1) Valmistellaan kukin RAID-pakkaan tuleva levy ”gdisk” ja/tai ”parted” ohjelmilla. Määritetään:
•Osio 2048---> levyn loppu
•Osion tyypiksi FD00 (=Linux RAID)
•Osion nimeksi sopiva selitys esim. RAID5_hd1, RAID5_hd2, jne.
2) Määritellään RAID-pakan rakenne ”mdadm” ohjelmalla.
•sudo mdadm --create /dev/md0 --level=5 --raid-device=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 --verbose
Yllä määritetään RAID-taso 5, levyjä 4 kpl ja pakkaan kuuluvien laitteiden nimet. Tarkasta kuitenkin ennen tätä että nuo laitenimet ovat oikeat ja tilanteesi mukaiset. Ei ole ainutlaatuista jos levyjen laitenimet ovatkin eri järjestyksessä kuin kuvittelit. Ylläoleva rivi on esimerkki.
Levyjen synkronointi alkaa heti ja kestää useita tunteja yleensä. Voit seurata etenemistä:
•watch -d cat /proc/mdstat
3) Kun valmista voit kokeilla
•sudo mdadm --examine --scan
ARRAY /dev/md/0 metadata=1.2 UUID=ff3c3b0b:3165c80f:cde8ddab:3574773e name=fs1:0
Ja tallettaa tuon tulosteen /etc/mdadm/mdadm.conf tiedoston loppuun:
•sudo bash -c 'mdadm --examine --scan >> /etc/mdadm/mdadm.conf'
4) Päivitä ”initramfs” jotta pakka latautuu oikein myös koneen käynnistyksen jälkeen:
•sudo update-initramfs -u
Jos unohdit tämän vaiheen niin huomaat ongelman myöhemmin mahdollisesti ”/dev/md126” tai ”/dev/md127” tiedostoina vaikka RAID-laitteen pitäisi näkyä nimellä ”/dev/md0” kun kaikki on hyvin. Käynnistä kone uudestaan ja varmista että ”/dev/md0” on olemassa.
5) Formatoi pakka
•sudo mkfs.ext4 /dev/md0
Huomaa että nykyään formatointi on kaksiosainen. Tämä näkyvä vaihe jonka teet tekee osan yksi päästäen nopeasti ”loppuun”. Taustalla käynnistyy kuitenkin formatoinnin loppuun suoritus vasta siinä vaiheessa kun levypakka mountataan tuolla hieman myöhemmin. Tämä kakkosvaihe vie aikaa. Tiedät että toinen vaihe on käynnissä kun näet ”ext4lazyinit” nimisen prosessin käynnissä.
Lisätietoja löydät hakutermillä ”ext4 lazy init” Googlesta.
6) Luo ”mount point”
•sudo mkdir -p /mnt/md_0
7) Katso UUID tunnus RAID-pakallesi
•sudo blkid /dev/md0
/dev/md0: UUID="29cdc9c5-52a0-45c3-bef0-99497c5c53b6" TYPE="ext4"
ja määritä ”/etc/fstab”: iin rivi sille korvaten alla olevassa ”sinun_UUID” sillä oikealla:
•sudo bash -c 'echo UUID=sinun_UUID /mnt/md_0 ext4 errors=remount-ro 0 1 >> /etc/fstab'
8) Tarkasta että kaikki näkyy oikein ja selitystekstit osioiden kohdalla löytyvät. Tässä esimerkki:
•sudo parted -l
Model: ATA WD5003ABYX-88 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
3 17,4kB 1049kB 1031kB BIOS boot partition bios_grub
1 1049kB 500GB 500GB ext4 Linux filesystem
2 500GB 500GB 64,0MB linux-swap(v1) Linux swap
Model: ATA TOSHIBA DT01ACA2 (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2000GB 2000GB RAID5_hd1 raid
Model: ATA TOSHIBA DT01ACA2 (scsi)
Disk /dev/sdc: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2000GB 2000GB RAID5_hd2 raid
Model: ATA TOSHIBA DT01ACA2 (scsi)
Disk /dev/sdd: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2000GB 2000GB RAID5_hd3 raid
Model: ATA TOSHIBA DT01ACA2 (scsi)
Disk /dev/sde: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2000GB 2000GB RAID5_hd4 raid
Model: Linux Software RAID Array (md)
Disk /dev/md0: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 6001GB 6001GB ext4 RAID5_array raid
Jotain hämärää, ohjeessa vikaa tai jokin hankaluus ?
Viallisen levyn uusiminen
Kun gnome-disks (eli Ubuntun "Levyt" -ohjelma) näyttää levyn kunnoksi tämän, on levyn uusinta edessä:
ÄLÄ tee kuten itse tein: Irrotin risan
levyn koneesta ja laitoin uuden levyn tilalle.
Käynnistyksen virheessä ohitin levypakan mounttauksen
painamalla "S". Määrittelin uuden levyn samaan
tapaan gdisk: in avulla kuin yllä on ohjeessa tehty. Sujui
normaaliin tapaan mutta:
Seurauksena oli tilanne, että ehjä osa levypakkaa ei enää
käynnistynytkään ja en saanut pienellä temppuilullakaan
sitä enää käyntiin että olin päässyt synkronoimaan datan
uudelle levylle. Kyllä, googlen tietämät
lukemattomat RAID5-ohjeet Ubuntulle kokeiltiin ja eivät
auttaneet. Erilaiset käskyt käynnistää vain ehjät levyt
kaatuivat lopulta I/O-virheeseen!
VIRHEENI oli ottaa viallinen levy ulos ilmoittamatta sitä
ennen RAID: lle tuosta toimesta. Siispä käännös
takaisin ja viallinen levy koneeseen takaisin.
Kaikki käynnistyi aivan normaalisti ja kaikki tallessa
edelleen.
Tee mieluummin näin
Noista kuvista yllä näkyy, että viallinen
levyni on /dev/sdd1. Ilmoitetaan siis RAIDille tuo
vialliseksi:
sudo
mdadm /dev/md0 --fail /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md0
sudo
mdadm /dev/md0 --remove /dev/sdd1
Kurkistetaan tilanne:
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Feb 4 17:46:56 2015
Raid Level : raid5
Array Size : 5860145664 (5588.67 GiB 6000.79 GB)
Used Dev Size : 1953381888 (1862.89 GiB 2000.26 GB)
Raid Devices : 4
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Jun 9 10:04:22 2018
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : fs1:0 (local to host fs1)
UUID : ff3c3b0b:3165c80f:cde8ddab:3574773e
Events : 212
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 0 0 2 removed
4 8 65 3 active sync /dev/sde1
sudo mdadm /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd
Synkronointi käynnistyy saman tien:
cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid5 sdd[5] sdc1[1] sdb1[0] sde1[4]
5860145664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UU_U]
[>....................] recovery = 0.7% (14191020/1953381888) finish=227.4min speed=142121K/sec
unused devices: <none>
Myöhemmin:
"PAKKA ON TAANTUNUT" ei tarkoita tässä
virhettä vaan että synkronointi on kesken eli data
kopioituu uudelle levylle.
Levypakka toimii aivan normaalisti samaan
aikaan. Jotain nelisen tuntia näyttäisi vievän
tuo synkkaus tällä kokoonpanolla.