Tato příručka ukazuje, jak odebrat vadný pevný disk z pole RAID1 v systému Linux (softwarový RAID) a jak přidat nový pevný disk do pole RAID1 bez ztráty dat. Ke zkopírování schématu oddílů použiji gdisk, takže bude fungovat i s velkými pevnými disky s GPT (GUID Partition Table).
1 předběžná poznámka
V tomto příkladu mám dva pevné disky, /dev/sda a /dev/sdb, s oddíly /dev/sda1 a /dev/sda2 a také /dev/sdb1 a /dev/sdb2.
/dev/sda1 a /dev/sdb1 tvoří pole RAID1 /dev/md0.
/dev/sda2 a /dev/sdb2 tvoří pole RAID1 /dev/md1.
/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1
/dev/sdb selhal a my ho chceme nahradit.
2 Jak zjistím, že pevný disk selhal?
Pokud disk selhal, pravděpodobně v souborech protokolu najdete spoustu chybových hlášení, např. /var/log/messages nebo /var/log/syslog.
Můžete také spustit
cat /proc/mdstat
a místo řetězce [UU] uvidíte [U_], pokud máte degradované pole RAID1.
3 Odebrání vadného disku
Chcete-li odebrat /dev/sdb, označíme /dev/sdb1 a /dev/sdb2 jako neúspěšné a odstraníme je z příslušných polí RAID (/dev/md0 a /dev/md1).
Nejprve označíme /dev/sdb1 jako neúspěšné:
mdadm --manage /dev/md0 --fail /dev/sdb1
Výstup
cat /proc/mdstat
by měl vypadat takto:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Poté odebereme /dev/sdb1 z /dev/md0:
mdadm --manage /dev/md0 --remove /dev/sdb1
Výstup by měl být takto:
server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1
A
cat /proc/mdstat
by měl ukázat toto:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Nyní provedeme stejné kroky znovu pro /dev/sdb2 (který je součástí /dev/md1):
mdadm --manage /dev/md1 --fail /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[2](F)
24418688 blocks [2/1] [U_]
unused devices: <none>
mdadm --manage /dev/md1 --remove /dev/sdb2
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
24418688 blocks [2/1] [U_]
unused devices: <none>
Poté vypněte systém:
shutdown -h now
a vyměňte starý pevný disk /dev/sdb za nový (musí mít alespoň stejnou velikost jako starý – pokud je jen o pár MB menší než ten starý, pak přestavba polí selže).
4 Přidání nového pevného disku
Po změně pevného disku /dev/sdb spusťte systém.
První věc, kterou nyní musíme udělat, je vytvořit přesně stejné rozdělení jako na /dev/sda. Můžeme to udělat pomocí příkazu sgdisk z balíčku gdisk. Pokud jste gdisk ještě nenainstalovali, spusťte tento příkaz a nainstalujte jej na Debian a Ubuntu:
apt-get install gdisk
Pro distribuce Linuxu založené na RedHat, jako je CentOS, použijte:
yum install gdisk
a pro použití OpenSuSE:
yast install gdisk
Další krok je volitelný, ale doporučený. Abyste měli jistotu, že máte zálohu schématu oddílů, můžete použít sgdisk k zapsání schémat oddílů obou disků do souboru. Zálohu uložím do složky /root.
sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
V případě selhání můžete obnovit tabulky oddílů pomocí možnosti --load-backup příkazu sgdisk.
Nyní zkopírujte schéma oddílů z /dev/sda do /dev/sdb run:
sgdisk -R /dev/sdb /dev/sda
poté musíte náhodně rozdělit GUID na nový pevný disk, abyste zajistili, že jsou jedinečné
sgdisk -G /dev/sdb
Můžete běžet
sgdisk -p /dev/sda
sgdisk -p /dev/sdb
zkontrolovat, zda mají nyní oba pevné disky stejné rozdělení.
Dále přidáme /dev/sdb1 do /dev/md0 a /dev/sdb2 do /dev/md1:
mdadm --manage /dev/md0 --add /dev/sdb1
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2
Nyní budou obě pole (/dev/md0 a /dev/md1) synchronizována. Spustit
cat /proc/mdstat
abyste viděli, kdy je hotovo.
Během synchronizace bude výstup vypadat takto:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec
unused devices: <none>
Po dokončení synchronizace bude výstup vypadat takto:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
To je vše, úspěšně jste nahradili /dev/sdb!