Wie man einen Raidz mit 3 defekten Festplatten wiederherstellt

562
Konrad Eisele

Ich habe ein Raidz Vdev mit 3 Festplatten. Disk0 ist jetzt fehlgeschlagen und ich versuche mich zu erholen, kann jedoch nicht ausgeführt werden zpool import. Disk0 ist immer noch funktionsfähig, die Partitionstabelle war jedoch beschädigt und ich habe versucht, sie wiederherzustellen.

$ zpool import pool: epool id: 15752543265619539307 state: FAULTED status: One or more devices contains corrupted data. action: The pool cannot be imported due to damaged devices or data. The pool may be active on another system, but can be imported using the '-f' flag. see: http://zfsonlinux.org/msg/ZFS-8000-5E config:  epool FAULTED corrupted data raidz1-0 DEGRADED ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1 UNAVAIL corrupted data ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1KPRKPX-part1 ONLINE ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7ZXC1E0-part1 ONLINE 

Gibt es eine Chance, dieses Setup zu reparieren?

$ zdb -l /dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1KPRKPX-part1 ------------------------------------ LABEL 0 ------------------------------------ version: 5000 name: 'epool' state: 0 txg: 108340 pool_guid: 157525$43265619539307 errata: 0 hostname: 'eiselekd-lnx' top_guid: 5366409938038884073 guid: 3063814570901399057 vdev_children: 1 vdev_tree: type: 'raidz' id: 0 guid: 5366409938038884073 nparity: 1 metaslab_array: 35 metaslab_shift: 36 ashift: 12 asize: 9001706717184 is_log: 0 create_txg: 4 children[0]: type: 'disk' id: 0 guid: 9231358437407247535 path: '/dev/disk/by-id/ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1' whole_disk: 0 create_txg: 4 children[1]: type: 'disk' id: 1 guid: 3063814570901399057 path: '/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1KPRKPX-part1' whole_disk: 0 DTL: 136 create_txg: 4 children[2]:/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7ZXC1E0-part1 type: 'disk' id: 2 guid: 10884448206527621454 path: '/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7ZXC1E0-part1' whole_disk: 0 create_txg: 4 features_for_read: com.delphix:hole_birth com.delphix:embedded_data labels = 0 1 2 3  

In der ausgefallenen Partition werden keine Labels angezeigt:

# zdb -l /dev/disk/by-id/ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1 -------------------------------------------- LABEL 0 -------------------------------------------- failed to unpack label 0 -------------------------------------------- LABEL 1 -------------------------------------------- failed to unpack label 1 -------------------------------------------- LABEL 2 -------------------------------------------- failed to unpack label 2 -------------------------------------------- LABEL 3 -------------------------------------------- failed to unpack label 3 

Es gibt jedoch Ueberblocks (magische 0cb1ba00 am Anfang und Ende der Partition): Ich habe zfs_revert-0.1.py ( https://gist.github.com/jshoward/5685757 ) verwendet, um die txg-Informationen für disk0 und etwas zu betrachten in disk0 scheint da.

TXG TIME TIMESTAMP BLOCK ADDRESSES 108173 08 Feb 2018 02:24:11 1518053051 [360, 872, 5860494696, 5860495208] 108193 08 Feb 2018 02:25:59 1518053159 [264, 776, 5860494600, 5860495112] 108199 08 Feb 2018 02:26:30 1518053190 [312, 824, 5860494648, 5860495160] 108219 07 Mar 2018 16:44:43 1520437483 [472, 984, 5860494808, 5860495320] 108307 08 Mar 2018 15:58:41 1520521121 [408, 920, 5860494744, 5860495256] 108313 09 Mar 2018 14:25:03 1520601903 [456, 968, 5860494792, 5860495304] 108319 12 Mar 2018 17:33:00 1520872380 [504, 1016, 5860494840, 5860495352] 108325 14 Mar 2018 19:23:31 1521051811 [296, 808, 5860494632, 5860495144] 108331 15 Mar 2018 14:36:25 1521120985 [344, 856, 5860494680, 5860495192] 108337 15 Mar 2018 20:07:58 1521140878 [392, 904, 5860494728, 5860495240] 

Ich vermute also, dass die Partitionierung vielleicht den Beginn der Partition beschleunigte. Nicht sicher Ich habe eine dd if=/dev/sda | strings | grep WCC4N1KPRKPX-part1aber das Disk Label Info ist nicht da ...

Ist es möglich, ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1 durch eine neue Festplatte und einen neuen Resilver zu ersetzen? Der http://zfsonlinux.org/msg/ZFS-8000-5E-Link in der zfs-Importausgabe gibt mir keine Hoffnung, aber trotzdem ....

1

2 Antworten auf die Frage

1
Konrad Eisele

Es gibt keine Möglichkeit, den ZFS-Pool ohne zfs importFunktion wiederherzustellen . Es zfs importist jedoch kein Fehlerbehebungstool, und daher ist die allgemeine Strategie auch eine Sicherung, anstatt sich zfsauf Fail-Save zu verlassen. Ich habe https://github.com/hiliev/py-zfs-rescue erweitert, um Linux-Pools zu unterstützen: https://github.com/eiselekd/dumpbin-py-zfs-rescue . Damit konnte ich meine Festplatten wiederherstellen.

0
a CVn

Ihr Pool besteht aus einem einzigen Raidz1-vdev, der den Verlust eines einzelnen Geräts überleben kann, und ein Gerät darin ist "beschädigt", sodass sich alles, was zum Importieren des Pools erforderlich ist, genau dort befindet.

Ich bin nicht sicher, warum ZFS Ihren Pool nicht sofort importieren würde und das eine Gerät nur als UNAVAIL kennzeichnen würde. Haben Sie jedoch versucht, -fdie Ausgabe als Vorschlag für die Verwendung zu verwenden zpool import? Das ist das erste, was ich versuchen würde.

Sobald der Pool importiert ist, sollte es entweder zpool offlineeine problematische Angelegenheit für die problematische Partition sein, oder noch besser zpool replace, die Daten neu zu schreiben und die Redundanz wiederherzustellen.

Als Randbemerkung empfehle ich, keine Partitionen mit ZFS zu verwenden, es sei denn, Sie haben einen guten Grund. Geben Sie ZFS einfach die gesamte Festplatte (z. B. /dev/disk/by-id/ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572) und lassen Sie die Partitionierung eigenständig durchführen.

`` zpool import``` ist eine Voraussetzung, wenn Sie eine Wiederherstellung durchführen. Ich konnte `` zfs import``` nicht dazu bringen, meine Festplatten zu akzeptieren. Die Hauptursache für den Fehler war ein fehlerhafter SATA-Controller. Als ich es herausfand, war es bereits zu spät, da ich zu viele Optionen für `` `import``` ausprobiert hatte, einschließlich der Optionen, die versuchen, die Metadaten zu korrigieren. Die Lösung bestand dann darin, https://github.com/hiliev/py-zfs-rescue zu erweitern, um meinen Linux-Stil zpools zu unterstützen: https://github.com/eiselekd/dumpbin-py-zfs-rescue. Damit konnte ich meine Daten wiederherstellen. Konrad Eisele vor 5 Jahren 0