Wie kann ich mich von einem fehlerhaften Zpool erholen, bei dem ein Gerät in Ordnung ist, aber vorübergehend offline war?

7

Ich habe einen Zpool mit 4 2 TB USB-Festplatten in einer RAIDZ-Konfiguration:

[root@chef /mnt/Chef]# zpool status farcryz1
  pool: farcryz1
 state: ONLINE
 scrub: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    farcryz1    ONLINE       0     0     0
      raidz1    ONLINE       0     0     0
        da1     ONLINE       0     0     0
        da2     ONLINE       0     0     0
        da3     ONLINE       0     0     0
        da4     ONLINE       0     0     0

Um den Pool zu testen, habe ich einen Laufwerksfehler simuliert, indem ich das USB-Kabel von einem der Laufwerke gezogen habe, ohne es offline zu schalten:

[root@chef /mnt/Chef]# zpool status farcryz1
  pool: farcryz1
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
    attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
    using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    farcryz1    ONLINE       0     0     0
      raidz1    ONLINE       0     0     0
        da4     ONLINE      22     4     0
        da3     ONLINE       0     0     0
        da1     ONLINE       0     0     0
        da2     ONLINE       0     0     0

errors: No known data errors

Daten sind immer noch da, Pool immer noch online. Großartig! Versuchen wir nun, den Pool wiederherzustellen. Ich steckte das Laufwerk wieder ein und gab den zpool replaceBefehl aus, wie ich oben angewiesen wurde:

[root@chef /mnt/Chef]# zpool replace farcryz1 da4
invalid vdev specification
use '-f' to override the following errors:
/dev/da4 is part of active pool 'farcryz1'

Ähm ... Das ist nicht hilfreich ... Also habe ich es versucht zpool clear farcryz1, aber das hat überhaupt nicht geholfen. Ich konnte es immer noch nicht ersetzen da4. Also habe ich eine Kombination aus onlineing, offlineing, clearing, replaceing und scrubing ausprobiert . Jetzt stecke ich hier fest:

[root@chef /mnt/Chef]# zpool status -v farcryz1
  pool: farcryz1
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
    invalid.  Sufficient replicas exist for the pool to continue
    functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-4J
 scrub: scrub completed after 0h2m with 0 errors on Fri Sep  9 13:43:34 2011
config:

    NAME        STATE     READ WRITE CKSUM
    farcryz1    DEGRADED     0     0     0
      raidz1    DEGRADED     0     0     0
        da4     UNAVAIL      9     0     0  experienced I/O failures
        da3     ONLINE       0     0     0
        da1     ONLINE       0     0     0
        da2     ONLINE       0     0     0

errors: No known data errors
[root@chef /mnt/Chef]# zpool replace farcryz1 da4
cannot replace da4 with da4: da4 is busy

Wie kann ich mich von dieser Situation erholen, in der ein Gerät in meinem Zpool unerwartet getrennt wurde (aber kein ausgefallenes Gerät ist) und jetzt wieder zurück ist und bereit ist, erneut ausgelagert zu werden?


EDIT: Wie gewünscht, ein tailvon dmesg:

(ses3:umass-sim4:4:0:1): removing device entry
(da4:umass-sim4:4:0:0): removing device entry
ugen3.2: <Western Digital> at usbus3
umass4: <Western Digital My Book 1140, class 0/0, rev 3.00/10.03, addr 1> on usbus3
da4 at umass-sim4 bus 4 scbus6 target 0 lun 0
da4: <WD My Book 1140 1003> Fixed Direct Access SCSI-6 device 
da4: 400.000MB/s transfers
da4: 1907697MB (3906963456 512 byte sectors: 255H 63S/T 243197C)
ses3 at umass-sim4 bus 4 scbus6 target 0 lun 1
ses3: <WD SES Device 1003> Fixed Enclosure Services SCSI-6 device 
ses3: 400.000MB/s transfers
ses3: SCSI-3 SES Device
GEOM: da4: partition 1 does not start on a track boundary.
GEOM: da4: partition 1 does not end on a track boundary.
GEOM: da4: partition 1 does not start on a track boundary.
GEOM: da4: partition 1 does not end on a track boundary.
ugen3.2: <Western Digital> at usbus3 (disconnected)
umass4: at uhub3, port 1, addr 1 (disconnected)
(da4:umass-sim4:4:0:0): lost device
(da4:umass-sim4:4:0:0): removing device entry
(ses3:umass-sim4:4:0:1): lost device
(ses3:umass-sim4:4:0:1): removing device entry
ugen3.2: <Western Digital> at usbus3
umass4: <Western Digital My Book 1140, class 0/0, rev 3.00/10.03, addr 1> on usbus3
da4 at umass-sim4 bus 4 scbus6 target 0 lun 0
da4: <WD My Book 1140 1003> Fixed Direct Access SCSI-6 device 
da4: 400.000MB/s transfers
da4: 1907697MB (3906963456 512 byte sectors: 255H 63S/T 243197C)
ses3 at umass-sim4 bus 4 scbus6 target 0 lun 1
ses3: <WD SES Device 1003> Fixed Enclosure Services SCSI-6 device 
ses3: 400.000MB/s transfers
ses3: SCSI-3 SES Device
Josh
quelle

