Gmirror

Чтобы был виден массив, должен загружаться модуль

geom_mirror_load="YES" /boot/loader.conf

Один диск с продакшен-системой и данными. Второй диск того же размера.

Наличие/отсутствие данных на нем роли не играет. Вернее, есть там был рейд (на втором диске), то надо сначала его очистить посредством dd. Также обратить внимание на загрузчик, если в BIOS указано грузиться с второго диска, после ребута машина не поднимается.

Если на втором диске имелась система, а также gmirror, то при старте системы может сложится ситуация, что ядро грузится с того диска, который указан в BIOS первым, а корень монтируется с другого диска. В описываемом случае /dev/mirror/gm0 возникал при загрузке и состоял из ad6 (второго диска). При этом gmirror не запустишь на модификацию, потому что он говорит что рассинхронизация библиотек и мира.

Поставил на всякий случай загрузчик на основной диск (как проверить что он там уже есть - не знаю). В качестве результата выводит обычный свой вывод - проверить команду. fdisk -b /boot/boot0 ad8 Потом очистил второй диск, чтобы он не пытался лезть в загрузку и с него корень не монтировался. dd in=/dev/zero of=/dev/ad6 bs=2M count=200

Система загрузилась и перестала монтирровать корень со второго диска, но в mirror/ у ней был только gm0. Поэтому пришлось выполнить следующие команды gmirror (он в /bin) deactivate gm0 ad6 Вывелось 3-4 строки со смыслом, что provider disconnected после этого пропал mirror/gm0

Далее на всякий случай gmirror clear ad6 sysctl kern.geom.debugflags=16 gmirror clear ad8

Поместил на место fstab вариант, где указаны пути через ad8 загрузился

Перезагрузился для пробы. Все встает. Снова выполнил команду создания рейд и записи метаданных. Перезагрузил, все запустилось. Осталось лишь gmirror insert -v gm0 /dev/ad6 gmirror rebuild -v gm0 /dev/ad6

gmirror status  Name   Status  Components mirror/gm0 DEGRADED  ad8 ad6 (91%) 

В данном случае диск основной - ad8

echo 'geom_mirror_load="YES"' >> /boot/loader.conf

sysctl kern.geom.debugflags=16 gmirror label -v -n -b load gm0 /dev/ad8

Переименование имен дисков в fstab. В /etc/ образуется файл fstab.copy с оригинальным состоянием. sed -i .copy -e 's/ad8/mirror\/gm0/g' /etc/fstab

Было /dev/ad8s1b            none            swap    sw              0       0 /dev/ad8s1a            /               ufs     rw              1       1 /dev/ad8s1g            /backup         ufs     rw              2       2 /dev/ad8s1h            /opt            ufs     rw              2       2 /dev/ad8s1d            /tmp            ufs     rw              2       2 /dev/ad8s1f            /usr            ufs     rw              2       2 /dev/ad8s1e            /var            ufs     rw              2       2
 * 1) Device                Mountpoint      FStype  Options         Dump    Pass#

Стало (всегда одно и то же имя будет - только зависеть от количества разделов) /dev/mirror/gm0s1b             none            swap    sw              0       0 /dev/mirror/gm0s1a             /               ufs     rw              1       1 /dev/mirror/gm0s1g             /backup         ufs     rw              2       2 /dev/mirror/gm0s1h             /opt            ufs     rw              2       2 /dev/mirror/gm0s1d             /tmp            ufs     rw              2       2 /dev/mirror/gm0s1f             /usr            ufs     rw              2       2 /dev/mirror/gm0s1e             /var            ufs     rw              2       2
 * 1) Device                Mountpoint      FStype  Options         Dump    Pass#

sysctl -a|grep ad6 kern.disks: ad8 ad6 dev.subdisk.6.%parent: ad6

Вопросы
Swap will be handled automatically by geom: раньше надо было выключать даже системный рейд. команда df won't show your swap partition; you can verify it with: swapinfo Если добавляемый диск меньше оставшегося в системе, можно попробовать Очистить диск попробовать посредством dd-ing /dev/zero to the "smaller"
 * Надо ли swap оставлять на одном из дисков или все же на рейд?
 * Есть ли понятие "главного диска", того с которого первоначально создается массив?
 * Как поступать в том случае, когда второй диск (пустой меньшего размера).
 * Выбор алгоритма load, на не rr - round-robin читает каждый диск по очереди. поэтому он говно (гаваряд)

Проигрывалось видео, внезапно картинка остановилась, все зависло - на индикаторе состояние системы - желтый цвет, interrupt 100% и потом проигрывание продолжается. В dmesg ad12: TIMEOUT - READ_DMA48 retrying (1 retry left) LBA=1268714639 ad12: TIMEOUT - READ_DMA48 retrying (0 retries left) LBA=1268714639 ad12: FAILURE - READ_DMA48 timed out LBA=1268714639 GEOM_MIRROR: Request failed (error=5). ad12[READ(offset=649581895168, length=49152)] GEOM_MIRROR: Device gm0: provider ad12 disconnected. gmirror status Name   Status  Components mirror/gm0 DEGRADED  ad14
 * Ситуации

Потом также развалилось. Заметил через пол-месяца при загрузке. GEOM_MIRROR: Component ad12 (device gm0) broken, skipping. GEOM_MIRROR: Device mirror/gm0 launched (1/2).

В /var/log/messages поискал broken, отмотал назад и увидел Mar 15 01:54:20 leksey kernel: ad12: TIMEOUT - READ_DMA48 retrying (1 retry left) LBA=1506553839 Mar 15 01:54:27 leksey kernel: ad12: TIMEOUT - READ_DMA48 retrying (0 retries left) LBA=1506553839 Mar 15 01:54:33 leksey kernel: ad12: FAILURE - READ_DMA48 timed out LBA=1506553839 Mar 15 01:54:33 leksey kernel: GEOM_MIRROR: Request failed (error=5). ad12[READ(offset=771355565568, length=16384)] Mar 15 01:54:33 leksey kernel: GEOM_MIRROR: Device gm0: provider ad12 disconnected.

В gmirror list только один диск