adminForge

free | no tracking | no logging | no advertising

Das ist unser Motto. Mit adminForge bieten wir kostenlose Dienste an. Unser Ziel ist es, eine freie und datensparsame Alternative zu bekannten Diensten bereitzustellen. Seit 2014 betreiben wir adminForge gemeinsam mit Spaß an der Technik und an Open-Source.

mdadm Raid neu erstellen mit nur einem Spare Device

Sollte aus irgendwelchen Gründen in unserem mdadm Software-Raid nur noch eine Festplatte aktiv sein und diese wird auch noch als Spare erkannt – hilft euch dieses Tutorial weiter.

Punkt 1: Aktive Festplatte herausfinden

Das System bootet nicht mehr, bei der Überprüfung in einem Recovery/Rescue System schaut /dev/md2 in etwa so aus?

# cat /proc/mdstat 
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] 
md2 : active raid1 sda4[0](S)
      968258424 blocks super 1.2 [2/1] [U_]

md1 : active raid1 sda3[0] sdb3[1]
      7999476 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda2[0] sdb2[1]
      499700 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Dann hilft am schnellsten das Raid neu zu erstellen.

Punkt 2: Raid Device neu erstellen

Wir führen folgenden Befehl auf das noch aktive Device /dev/sda4 aus.

# mdadm --examine /dev/sda4
/dev/sda4:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 99b62f02:a94a4449:638761b0:f61843fd
           Name : zebra777:2
  Creation Time : Thu Jan  9 06:15:42 2014
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1936517120 (923.40 GiB 991.50 GB)
     Array Size : 1936516848 (923.40 GiB 991.50 GB)
  Used Dev Size : 1936516848 (923.40 GiB 991.50 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : c8ff7993:7e7ce073:c360cf66:9910dedb

    Update Time : Sun Feb 16 02:18:37 2014
       Checksum : 228ee4c8 - correct
         Events : 108

   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing)

Den markierten Wert Used Dev Size 1936516848 teilen wir durch 2 und kommen somit auf eine Size von 968258424. Mehr zu diesem Thema unter raid.wiki.kernel.org.

Mit dem soeben errechneten Wert erstellen wir unser neues /dev/md2 Device mit nur einer Partition + einer „missing“.

# mdadm --create /dev/md2 --metadata=1.2 --assume-clean --level=1 --size=968258424 --raid-devices=2 /dev/sda4 missing
mdadm: /dev/sda4 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Thu Jan  9 06:15:42 2014
Continue creating array? y
mdadm: array /dev/md2 started.

Das Ergebnis schaut wie folgt aus.

# cat /proc/mdstat 
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] 
md2 : active raid1 sda4[0]
      968258424 blocks super 1.2 [2/1] [U_]

md1 : active raid1 sda3[0] sdb3[1]
      7999476 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda2[0] sdb2[1]
      499700 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Wir prüfen ob unsere Daten noch vorhanden sind.

# mount /dev/md2 /mnt
# ls -lah /mnt
total 132K
drwxr-xr-x  22 root root 4.0K Feb 11 09:04 .
drwxrwxrwt  27 root root  220 Feb 16 08:24 ..
-rw-------   1 root root  10K Feb 16 02:18 aquota.group
-rw-------   1 root root  16K Feb 16 02:18 aquota.user
drwxr-xr-x   2 root root 4.0K Jan  9 06:58 bin
drwxr-xr-x   2 root root 4.0K Jan  9 06:18 boot
drwxr-xr-x   5 root root 4.0K Jan  9 06:23 dev
drwxr-xr-x 100 root root 4.0K Feb 12 21:40 etc
drwxr-xr-x   3 root root 4.0K Jan  9 10:52 home
lrwxrwxrwx   1 root root   30 Jan  9 06:26 initrd.img -> boot/initrd.img-2.6.32-5-amd64
drwxr-xr-x  11 root root  12K Jan  9 07:02 lib
drwxr-xr-x   2 root root 4.0K Jan  9 06:29 lib32
lrwxrwxrwx   1 root root    4 Jan  9 06:18 lib64 -> /lib
drwx------   2 root root  16K Jan  9 06:17 lost+found
drwxr-xr-x   2 root root 4.0K Jan  9 06:18 media
drwxr-xr-x   2 root root 4.0K Sep 22 22:30 mnt
drwxr-xr-x   2 root root 4.0K Jan  9 06:18 opt
drwxr-xr-x   2 root root 4.0K Sep 22 22:30 proc
drwx------   8 root root 4.0K Jan 13 15:38 root
drwxr-xr-x   2 root root 4.0K Jan  9 07:17 sbin
drwxr-xr-x   2 root root 4.0K Jul 21  2010 selinux
drwxr-xr-x   2 root root 4.0K Jan  9 06:18 srv
drwxr-xr-x   2 root root 4.0K Mar 27  2012 sys
drwxrwxrwt   5 root root 4.0K Feb 16 02:18 tmp
drwxr-xr-x  11 root root 4.0K Jan  9 07:46 usr
drwxr-xr-x  16 root root 4.0K Jan  9 07:36 var
lrwxrwxrwx   1 root root   27 Jan  9 06:26 vmlinuz -> boot/vmlinuz-2.6.32-5-amd64

Punkt 3: Zweite Partition dem Raid hinzufügen

Nun können wir auch unsere andere Partition /dev/sdb4 hinzufügen.

# mdadm --add /dev/md2 /dev/sdb4
mdadm: added /dev/sdb4

Das Raid führt anschließend einen Resync durch.

# cat /proc/mdstat 
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] 
md2 : active raid1 sdb4[2] sda4[0]
      968258424 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.0% (823936/968258424) finish=156.5min speed=102992K/sec

md1 : active raid1 sda3[0] sdb3[1]
      7999476 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda2[0] sdb2[1]
      499700 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Sollte der Resync Prozess zu langsam sein, können wir diesen beschleunigen.

echo 100000 > /proc/sys/dev/raid/speed_limit_min

Punkt 4: mdadm.conf anpassen und Initrd neu erstellen

Wir bauen eine Chroot-Umgebung auf.

mount /dev/md2 /mnt
mount /dev/md0 /mnt/boot
mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev
mount -o bind /sys /mnt/sys
chroot /mnt

Und tauschen unsere neue /dev/md2 Array Zeile in /etc/mdadm/mdadm.conf aus.

# mdadm --examine --scan
ARRAY /dev/md0 UUID=b84a5825:1ccdb221:0db498df:97b8183d
ARRAY /dev/md1 UUID=703be351:3143332c:5b6d88b1:6bd98140
ARRAY /dev/md2 UUID=22d67abd:fe0cc6a8:5b6d88b1:6bd98140

Damit der Kernel das neue Array automatisch beim Booten erkennt, müssen wir die Initrd noch neu erstellen.

# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64

Unser System kann nun wieder im produktiv Betrieb gebootet werden.