Wissensdatenbank · Server Dedicated & VPS

Linux-Software-RAID verwalten (Teil II): Wiederherstellung nach einem Festplattenausfall

Zuletzt aktualisiert am 2019-02-03

Linux-Software-RAID verwalten (Teil II): Wiederherstellung nach einem Festplattenausfall

Dieser Artikel zeigt Ihnen, wie Sie Linux Software-RAID bei einem einzelnen Festplattenausfall wiederherstellen. Für die folgenden Beispiele gehen wir von diesen Annahmen aus:

  • Sie verwenden die aktuellste Linux-Version (CentOS 5+).
  • Sie haben zwei (2) Festplatten (sda, sdb), die an einen SAS/SATA-Controller angeschlossen sind, bei dem es sich nicht um Linux-Hardware-RAID handelt.
  • Sie verwenden Linux Software-RAID (MD).
  • Sie haben zwei (2) RAID1-Arrays, und zwar:
    • md0 (sda1+sdb1): /boot
    • md1 (sda2+sdb2): LVM
  • Eines Ihrer Arrays ist degradiert, aber weiterhin funktionsfähig (nur Ausfall eines einzelnen Mitglieds).
  • Sie haben vollen root-Zugriff.


Zustandsprüfung durchführen


Prüfen Sie den Zustand Ihrer Festplatten. Je nach Status Ihrer Festplatten sollten Sie die folgenden Ergebnisse sehen:

Fehlerfreies Array

cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0]

      511988 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]

      976247676 blocks super 1.1 [2/2] [UU]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

Beachten Sie, dass beide Arrays (md0, md1) die folgenden Merkmale aufweisen:

    1. Aktiv
    2. Enthalten zwei Mitglieder: sdb1[1], sda1[0]
    3. Zwei von zwei Mitgliedern sind aktiv: [2/2] [UU]

 

cat /proc/partitions

major    minor     #blocks  name

   8          0               976762584 sda

   8          1              512000 sda1

   8          2               976248832 sda2

   8         16             976762584 sdb

   8         17             512000 sdb1

   8         18            976248832 sdb2

   9          1              976247676 md1

 253        0              2097152 dm-0

 253        1              2097152 dm-1

   9          0               511988 md0

 

Beachten Sie, dass die folgenden Punkte zutreffen sollten:

    1. Beide physischen Festplatten sind vorhanden: sda, sdb
    2. Beide Arrays sind vorhanden: md0, md1
    3. Beide Festplatten haben dieselbe Größe: sda = sdb = 976762584
    4. Beide Festplatten sind auf dieselbe Weise partitioniert:
    • sda1 = sdb1 = 512000
    • sda2 = sdb2 = 976248832

 

Degradiertes Array


Ausfall einer einzelnen Partition (sda1)

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0](F)

     511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0]

     976247676 blocks super 1.1 [2/2] [UU]

     bitmap: 0/8 pages [0KB], 65536KB chunk

unused devices: <none>

 

Hinweis: Bei einem oder mehreren RAID-Arrays werden fehlende Mitglieder angezeigt: [2/1] [_U]


Ausfall der gesamten Festplatte (sda)

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

Bei einem schwerwiegenden Ausfall oder wenn eine Festplatte beim Neustart des Systems nicht initialisiert wird, kann die Festplatte selbst fehlen, wie in den folgenden Beispielen gezeigt.


Festplatte fehlt: 
/proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

Festplatte fehlt: /proc/partitions

major   minor    #blocks  name

   8        16             976762584 sdb

   8        17             512000 sdb1

   8        18             976248832 sdb2

   9          1             976247676 md1

 253        0              2097152 dm-0

 253        1             2097152 dm-1

   9         0              511988 md0

 

Eine defekte Festplatte entfernen

Geräte manuell als ‘failed’ markieren

Sie sollten ein Gerät nur dann manuell als fehlerhaft markieren, wenn eines seiner Arrays aufgrund eines Timeouts oder eines Lesefehlers auf einer der Partitionen in einen beeinträchtigten (degraded) Zustand geraten ist. Die physische Festplatte selbst sollte weiterhin einwandfrei funktionieren.

    • Werfen Sie einen Blick auf /proc/mdstat und stellen Sie sicher, dass alle Partitionen der defekten Festplatte als ‘faulty’ markiert sind.

ACHTUNG: Stellen Sie sicher, dass Sie nur die Partitionen als fehlerhaft markieren, die zur entsprechenden defekten Festplatte gehören (d. h. sda1/sda2 für sda und sdb1/sdb2 für sdb).

Setzen Sie sda1 und sda1 auf faulty

[root@freshinstall ~]# mdadm --manage /dev/md0 --fail /dev/sda1

mdadm: set /dev/sda1 faulty in /dev/md0

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --fail /dev/sda2

mdadm: set /dev/sda2 faulty in /dev/md1

 

    • Prüfen Sie, ob beide Partitionen derselben Festplatte als fehlerhaft gekennzeichnet sind.

Suchen Sie im cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

Defekte Geräte aus dem Array entfernen

Bevor ein Datenträger ersetzt werden kann, sollten die ausgefallenen Mitglieder aus den zugehörigen Arrays entfernt werden:

    • Ausgefallene Mitglieder entfernen:

[root@freshinstall ~]# mdadm --manage /dev/md0 --remove /dev/sda1

mdadm: hot removed /dev/sda1 from /dev/md0

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --remove /dev/sda2

mdadm: hot removed /dev/sda2 from /dev/md1

 

