Назад | Перейти на главную страницу

Как мне выполнить восстановление после сбоя zpool, когда одно устройство в порядке, но временно отключено?

У меня есть zpool с 4 USB-дисками по 2 ТБ в конфигурации raidz:

[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

Чтобы протестировать пул, я смоделировал сбой диска, вытащив USB-кабель от одного из дисководов, не отключая его:

[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

Данные все еще есть, пул все еще в сети. Большой! Теперь попробуем восстановить пул. Я снова подключил диск и выдал zpool replace команда, как мне было сказано выше:

[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'

Гм .... Это бесполезно ... Я попробовал zpool clear farcryz1, но это совершенно не помогло. Я все еще не мог заменить da4. Итак, я попробовал комбинацию onlineing, offlineing, clearing, replaceing, и scrubing. Теперь я застрял здесь:

[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

Как я могу выйти из этой ситуации, когда одно устройство в моем zpool было неожиданно отключено (но не неисправное) и теперь снова вернулось, готовое к повторному восстановлению?


РЕДАКТИРОВАТЬ: По запросу tail из 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

Определите, нужно ли заменить устройство, и удалите ошибки с помощью zpool clear или замените устройство с помощью zpool replace.

Похоже, что после первоначального временного сбоя вам, возможно, нужно было только сделать zpool clear чтобы очистить ошибки.

Если вы хотите сделать вид, что это замена диска, вам, вероятно, нужно сначала удалить данные с диска, прежде чем пытаться повторно добавить его в пул.

Если zpool clear не исправляет, вы можете заставить zfs забыть диск, используя zpool labelclear <partition> (доступно в http://zfsonlinux.org поскольку zfs-v0.6.2).

Имейте в виду, что даже если вы создали zpool с использованием всего устройства, например /dev/sda вы должны указать раздел, созданный zfs, например /dev/sda1.

(Кредиты принадлежат DeHackEd, https://github.com/zfsonlinux/zfs/issues/2076)

Из zpool man-страница:

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.

Каковы были результаты различных команд, которые вы пробовали? Вы пробовали -f включить любой из них?

Вы бежали zpool clear poolname device-name?

В твоем случае, zpool clear farcryz1 da4 - Это должно было запустить процесс переноса.