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

Одна возможность, и необходимо стараться исключить любых других прежде, чем рассмотреть это, то, что Вы встретились с тем, что надеется быть ошибкой с gummiboot, где различным ядрам с тех пор, по крайней мере, 3.10.x (и possbly ранее) просто не удалось загрузиться.

Было много потоков на платах Arch, документирующих эту проблему, включая это последнее один приблизительно 3.12.2.

Один способ определить, является ли это Вашей проблемой, состоит в том, чтобы использовать другой диспетчер начальной загрузки UEFI, любят, повторно находят.

Прежде всего, тем не менее, необходимо загрузить из живого носителя, chroot и проверить журнал pacman для наблюдения точно, что было обновлено. Удостоверьтесь, что файлы gummiboot были успешно установлены на EFI, особенно если он не смонтирован в /boot/.

3
02.07.2014, 20:38
3 ответа

Единственный способ сделать это, как вы предлагаете: скопировать все наборы данных в новый пул и пересобрать этот. zfs не поддерживает расширение raidz1 путем добавления в него дисков, и также не поддерживает удаление vdevs верхнего уровня (что и есть "зеркало").

.
0
27.01.2020, 21:43

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

Из-за нехватки памяти (так что вы захотите подтвердить), я считаю, что вам нужен вариант zpool add , чтобы иметь возможность увеличить существующий пул raidz.

Чтобы легко перемещать данные, вы можете использовать zfs send | receive вместе с использованием моментальных снимков для инкрементальной отправки |

0
27.01.2020, 21:43

Краткий ответ:

What's the best way to add... more... drives to RaidZ1 and completely remove the mirrored drives,... without:

  • Copying the data to a temporary holding spot
  • Recreating the pool
  • Copying it back

Вы не можете. Полная остановка. Учитывая вашу конфигурацию, вы не сможете удалить зеркальные диски без создания нового пула и копирования в него. Особенно с учетом времени вашего сообщения ZFS не поддерживает удаление VDEV из пула. Для читателей, которые столкнулись с этой проблемой в последнее время, на момент написания этой статьи zpool removeне поддерживает удаление VDEV из пула, содержащего один или несколько raidzVDEV. zpool removeподдерживает удаление составных дисков или составных зеркал.

Длинный ответ:

У вас несколько необычная конфигурация raidz1vdev, соединенного с зеркальным vdev. Вы не сможете удалить зеркальный vdev из пула, за исключением создания нового пула, копирования данных из старого пула в новый пул и последующего уничтожения старого пула.

Но вы, безусловно, можете увеличить емкость вашего текущего пула, если вы не измените его структуру vdev.

Поэтому вместо добавления дополнительных дисков вы можете переключиться на большие диски. Это относительно безболезненно, хотя и повлечет за собой несколько итераций переноса пула на каждый новый диск, по одной за раз. Но ZFS более эффективна в отношении повторного использования, чем традиционный RAID, поэтому в зависимости от того, насколько заполнен ваш пул, это может быть не так уж плохо.

Суть в том, что это ДОЛЖНО выполняться по одному диску за раз. Начните с того, что убедитесь, что у вас есть полная и проверенная резервная копия вашего пула.

Вот тестовая песочница с тремя дисками 1G, устройствами с /dev/md0 по /dev/md2, с таблицей разделов GPT на каждом:

# gpart show md{0..2}
=>     40  2097072  md0  GPT  (1.0G)
       40      200    1  linux-swap  (100K)
      240  2096872    2  freebsd-zfs  (1.0G)

=>     40  2097072  md1  GPT  (1.0G)
       40      200    1  linux-swap  (100K)
      240  2096872    2  freebsd-zfs  (1.0G)

=>     40  2097072  md2  GPT  (1.0G)
       40      200    1  linux-swap  (100K)
      240  2096872    2  freebsd-zfs  (1.0G)

Из этих дисков я построил raidz1пул:

