Software Raid – Festplatte ersetzen

Ich habe hier beschrieben wie unter Ubuntu ein Software Raid installiert wird. Das funktioniert soweit auch ganz prima, allerdings schickten mir die Smarttools heute morgen diese Mail:

This message was generated by the smartd daemon running on:

   host name:  kameraserver
   DNS domain: [Empty]

The following warning/error was logged by the smartd daemon:

Device: /dev/sde [SAT], 8 Offline uncorrectable sectors

Device info:
ST2000VX008-2E3164, S/N:W5232Z6R, WWN:5-000c50-09b8c9bf7, FW:CV12, 2.00 TB

For details see host's SYSLOG.

You can also use the smartctl utility for further investigation.
Another message will be sent in 24 hours if the problem persists.

So wie aussieht, scheint /dev/sde also so langsam den Geist aufzugeben. Besser ich ersetze sie jetzt gegen eine neue Festplatte. Aber wie mache ich das?

Zunächst schaue ich mir mal den Status des RAID an:

edv@kameraserver:~$ sudo cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid6 sdd1[2] sdf1[4] sde1[3] sdc1[1] sdb1[0]
      5860134912 blocks super 1.2 level 6, 512k chunk, algorithm 2 [5/5] [UUUUU]
      bitmap: 8/15 pages [32KB], 65536KB chunk

unused devices: <none>

Das sieht soweit ganz gut aus, das RAID ist also noch in Ordnung. Ich tausche die Platte trotzdem aus. Zunächst schreibe ich alle eventuell vorhandenen Caches mittels sync-Befehl auf die Festplatten.

edv@kameraserver:~$ sudo sync

Zunächst setze ich die betroffene Festplatte manuell auf den Status „Failed“.

edv@kameraserver:~$ sudo mdadm --manage /dev/md0 --fail /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md0

Sicherheitshalber nochmal überprüfen ob die Disk nun wirklich den Status „Failed“ hat.

edv@kameraserver:~$ sudo cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid6 sdd1[2] sdf1[4] sde1[3](F) sdc1[1] sdb1[0]
      5860134912 blocks super 1.2 level 6, 512k chunk, algorithm 2 [5/4] [UUU_U]
      bitmap: 13/15 pages [52KB], 65536KB chunk

unused devices: <none>

Das hat funktioniert (das „F“ hinter sde1 steht für failed), nun kann ich die Festplatte aus dem Raid-Verbund entfernen. Das geht ebenfalls mittels mdadm.

edv@kameraserver:~$ sudo mdadm --manage /dev/md0 --remove /dev/sde1
mdadm: hot removed /dev/sde1 from /dev/md0

Jetzt nehme ich die alte Festplatte aus der Backplane und baue die neue Festplatte ein. Die Seriennummer des Festplatte schreibe ich auf den entsprechenden Slot der Backplane, damit ich sie im Fehlerfall leicht identifizieren kann.

Eigentlich sollte das Device gleich bleiben, aber auch dieses schaue ich sicherheitshalber mittels lsblk nach.

edv@kameraserver:~$ sudo lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda       8:0    0  1,8T  0 disk
├─sda1    8:1    0  1,8T  0 part  /
├─sda2    8:2    0    1K  0 part
└─sda5    8:5    0  976M  0 part  [SWAP]
sdb       8:16   0  1,8T  0 disk
└─sdb1    8:17   0  1,8T  0 part
  └─md0   9:0    0  5,5T  0 raid6 /mnt/aufzeichnung
sdc       8:32   0  1,8T  0 disk
└─sdc1    8:33   0  1,8T  0 part
  └─md0   9:0    0  5,5T  0 raid6 /mnt/aufzeichnung
sdd       8:48   0  1,8T  0 disk
└─sdd1    8:49   0  1,8T  0 part
  └─md0   9:0    0  5,5T  0 raid6 /mnt/aufzeichnung
sde       8:64   0  1,8T  0 disk
sdf       8:80   0  1,8T  0 disk
└─sdf1    8:81   0  1,8T  0 part
  └─md0   9:0    0  5,5T  0 raid6 /mnt/aufzeichnung

Gut, /dev/sde ist also /dev/sde geblieben. Jetzt kann ich mittels sfdisk die Partitionierung von einer beliebigen anderen Festplatte des Raid-Verbunds übernehmen. Ich entscheide mich für /dev/sdb als Quelle, spielt aber wie gesagt keine Rolle.

edv@kameraserver:~$ sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sde
Checking that no-one is using this disk right now ... OK

Disk /dev/sde: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new GPT disklabel (GUID: D5D5DEB6-1A05-4434-A2AF-0CF3EDC5EF7A).
Created a new partition 1 of type 'Linux RAID' and of size 1,8 TiB.
/dev/sde2:
New situation:

Device     Start        End    Sectors  Size Type
/dev/sde1   2048 3907020976 3907018929  1,8T Linux RAID

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Jetzt füge ich die neue Festplatte wieder zum Raid hinzu.

edv@kameraserver:~$ sudo mdadm --manage /dev/md0 --add /dev/sde1
mdadm: added /dev/sde1

Ob das alles geklappt hat, verrät mir ebenfalls mdadm

edv@kameraserver:~$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Fri Sep 28 15:46:21 2018
     Raid Level : raid6
     Array Size : 5860134912 (5588.66 GiB 6000.78 GB)
  Used Dev Size : 1953378304 (1862.89 GiB 2000.26 GB)
   Raid Devices : 5
  Total Devices : 5
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Jan  7 13:02:26 2019
          State : active, degraded, recovering
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 0% complete

           Name : kameraserver:0  (local to host kameraserver)
           UUID : 21ae1412:e3b4dd92:2c42cdaa:09862571
         Events : 25518

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       5       8       65        3      spare rebuilding   /dev/sde1
       4       8       81        4      active sync   /dev/sdf1

Der Rebuild läuft also, den jeweils aktuellen Status kann ich mir jederzeit ausgeben lassen:

edv@kameraserver:~$ sudo cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid6 sde1[5] sdd1[2] sdf1[4] sdc1[1] sdb1[0]
      5860134912 blocks super 1.2 level 6, 512k chunk, algorithm 2 [5/4] [UUU_U]
      [>....................]  recovery =  0.9% (17925956/1953378304) finish=324.5min speed=99402K/sec
      bitmap: 13/15 pages [52KB], 65536KB chunk

unused devices: <none>

Nach ein paar Stunden sollte also alles wieder okay sein.

Bitte beachtet, dass es hier um einen Daten-Raid geht von dem NICHT gebooted wird. Bei einem bootable-Array ist die Sache etwas komplizierter, da dort auch noch der MBR/GPT kopiert werden muss (auch nicht weiter schwierig, aber eben anders als hier beschrieben.)