Soft-Raid wiederherstellen nach Plattenausfall

Manchmal ist einfach der Wurm drin. Innerhalb nur eines Monats ist mir in meinen Servern je eine Platte ausgefallen – nach Jahren fast ohne Plattencrash. Die letzten – eine ungewöhnliche Serie von drei defekten Platten gleichen Typs hintereinander – hatte ich 2006. Dank Garantie habe ich schnell Ersatz bekommen und noch ein zwei Exemplare als Schnell-Ersatz zusätzlich angeschafft. Gebraucht habe ich die seit dem nie. Achso, und irgendwann war die Platte im MacBook hin. Naja, zu den aktuellen Fällen. Ich hatte Glück im Unglück, denn beide Server laufen auf einem Raid1 und ein Backup beider steht (jetzt) auch bereit. Also alles halb so schlimm. Der Tausch im OS-X-Heimserver war schnell erledigt. Mac Mini auf, Platte getauscht, Festplatten-Dienstprogramm angeschmissen und die Platte ins Software-Raid gehängt. Einen Rebuild später war alles wieder gut. Beim „großen“ Server bei Hetzner hat alles ein bisschen länger gedauert.

Das begann damit, dass ich böser Mensch noch kein richtiges Backup hatte – bei einem produktiv genutzten System ein ganz schlimmer Fehler. Das lag einfach daran, dass alle Lösungen von Backupninja bis Duplicity mir irgendwie nicht zusagten. Aber wie es immer ist, die Motivation macht den Erfolg und so ein Totalverlust von Daten lässt die grauen Zellen mächtig effektiv arbeiten. So stieß ich nach einiger Suche auf den Backup-Manager. Ein Tool, das mir bis dato noch nicht über den Weg gelaufen ist, das ich hiermit jedoch wärmstens empfehlen möchte. Die Installation ist dank Paketmanager und Vorhandensein im Debian-Repository ein Kinderspiel. Die config ist weitestgehend selbsterklärend, zumindest für ein erstes schnelles Backup. Um das Tool dann aber auch für das tägliche Backup fit zu machen, wollte ich ein wenig lesen. Leider ist die Website gerade recht „ungepflegt“, sie ist schlicht nicht existent. Die Wayback-Machine half dann aber, das Manual im HTML- und PDF-Format zu finden. Damit das von nun an einfacher wird, hab ich das Manual des BackUp-Manager als PDF einfach mal hier hochgeladen und verlinkt. Dort steht dann auch drin, wie das Backup der Daten, der MySQL-Datenbank und der Debian-Paketliste vonstatten geht. Prima. Alles bereit für den Plattentausch.

Für die Vorbereitung des Plattentauschs habe ich mich ans DokuWiki bei Hetzner gehalten. Hat auch alles gut geklappt, der Tauschtermin konnte vereinbart werden. Heute Nacht dann wurde die defekte Platte gewechselt. Nun wollte die Platte seinen Weg zurück ins System finden. Hier gab es dann ein paar Probleme, vor denen das DokuWiki nicht gewarnt hatte und für die es auch keine Lösung parat hat. Ging trotzdem :)

Die Probleme traten beim Kopieren des MBR auf die neue Platte auf. Ich versuchte den MBR, wie Wiki beschrieben, mit Hilfe des Befehls sfdisk -d /dev/sda | sfdisk /dev/sdb zu übertragen. Ging aber nicht. Das Tool sagte mir:

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type

und tat erstmal gar nichts:

sfdisk: I don’t like these partitions – nothing changed.
(If you really want this, use the –force option.)

Auch die Option --force brachte keinen Erfolg. Hmm, Blick auf den MBR von sda werfen? Nix da. cfdisk zeigte mir die Partitionstabelle der intakten Platte nicht an. Der Fehler lautete:

FATAL ERROR: Bad primary partition 3: Partition ends in the final partial cylinder

Super. Also fdisk -l angeschmissen. Das zeigte mir die Partitionen sauber an, wenn auch mit den Hinweisen

Partition 1 does not end on cylinder boundary.

Partition 2 does not end on cylinder boundary.

Die Warnung konnte ich mit dem Schalter -c beseitigen. Die Warnung sei nur für DOS-Umgebungen relevant, verriet mir das Wiki bei Thomas Krenn. Der Schalter -c deaktiviert den DOS-Kompatibilitätsmodus. Gut so. Aber das Problem bleibt: Was tun um den MBR zu übertragen. Weiter suchen. Fündig geworden bin ich dann im „Nigel Smith’s Blog“ unter der Überschrift „fdisk, sfdisk, mdadm and SCSI hard drive geometry„. Ein einfacher Schalter namens --Linux führt zum Erfolg. Der gesamte Befehl lautet dann also: sfdisk -d /dev/sda | sfdisk --Linux /dev/sdb. Und das ist das Ergebnis:

sfdisk -d /dev/sda | sfdisk –Linux /dev/sdb
Checking that no-one is using this disk right now …
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
OK

Disk /dev/sdb: 182401 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/sdb1 2048 4196352 4194305 83 Linux
/dev/sdb2 4198400 5246976 1048577 fd Linux raid autodetect
/dev/sdb3 5249024 26220544 20971521 fd Linux raid autodetect
/dev/sdb4 26222592 2930277167 2904054576 f W95 Ext’d (LBA)
/dev/sdb5 26224640 36710400 10485761 fd Linux raid autodetect
/dev/sdb6 36712448 2930277167 2893564720 83 Linux
Warning: partition 1 does not end at a cylinder boundary
Warning: partition 2 does not start at a cylinder boundary
Warning: partition 2 does not end at a cylinder boundary
Warning: partition 3 does not start at a cylinder boundary
Warning: partition 3 does not end at a cylinder boundary
Warning: partition 4 does not start at a cylinder boundary
Warning: partition 4 does not end at a cylinder boundary
Warning: partition 5 does not end at a cylinder boundary
Warning: partition [6] does not start at a cylinder boundary
Warning: partition [6] does not end at a cylinder boundary
Warning: partition 6 does not end at a cylinder boundary
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Successfully wrote the new partition table

Re-reading the partition table …

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

Tada! Nun ist sdb sauber partitioniert. Dem System habe ich die Platten-Plätzchen per hdparm -z /dev/sdb bekannt gemacht. Jetzt noch die Partitionen mit Hilfe von mdadm wieder ins Soft-Raid hängen und schick.