Одна возможность, и необходимо стараться исключить любых других прежде, чем рассмотреть это, то, что Вы встретились с тем, что надеется быть ошибкой с gummiboot, где различным ядрам с тех пор, по крайней мере, 3.10.x (и possbly ранее) просто не удалось загрузиться.
Было много потоков на платах Arch, документирующих эту проблему, включая это последнее один приблизительно 3.12.2.
Один способ определить, является ли это Вашей проблемой, состоит в том, чтобы использовать другой диспетчер начальной загрузки UEFI, любят, повторно находят.
Прежде всего, тем не менее, необходимо загрузить из живого носителя, chroot и проверить журнал pacman для наблюдения точно, что было обновлено. Удостоверьтесь, что файлы gummiboot были успешно установлены на EFI, особенно если он не смонтирован в /boot/
.
Единственный способ сделать это, как вы предлагаете: скопировать все наборы данных в новый пул и пересобрать этот. zfs не поддерживает расширение raidz1 путем добавления в него дисков, и также не поддерживает удаление vdevs верхнего уровня (что и есть "зеркало").
. Прежде чем вносить какие-либо изменения, вы можете подумать о запуске zpool scrub
, чтобы убедиться, что все в порядке.
Из-за нехватки памяти (так что вы захотите подтвердить), я считаю, что вам нужен вариант zpool add
, чтобы иметь возможность увеличить существующий пул raidz.
Чтобы легко перемещать данные, вы можете использовать zfs send | receive вместе с использованием моментальных снимков для инкрементальной отправки |
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 из пула, содержащего один или несколько raidz
VDEV. zpool remove
поддерживает удаление составных дисков или составных зеркал.
У вас несколько необычная конфигурация raidz1
vdev, соединенного с зеркальным 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, созданный за счет тщательной замены одного диска за раз и последующего расширения массива.