# zpool create tank raidz1 /dev/md{0..2}p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md0p2   ONLINE       0     0     0
        md1p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  2.75G   196K  2.75G        -         -     0%     0%  1.00x    ONLINE

Мило. Теперь предположим, что у меня есть три новых диска: /dev/md3, md4 и md5. Но вместо того, чтобы быть только дисками 1G, это диски 10G. Они также настроены с таблицами разделов GPT и готовы к работе :

.
# gpart show md{3..5}
=>      40  20971440  md3  GPT  (10G)
        40       200    1  linux-swap  (100K)
       240  20971240    2  freebsd-zfs  (10G)

=>      40  20971440  md4  GPT  (10G)
        40       200    1  linux-swap  (100K)
       240  20971240    2  freebsd-zfs  (10G)

=>      40  20971440  md5  GPT  (10G)
        40       200    1  linux-swap  (100K)
       240  20971240    2  freebsd-zfs  (10G)

Поскольку пул является избыточным,Я могу осторожно заменить один диск в массиве raidz1на один диск большего размера, затем дождаться восстановления резервного копирования пула и затем переходите к замене следующего диска по одному. Я сделаю первый долгий путь,offline-проверив диск, проверив массив, чтобы убедиться, что он все еще работает, а затем заменив маленький диск большим :

.
# zpool offline tank md0p2
# zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
    Sufficient replicas exist for the pool to continue functioning in a
    degraded state.
action: Online the device using 'zpool online' or replace the device with
    'zpool replace'.
config:

    NAME        STATE     READ WRITE CKSUM
    tank        DEGRADED     0     0     0
      raidz1-0  DEGRADED     0     0     0
        md0p2   OFFLINE      0     0     0
        md1p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

Теперь я могу заменить раздел 1G /dev/md0p2на раздел 10G /dev/md3p2. На практике описанный выше шаг zpool offlineне является строго обязательным. Можно перейти непосредственно к этой zpool replaceкоманде:

# zpool replace tank md0p2 md3p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
  scan: resilvered 128K in 00:00:02 with 0 errors on Wed Oct 13 13:46:23 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md1p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  2.75G   265K  2.75G        -         -     0%     0%  1.00x    ONLINE

Обратите внимание, что восстановление серебра завершено. Это очень важно. Если в вашем пуле хранится значительный объем данных, вам придется подождать, время от времени проверяя zpool status tank, пока не завершится повторное преобразование.

После завершения восстановления мы можем приступить к замене второго диска.:

# zpool replace tank md1p2 md4p2

И опять же, мы должны подождать, пока zpool statusне скажет, что повторное серебрение завершено:

# zpool status tank
  pool: tank
 state: ONLINE
  scan: resilvered 134K in 00:00:03 with 0 errors on Wed Oct 13 13:54:17 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md4p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

Теперь, когда переоснащение завершено, мы заменим третий маленький диск большим заменителем:

# zpool replace tank md2p2 md5p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
  scan: resilvered 146K in 00:00:03 with 0 errors on Wed Oct 13 14:55:56 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md4p2   ONLINE       0     0     0
        md5p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  2.75G   319K  2.75G        -         -     0%     0%  1.00x    ONLINE

Итак, теперь старые маленькие диски md0 md1 и md2 больше не находятся в пуле. Пул работает на больших дисках md3, md4 и md5. Но дополнительного места нет, потому что мы не сказали zpoolрасширять массив raidz1. Это легко сделать:

# zpool online -e tank md5p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
  scan: resilvered 146K in 00:00:03 with 0 errors on Wed Oct 13 14:55:56 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md4p2   ONLINE       0     0     0
        md5p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  29.8G   394K  29.7G        -         -     0%     0%  1.00x    ONLINE

Теперь вместо пула 3G у нас есть пул 30G, созданный за счет тщательной замены одного диска за раз и последующего расширения массива.

0
13.10.2021, 22:18

Теги

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