GNU/Linux >> Znalost Linux >  >> Linux

Jak vyměnit vadný pevný disk v softwarovém RAID systému Linux

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!


Linux
  1. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

  2. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  3. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  1. Jak namapovat zařízení /dev/sdX a /dev/mapper/mpathY ze zařízení /dev/dm-Z

  2. Co jsou soubory /dev/zero a /dev/null v Linuxu

  3. Jak kódovat base64 /dev/random nebo /dev/urandom?

  1. Jak zaměníte /dev/sda s /dev/sdb?

  2. /dev/sdb:Žádný takový soubor nebo adresář (ale /dev/sdb1 atd. existuje)

  3. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0