Antworten:

8

Stellen Sie fest, ob das Gerät ersetzt werden muss, und beheben Sie die Fehler mit 'zpool clear' oder ersetzen Sie das Gerät durch 'zpool replace'.

Sieht so aus, als müssten Sie nach dem ersten vorübergehenden Fehler möglicherweise nur a ausführen, um zpool cleardie Fehler zu beheben.

Wenn Sie so tun möchten, als wäre es ein Laufwerksersatz, müssen Sie wahrscheinlich zuerst die Daten vom Laufwerk löschen, bevor Sie versuchen, sie erneut zum Pool hinzuzufügen.

MikeyB
quelle
"Möglicherweise mussten Sie nur einen Zpool löschen, um die Fehler zu beheben." Die zusätzlichen Befehle, die ich ausgeführt habe, haben wahrscheinlich die Situation verursacht, in der ich mich gerade befinde. Das habe ich auch vermutet. "Sie müssen wahrscheinlich zuerst die Daten vom Laufwerk löschen, bevor Sie versuchen, sie erneut zum Pool hinzuzufügen." - Also dd if=/dev/zero of=/dev/da4 bs=1M?
Josh
1
Sicher, blasen Sie es weg, tun Sie so, als wäre es ein brandneues Laufwerk.
MikeyB
Das hat es geschafft, danke! Bevor dies funktionieren würde, musste ich neu starten und zpool replace farcryz1 da4antwortete danach mit cannot replace da4 with da4: no such pool or dataset. Aber das Anschließen eines anderen USB-Laufwerks als da4und dann das neu auf Null gesetzte 2-TB-Laufwerk danach da5erlaubte es mir zpool replace farcryz1 da4 da5. Vielen Dank!
Josh
Sie müssen das gesamte Laufwerk auf Null stellen?
Barrymac
Ich war in einer ähnlichen Situation und konnte nach dem Nullstellen ohne Neustart ersetzen
Barrymac
1

Was waren die Ausgaben der verschiedenen Befehle, die Sie ausprobiert haben? Haben Sie versucht -f, einen von ihnen einzuschalten?

Haben Sie laufen zpool clear poolname device-name?

In Ihrem Fall zpool clear farcryz1 da4- Das hätte den Resilvering-Prozess in Gang bringen sollen.

ewwhite
quelle
Ich habe es versucht zpool clear farcryz1 da4, und es erzeugt keine Ausgabe und überhaupt keine Änderung. Ich habe das gerade getan und sehe jetzt da4 UNAVAIL 3 0 0 experienced I/O failures.
Josh
Und können Sie neu starten? Was sagt ein Schwanz dmesg?
ewwhite
Ich kann neu starten, habe es aber noch nicht. Ich werde das versuchen, aber sollte das notwendig sein? Ich habe einen Schwanz von dmesg hinzugefügt, aber es ist nicht sehr nützlich ...
Josh
1

Wenn zpool cleardies nicht behoben wird, können Sie zfs veranlassen, die Festplatte mit zu vergessen zpool labelclear <partition>(verfügbar unter http://zfsonlinux.org seit zfs-v0.6.2 ).

Beachten Sie, dass Sie, selbst wenn Sie den zpool mit einem ganzen Gerät /dev/sdaerstellt haben, z /dev/sda1. B. die Partition angeben müssen, die zfs erstellt hat, z .

(Credits gehen an DeHackEd, https://github.com/zfsonlinux/zfs/issues/2076 )

Aus einer zpool-Manpage :

zpool labelclear [-f] device

Removes ZFS label information from the specified device. The device
must not be part of an active pool configuration.

  -f     Treat exported or foreign devices as inactive.
Wumms
quelle