[root@freshinstall ~]# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

 

    • Löschen Sie unbedingt die RAID-Superblöcke, wenn Sie dieselben Partitionen später wieder zum Array hinzufügen oder anderweitig verwenden möchten:

 [root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda1

[root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda2

 

    • Sie können außerdem alle Daten auf dem Datenträger löschen, bevor Sie ihn entsorgen, sofern die physische Festplatte noch funktioniert:

dd if=/dev/zero of=/dev/sda bs=1M

ACHTUNG: Dieser Vorgang löscht alle Daten auf dem Gerät, das im Argument "of=" angegeben ist (/dev/sda im obigen Beispiel).

Hinweis: Dieser Vorgang kann einige Zeit in Anspruch nehmen.

 

Ersatzdatenträger hinzufügen

Der Ersatzdatenträger muss exakt genauso groß oder größer sein als der ausgefallene Datenträger. Sobald der Ersatzdatenträger in das System eingebaut wurde, protokolliert der Kernel etwa Folgendes:

dmesg | tail

sd 0:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)

sd 0:0:0:0: [sdc] 4096-byte physical blocks

sd 0:0:0:0: [sdc] Write Protect is off

sd 0:0:0:0: [sdc] Mode Sense: 00 3a 00 00

sd 0:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA


Prüfen Sie, ob das System das neue Laufwerk erkennt (sdc in diesem Fall):

cat /proc/partitions

major   minor    #blocks  name

 

   8        16             976762584 sdb

   8        17               512000 sdb1

   8        18             976248832 sdb2

   9         1               976247676 md1

 253        0               2097152 dm-0

 253        1              2097152 dm-1

   9         0                511988 md0

   8         0                976762584 sdc

Prüfen Sie den SMART-Status der neuen Festplatte:

smartctl -H /dev/sdc

smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build)

Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

 

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: PASSED

 

Partitionierung

Bevor Sie mit der Partitionierung beginnen, vergewissern Sie sich zunächst, dass die neue Festplatte nicht automatisch eingehängt wurde:

  mount | grep sdc

Es sollte keine Ausgabe erfolgen. Wird etwas angezeigt, müssen die entsprechenden Partitionen manuell ausgehängt werden, indem Sie Folgendes ausführen:

umount <partition>

Da das ursprüngliche System zwei gespiegelte Laufwerke exakt gleicher Größe verwendete, können Sie das funktionierende Laufwerk als Vorlage für die Partitionierung nutzen:

sfdisk -d -uS /dev/sdb | sfdisk -L -uS /dev/sdc

Checking that no-one is using this disk right now ...

OK

 

Disk /dev/sdc: 121601 cylinders, 255 heads, 63 sectors/track

Bisheriger Zustand:

Einheiten = Sektoren von 512 Bytes, beginnend bei 0

 

Device Boot    Start       End   #sectors  Id  System

/dev/sdc1   *      2048   1026047    1024000  fd  Linux raid autodetect

/dev/sdc2       1026048 1953523711 1952497664  fd  Linux raid autodetect

/dev/sdc3             0         -          0   0  Empty

/dev/sdc4             0         -          0   0  Empty

Neuer Zustand:

Einheiten = Sektoren von 512 Bytes, beginnend bei 0

 

Device Boot    Start       End   #sectors  Id  System

/dev/sdc1   *      2048   1026047    1024000  fd  Linux raid autodetect

/dev/sdc2       1026048 1953523711 1952497664  fd  Linux raid autodetect

/dev/sdc3             0         -          0   0  Empty

/dev/sdc4             0         -          0   0  Empty

Warnung: Partition 1 endet nicht an einer Zylindergrenze

Warnung: Partition 2 beginnt nicht an einer Zylindergrenze

Warnung: Partition 2 endet nicht an einer Zylindergrenze

Die neue Partitionstabelle wurde erfolgreich geschrieben

 

Die Partitionstabelle wird neu eingelesen ...

 

Wenn Sie eine DOS-Partition, beispielsweise /dev/foo7, erstellt oder geändert haben, verwenden Sie dd(1)

um die ersten 512 Bytes mit Nullen zu überschreiben:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1

(Siehe fdisk(8).)

 

Danach sollte Ihre neu partitionierte Festplatte angezeigt werden:

cat /proc/partitions

major   minor   #blocks  name

 

   8       16               976762584 sdb

   8       17                 512000 sdb1

   8       18              976248832 sdb2

   9        1                976247676 md1

 253        0              2097152 dm-0

 253        1                2097152 dm-1

   9        0                  511988 md0

   8        0                976762584 sdc

   8        1                   512000 sdc1

   8        2                 976248832 sdc2

 

Neue Geräte zum Array hinzufügen

 [root@freshinstall ~]# mdadm --manage /dev/md0 --add /dev/sdc1

mdadm: added /dev/sdc1

 

[root@freshinstall ~]# mdadm --manage /dev/md1 --add /dev/sdc2

mdadm: added /dev/sdc2

 

[root@freshinstall ~]# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdc1[2] sdb1[1]

      511988 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sdc2[2] sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      [>....................]  recovery =  0.1% (1618176/976247676) finish=160.6min speed=101136K/sec

      bitmap: 1/8 pages [4KB], 65536KB chunk

unused devices: <none>

Hinweis: Beide Arrays haben jeweils zwei aktive Mitglieder, und md1 wird gerade aktiv wiederhergestellt.

 

Bootloader neu installieren

Sobald die ausgefallene Festplatte ersetzt wurde, installieren Sie GRUB erneut im MBR der neuen Festplatte, damit sichergestellt ist, dass Sie von ihr booten können:

grub-install /dev/sdc

Installation finished. No error reported.

This is the contents of the device map /boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.

 

# this device map was generated by anaconda

(hd0)     /dev/sdc

(hd1)     /dev/sdb

 

← Alle Knowledgebase Artikel

Tell us what you need

Compare available plans or describe your workload so we can discuss a suitable starting point.