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

Ваше решение обычно в порядке, но оно повредится на новых строках. Вот немного больше устойчивого bash4 + решение:

shopt -s globstar nullglob
for file in **/*.txt; do
    mv "$file" "${file%.*}.eml"
done
8
31.07.2013, 13:53
2 ответа

Не знаю, так ли все изменилось в `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  -
3
27.01.2020, 20:10
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
12
27.01.2020, 20:10
  • 1
    Таким образом, Вы говорите, что ZFS не поддерживает такую операцию исходно? Кажется странным. (Казалось бы, что все, это необходимо, должно иметь оба подключенные диска и затем сообщить ZFS, что старый диск собирается быть выведенным из эксплуатации, таким образом давая ему шанс переместить данные по нему к другим дискам, почти таким же, как был бы сделан, если бы это было перепосеребрением в избыточном массиве.) –  a CVn 31.07.2013, 15:04
  • 2
    @MichaelKjörling, я не говорю это. Я просто говорю, что вышеупомянутое должно работать, поскольку я не вижу причины, почему это не было должно. –  Stéphane Chazelas 31.07.2013, 15:41
  • 3
    Однако похоже, что ZFS поддерживает его действительно. Ответ обновляется. –  Stéphane Chazelas 31.07.2013, 15:51
  • 4
    Здорово! Это - вид ответа, который я искал и надеялся добраться. Дал бы Вам еще +1 для испытания его, если я мог. –  a CVn 31.07.2013, 16:18

Теги

Похожие вопросы