Linux Software Raid Upgrade

Eine schrittweise Anleitung, um ein Software RAID (in diesem Fall RAID-1) mit mdadm im laufenden Betrieb zu vergrößern:

Annahme:

Raid: /dev/md0

mdadm -D /dev/md0
...
...
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 65 1 active sync /dev/sde1

Unsere Platten sind also: sdb1, sde1

Empfehlung:

Ich rate dringend zu Einbaurahmen, um die Platten nicht nur komfortabel sondern vor allem SICHER im laufenden Betrieb ein- und auszubauen. Der Einbaurahmen sorgt nicht nur dafür, dass es zu keinen Kurzschlüssen bei den Kontakten kommt, sondern auch, dass man nicht aus versehen den anderen Platten zu nahe kommt!

1. Identifizieren der Platten

(siehe auch diesen Eintrag)

Wir prüfen die Kabel vom Mainboard zu den Festplatten. Die SATA Anschlüsse sind bei mir von 1 bis 6 nummeriert. Die Platte sdb hängt in meinem Fall am Port SATA2.

(Es empfiehlt sich, die Platten in der Reihenfolge im Gehäuse zu verbauen, wie sie auch angeschlossen sind. Dann weiß man immer, dass die 2. Platte in der Halterung die 2. Platte am Controller ist).

Wir prüfen das mit lshw:

...
        *-storage
             description: SATA controller
...
           *-disk:0
                description: ATA Disk
...
physical id: 0
bus info: scsi@0:0.0.0
...
           *-disk:1
                description: ATA Disk
                product: WDC WD20EFRX-68E
                vendor: Western Digital
                physical id: 1
                bus info: scsi@1:0.0.0
                logical name: /dev/sdb
...
*-disk:4
description: ATA Disk
product: WDC WD20EFRX-68E
vendor: Western Digital
physical id: 0.0.0
bus info: scsi@4:0.0.0
logical name: /dev/sde
...

Das deckt sich mit unseren Beobachtungen (sdb ist die 2. Platte, auch laut scsi bus info, sde ist die 5. Platte)

2. Austausch der Platten

Ab hier wird's kritisch. Wir tauschen die Platten im laufenden Betrieb, mit gemounteten Dateisystem. Sobald wir eine Platte entfernen ist unser RAID-1 "degraded", hat also nur noch eine Platte. Wenn während des Vorganges mit dieser Platte etwas passiert, dann haben wir ein Problem!

Deshalb unbedingt für ein Backup der Daten sorgen!

Die folgenden Punkte werden pro Platte durchgeführt! Wir beginnen mit /dev/sdb

2.1 Lösen der Platte aus dem RAID

Wir markieren die Platte als "Failed" und Entfernen Sie aus dem RAID

mdadm -f /dev/md0 /dev/sdb1
mdadm -r /dev/md0 /dev/sdb1

2.2 Entfernen der Platte aus dem System

Zur Sicherheit notieren wir den Host des SATA Controllers:

ls -al /sys/block/sdb

lrwxrwxrwx 1 root root 0 2015-10-27 09:24 /sys/block/sdb -> ../devices/pci0000:00/0000:00:11.0/host1/target1:0:0/1:0:0:0/block/sdb

Siehe dazu  diesen Eintrag

Wir fahren die Platte herunter

echo 1 > /sys/block/sdb/device/delete

Jetzt können wir die Platte ausbauen.

2.3 Installation der neuen Platte

Wir bauen die neue Platte ein. Diese sollte jetzt mit dem gleichen Buchstaben erkannt werden.

Wenn nicht, kann es sein, dass die Platte nicht aus mdadm entfernt wurde und dieser daher den Buchstaben noch reserviert hat. Eine nicht existierende Platte lässt sich aber nicht per mdadm -r enfernen. Statt dessen nutzt man mdadm -r /dev/md0 detached, um nicht mehr existente Platten aus der RAID-Definition zu löschen.
Dann muss man die Platte nochmals aushängen (zuerst per Software, dann physisch) und einhängen.

Wir legen mit gparted die Partition an, die den gesamten freien Platz belegt und bei einem Offset von 1MB beginnt. Dieses Offset ist dazu da, dass die Blöcke richtig aligned sind und kostst uns im Endeffekt wenige Kilobyte.

parted /dev/sdb
  mktable
    gpt
  print free                 # zeigt bei uns "2000GB"
  mkpart primary 1M 2000GB   # der oben angezeigte freie Platz
  print                # wir prüfen die fertige Partitionstabelle
  quit

2.4 Hinzufügen der neuen Platte ins RAID

mdadm --add /dev/md0 /dev/sdb1

mdadm beginnt sofort mit der Synchronisation der neuen "Spare" Platte. Den Status können wir mit

cat /proc/mdstat

überwachen.

Jetzt heißt es Warten, bis die Synchronisation abgeschlossen ist (in meinem Fall bei 500 GB ca. 80 Minuten pro Platte).

Wenn das erfolgt ist, wiederholen wir das ganze für die zweite Platte (/dev/sde)

3. Vergrößern des RAID

Wenn wie in unserem Fall größere Platten eingebaut wurden, will man die auch nutzen.

mdadm -D /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Mon Aug 16 21:01:26 2010
     Raid Level : raid1
     Array Size : 488383936 (465.76 GiB 500.11 GB)
  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Tue Oct 27 15:21:10 2015
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : ad7a32a2:aef07a1c:abf10df6:61138df0 (local to host imladris)
         Events : 0.775552

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       65        1      active sync   /dev/sde1

Der Status zeigt unsere neuen Platten und alles ist synchron. Aber die Größe ist noch die alte. Deshalb vergrößern wir unser RAID auf die maximale Größe:

mdadm --grow /dev/md0 --size=max

Wir prüfen den Status und warten erneut (diesmal fast 6 Stunden von 500GB auf 2 TB):

cat /proc/mdstat

Quellen (u.a.):

https://www.psit.at/blogs/peter-schmidt/20130626-festplatte-unter-linux-...
http://linux.die.net/man/8/mdadm
https://raid.wiki.kernel.org/index.php/Growing
http://www.linuxquestions.org/questions/linux-newbie-8/mdadm-cannot-remo...