Linux Soft RAID: Porovnání verzí
Řádek 164: | Řádek 164: | ||
== Logy, chyby a upozornění == | == Logy, chyby a upozornění == | ||
+ | |||
+ | == postřehy == |
Verze z 17. 6. 2013, 20:10
Obsah
Vytvoření soft RAIDu
Na Linuxu je nejběžněji pro operace s RAID polem používána aplikace mdadm, tento návod na vytvoření a provoz RAID pole je tudíž s použitím mdadm. Celý návod je psán pro Linux distribuci Debian.
Při instalaci systému
Vytvoření RAID pole při instalaci systému je celkem samovysvětlující, postup je popsán zde: Installing Debian Etch with Raid1 and LVM
Na běžícím systému
Pro příklad bereme situaci, že máme již nainstalovaný systém a další dva prázdné disky na kterých chceme vytvořit RAID pole typu 1 (RAID1) neboli zrcadlení.
Instalace mdadm
Pokud už ji v systému nemáme musíme si nainstalovat aplikaci mdadm:
apt-get update
apt-get install mdadm
Instalátor se nás zeptá co chceme v systému použít za pole, můžeme nechat základoní položku "all" ze začátku nejsou definovaná žádná pole, takže se nic nestane.
Příprava oddílů
Díle si na discích, zamýšlených pro vytvoření pole, připravíme oddíly tak jak je chceme, na to se dá použít aplikace fdisk, se kterou se dají nastavit oddíly velice přesně, s diskovým prostorem si lze hrát až na úroveň jednotlivých sektorů, ale není příliš uživatelsky přívětivá, je jednodušší použít cfdisk.
cfdisk (util-linux-ng 2.17.2) Disk Drive: /dev/sda Size: 251059544064 bytes, 251.0 GB Heads: 255 Sectors per Track: 63 Cylinders: 30522 Name Flags Part Type FS Type [Label] Size (MB) ------------------------------------------------------------------------------------------------- Pri/Log Free Space 1.05 * sda1 Primary Linux raid autodetect 9999.23 * sda2 Primary Linux raid autodetect 59999.52 * sda3 Primary Linux raid autodetect 180002.03 * Pri/Log Free Space 1050.19 * [ Help ] [ New ] [ Print ] [ Quit ] [ Units ] [ Write ]
Velikosti oddílů si vytvoříme podle úvážení, důležité je každému oddílu změnit typ na "Linux raid autodetect", v menu položka "Type", kde hodnota se použije "fd" což právě odpovídá zmíněnému Linux raid autodetect, nakonec uložíme změny položkou menu "Write" a potvrdíme, že opravdu chceme změny na disk uložit, data na disku budou samozřejmně ztracena.
Toto provedeme s oběma disky, oddíly vytváříme tak, aby na obou discích měly stejnou velikost, není to bezpodmínečně nutné, pole by využilo velikost nejmenšího z oddílů, ale proč mít oddíly různě velké, není k tomu důvod. Za druhé nevytváříme oddíly přes celý disk, ale necháme si na konci disku volné místo "pro únik", disky různých výrobců nebo různých řad disků u jednoho výrobce totiž nejsou na bajty stejně velké i když jsou označené stejnou velikostí např. 1TB, vždy si nechte ke konci disku alespoň pár desítek MB místa pro případnou výměnu za jiný disk, který by mohl být o nějaký ten bajt menší.
Příklad: výcuc z fdisk:
Disk /dev/sda: 251.0 GB, 251000193024 bytes Disk /dev/sdb: 251.1 GB, 251059544064 bytes
v obou případech by se mělo jednat o 250GB disk, ale velikost je rozdílná, jde i o stejného výrobce, pouze o jinou verzi disku: WD RE3 vs. WD RE4
Vytvoření pole
Berme v úvahu, že oddíly připravené pro pole jsou /dev/sda1 a /dev/sdb1, chceme vytvořit RAID1 ze dvou aktivních disků, žádný jako náhradní (spare) a pole se má jmenovat md0, provedeme to následovně:
mdadm -v --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
Pole se ihned začne vytvářet a my se můžeme podívat co se děje: http://wiki.hkfree.org/Linux_Soft_RAID#soubor_.2Fproc.2Fmdadm
Než synchronizace disku skončí upravíme konfigurační soubor /etc/mdadm/mdadm.conf, obohatíme ho o nově vytvořené pole a to to tak že info o RAID svazku přidáme do konfiguračního souboru:
mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm/mdadm.conf
Vytvoření FS nad polem
Nyní potřebujeme vytvořit na poli souborový systém, použijeme standardní a ověřený ext3:
mkfs -t ext3 /dev/md0
pozn.: Toto u velkých oddílů (např. 1TB a více) může trvat i někoik desítek minut RAID svazek je fyzicky přítomný v /dev/md/číslo svazku (simlink) nebo v /dev/mdxxx (hardlink)
Nyní provedeme reboot.
Připojení pole k adresáři
Poslední krok je upravit soubor /etc/fstab tak, aby se nám po restartu pole připojovalo do nějakého adresáře ve filesystému, bude na to potřeba několik kroků:
Podle nových pravidel, best practises v debianu, se disky připojujují přes jedinečný identifikátor zvaný UUID, je to z toho důvodu, že pojmenování, které vytváří udev se může měnit v závislosti na výměně HW, např. když je v systému jenom jeden disk (systémový) je tento disk označený jako /dev/sda, když do systému přidáme další dva disky, které budou HW "dříve" než disk systémový stane se to, že udev dva nové disky pojmenuje sda a sdb a dříve sytémový sda se bude jmenovat sdc atd.
Pro zjištění UUID našeho pole použijeme utilitu blkid:
blkid /dev/md0
/dev/md0: UUID="413186ec-5d99-403e-a6af-xxxxxxxxxxxxx" TYPE="ext3"
Řetězec UUID si zkopírujeme a jdeme na úpravu /etc/fstab, vytvoříme si adresář kam dané pole chceme připojit a zapíšeme to do fstab:
mkdir /mnt/raid1svazek
Do /etc/fstab přidáme:
UUID=413186ec-5d99-403e-a6af-xxxxxxxxxxxxx /mnt/raid1svazek ext3 defaults 0 2
Hodnoty defaults, 0 a 2 jsou klasické pro běžný datový svazek. Po každém rebootu měl být raid svazek připojen do adresáře /mnt/raid1svazek/
Nyní počkáme až se synchronizace disku dokončí a máme hotovo.
Úprava MBR
Aby nám systém naběhl i ze sekundárního disku je potřeba zkopírovat zavaděč a prvotní stage grubu i na druhý disk, zavaděč totiž není umístěn na zrcadleném oddílu a veškeré úpravy nebo změny v MBR nebo grubu se ukládají jenom na jeden disk, na primární, v našem modelovém případě na sda, je tedy ještě potřeba provést zkopírování obsahu začátku disku z primárního disku na sekundární:
dd if=/dev/sda of=/dev/sdb bs=512 count=2048
if= odkud má číst
of= kam má zapisovat
bs= kolik toho má zapsat [B]
count= kolikrát to má zapsat
kolik toho je potřeba zkopírovat poznáme podle toho kde začíná první sektor prvního oddílu, v fdisk se přepneme do modu zobrazovat sektory (command 'u') a necháme si vypsat oddíly (command 'p')
fdisk /dev/sda
Command (m for help): u
Changing display/entry units to sectors
Command (m for help): p
Disk /dev/sda: 251.1 GB, 251059544064 bytes
255 heads, 63 sectors/track, 30522 cylinders, total 490350672 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000498f2
Device Boot Start End Blocks Id System
/dev/sda1 2048 19531775 9764864 fd Linux raid autodetect
/dev/sda2 19531776 136718335 58593280 fd Linux raid autodetect
/dev/sda3 136718336 488284795 175783230 fd Linux raid autodetect
Zde je vidět, že první oddíl začíná na 2048. sektoru, takže zkopírujeme 512B x 2048 ze začátku diskového prostoru, úplně stejně by fungovalo 512x2048=1048576, tedy bs=1048576 count=1.
Pozor, nikdy nezadávat dd bez parametru count protože tím neřekneme kdy má skončit a ve výsledku by příkaz přepsal celý disk!
Sledování stavu pole
Zde máme prakticky dvě základní možnosti, buď pozorovat co se děje se všemi poli najednou, pokud jich máme více nebo máme k dispozici detailní informace o konkrétním poli.
soubor /proc/mdadm
Soubor /proc/mdadm obsahuje informace o tom co právě proces mdadm dělá vypsat si ho můžeme jednoduše přes concatenate (cat) nebo nechat vypisovat v pravidelném intervalu, to nám dá dobrý přehled o tom co se děje např. při synchronizaci pole:
watch -n 1 "cat /proc/mdadm"
toto nám bude vypisovat obsah souboru jednou za sekundu
mdadm detail
Detaily o konkrétním poli můžeme zístal jednou z funkcí aplikace mdadm a to:
mdadm --detail /dev/md0
Tímto dostaneme kompletní informaci o RAID svazku, jako je datum vytvoření, jeho level, velikost, stav a jaké fyzické oddíly obsahuje.
Pokročilé operace s RAID polem
Odebrání disku z pole
Pokud nastane situace, že potřebujeme z pole odebrat disk např. protože je disk vadný nebo jeden disk chceme vyměnit za jiný je dobré poli odebrání disku dát vědět předem, tzn. udělat "softcore" odebrání místo "hardcore" odebráním a to fyzickým odpojením disku z pole - samozřejmě i v takové případě by to pole mělo přežít bez újmy (to platí pro RAID levely pro které není odebrání disku likvidační jako RAID 1, 5, 6, 1+0, 0+1 apod.)
Odebrání disku z pole Odebrat konkrétní disk lze takto: