Как заменить диск в резервном пуле ZFS?


8

Я немного читал, и похоже, что ZFS не любит, когда диски удаляются из не избыточных массивов :

Вы можете использовать zpool detachкоманду для отсоединения устройства от зеркального пула хранения. Например:

# zpool detach zeepool c2t1d0

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

# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs

Основная проблема понятна: удаление единственной копии части данных (будь то метаданные или данные полезной нагрузки) из массива сделает эти данные недоступными.

Примеры замены устройств в пуле хранения ZFS дают базовое пошаговое описание того, как заменить устройство в пуле хранения: отключить диск, извлечь диск, вставить диск замены, запустить, zpool replaceчтобы сообщить ZFS об изменении и онлайн диск. Это, очевидно, требует, чтобы массив не зависел от заменяемого диска, поэтому массив должен иметь избыточность; если это зависит от рассматриваемого диска, этот подход представляет ту же проблему, что и выше.

Каков рекомендуемый способ замены диска в массиве ZFS без избыточности ?

Предположим, что существующий диск работает правильно, и предположим, что размер заменяющего диска по крайней мере совпадает с размером заменяемого диска. (Если существующий диск вышел из строя, очевидно, что все, что можно сделать, это добавить новый диск и восстановить из резервной копии все файлы, на которые повлиял сбой диска.)

Ответы:


3

Не знаю, было ли что-то другое в `13, но zfs replace 'работает с пулами без избыточности. Вы просто запускаете команду 1 вместо того, чтобы сначала отсоединиться.

d1 - 1G, d2 - 2G, оба являются пустыми файлами в / tmp:

/t/test #> zpool create test /tmp/test/d1
/t/test #> zpool set autoexpand=on test
/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: none requested
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d1  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1008M   258K  1008M         -     0%     0%  1.00x  ONLINE  -


/t/test #> zpool replace test /tmp/test/d1 /tmp/test/d2


/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: resilvered 61K in 0h0m with 0 errors on Sun Sep 18 18:55:32 2016
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d2  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1.98G   408K  1.98G         -     0%     0%  1.00x  ONLINE  -

12
zpool attach pool old-disk new-disk

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

zpool detach pool old-disk

Протестировано с петлевыми устройствами:

# truncate -s 1G a b
# truncate -s 1200M c
# losetup  /dev/loop0 a
# losetup  /dev/loop1 b
# losetup  /dev/loop2 c
# zpool create test loop{0,1}
# zpool attach test loop1 loop2
# zpool status
      pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            loop1   ONLINE       0     0     0
            loop2   ONLINE       0     0     0
# zpool detach test loop1
# zpool status
  pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          loop2     ONLINE       0     0     0

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

@ MichaelKjörling, я этого не говорю. Я просто говорю, что вышеупомянутое должно работать, поскольку я не вижу никакой причины, почему это не должно.
Стефан Шазелас

Сказав это, похоже, что ZFS действительно поддерживает это. Ответ обновлен.
Стефан Шазелас

Большой! Это тот ответ, который я искал и надеялся получить. Дала бы тебе еще один +1 за то, что попробовал, если бы мог.
CVn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.