Frage Wie kann ich von einem fehlerhaften zpool wiederherstellen, wenn ein Gerät in Ordnung ist, aber vorübergehend offline war?


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 Laufwerkfehler simuliert, indem ich das USB-Kabel von einem der Laufwerke genommen habe, ohne es offline zu nehmen:

[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

Die Daten sind noch da, der Pool ist noch online. Großartig! Versuchen wir nun, den Pool wiederherzustellen. Ich steckte die Festplatte wieder ein und gab die zpool replace Befehl 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. 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 diese Situation wiederherstellen, in der ein Gerät in meinem zpool unerwartet getrennt wurde (aber kein ausgefallenes Gerät ist) und nun wieder verfügbar ist, um resilient zu sein?


BEARBEITEN: Wie gewünscht, a tail von 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

7
2017-09-09 19:32


Ursprung




Antworten:


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

Es sieht so aus, als ob Sie nach dem anfänglichen vorübergehenden Fehler nur noch a zpool clear um die Fehler zu löschen.

Wenn Sie vorgeben möchten, dass es sich um einen Laufwerksersatz handelt, müssen Sie die Daten wahrscheinlich zuerst vom Laufwerk löschen, bevor Sie versuchen, es erneut dem Pool hinzuzufügen.


8
2017-09-09 21:10



msgstr "Du hast vielleicht nur einen zpool clear machen müssen, um die Fehler zu beheben" - also haben die zusätzlichen Befehle, die ich ausgeführt habe, wahrscheinlich die Situation verursacht, in der ich jetzt bin. Das habe ich auch vermutet. "Sie müssen wahrscheinlich zuerst die Daten von der Festplatte löschen, bevor Sie versuchen, sie erneut dem Pool hinzuzufügen" - Also, dd if=/dev/zero of=/dev/da4 bs=1M? - Josh
Sicher, blasen Sie es weg, tun Sie so, als wäre es eine brandneue Fahrt. - MikeyB
Das hat es geschafft, danke! Bevor dies funktionieren würde, musste ich neu starten, und nachdem ich das getan habe, zpool replace farcryz1 da4 antwortete mit cannot replace da4 with da4: no such pool or dataset. Aber schließen Sie ein anderes USB-Laufwerk als da4 und dann das neu genullte 2TB Laufwerk nach as da5 erlaubte es mir zpool replace farcryz1 da4 da5. Vielen Dank! - Josh
Sie müssen das gesamte Laufwerk auf Null setzen? - barrymac
Ich war in einer ähnlichen Situation und konnte nach dem Nullsetzen ohne Neustart ersetzen - barrymac


Ob zpool clear repariert es nicht, können Sie zfs vergessen, die Festplatte mit zpool labelclear <partition> (verfügbar in http://zfsonlinux.org schon seit zfs-v0.6.2).

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

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

Von einem 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.

2
2017-12-15 15:37





Was waren die Ausgaben der verschiedenen Befehle, die du ausprobiert hast? Hast du das versucht? -f einen von ihnen einschalten?

Bist du gerannt zpool clear poolname device-name?

In Ihrem Fall, zpool clear farcryz1 da4 - Das sollte den resilvering-Prozess in Gang gesetzt haben.


1
2017-09-09 20:22



Ich habe es versucht zpool clear farcryz1 da4, und es produziert keine Ausgabe und überhaupt keine Änderung. Ich habe das gerade getan und ich sehe jetzt da4 UNAVAIL 3 0 0 experienced I/O failures. - Josh
Und kannst du neu starten? Was macht ein Schwanz von dmesg sagen? - 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