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

ZFS не хочет отключать замененный диск

Я хотел заменить диск в zpool, выполнив следующую команду:

zpool replace -o ashift=12 pool /dev/mapper/transport /dev/mapper/data2                                                                                   

ZFS приступила к работе и обновила пул. В процессе были некоторые ошибки чтения на старом диске, и после его завершения, zpool status -v выглядело так:

  pool: pool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: resilvered 6,30T in 147h38m with 6929 errors on Sat Feb 11 13:31:05 2017
config:

    NAME             STATE     READ WRITE CKSUM
    pool             ONLINE       0     0 16,0K
      raidz1-0       ONLINE       0     0 32,0K
        data1        ONLINE       0     0     0
        replacing-1  ONLINE       0     0     0
          transport  ONLINE   14,5K     0     0
          data2      ONLINE       0     0     0
        data3        ONLINE       0     0     0
    logs
      data-slog      ONLINE       0     0     0
    cache
      data-cache     ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:
<list of 3 files>

Я ожидал, что старый диск будет отсоединен от пула, но этого не произошло. Пробовал отсоединить вручную:

# zpool detach pool /dev/mapper/transport
cannot detach /dev/mapper/transport: no valid replicas

Но когда я экспортировал пул, удалил старый диск и снова импортировал пул, он, похоже, работал безупречно: он начал перенастраивать очередной раз, но он УНИЧТОЖЕН, а не ОТКАЗАН:

  pool: pool                      
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
    continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sat Feb 11 17:28:50 2017
    42,7G scanned out of 9,94T at 104M/s, 27h43m to go
    1,68G resilvered, 0,42% done
config:

    NAME                        STATE     READ WRITE CKSUM
    pool                        DEGRADED     0     0     9
      raidz1-0                  DEGRADED     0     0    18
        data1                   ONLINE       0     0     0
        replacing-1             DEGRADED     0     0     0
          15119075650261564517  UNAVAIL      0     0     0  was /dev/mapper/transport
          data2                 ONLINE       0     0     0  (resilvering)
        data3                   ONLINE       0     0     0  (resilvering)
    logs
      data-slog                 ONLINE       0     0     0
    cache
      data-cache                ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:
<list of 3 files>

Тем не менее, хотя это явно не требуется для полной функциональности пула, я не могу отсоединить старый диск:

# zpool offline pool 15119075650261564517
cannot offline 15119075650261564517: no valid replicas

Что происходит?

Обновить: Судя по всему, ZoL еще не отказалась от неисправных устройств. Замена 3 файлов с постоянными ошибками (один из которых был zvol, то есть мне пришлось создать еще один, dd conv=noerror над содержимым и уничтожьте старый) и, дожидаясь окончательной обработки resilver, удалили старый диск.

Мне все равно было бы интересно, что думает ZoL. Я имею в виду, что все, что не вызывало ошибок чтения или контрольной суммы, было скопировано на новое устройство, и оно уже пометило сектора, которые вызвали ошибки, как навсегда отказавшие. Так зачем же цепляться за старое устройство, с которого ZoL явно не собирался получать никакой информации?