Повторил свою инсталяцию в виртуалке, bootcode не обновлял. Никаких проблем после перезагрузки не выявлено.
Выходит ничего и не надо обновлять!?
в этом, конкретном случае 12.1 -> 12.2 - "да", но при серьезных изменениях в zfs, надо:
# man zfsboot
zfsboot – загрузочный код ZFS на BIOS-based компьютерах
zfsboot устанавливается в виде двух частей на диск или партицию используемую
ZFS пулом.
Первая часть - односектроный стартовый загрузочный блок, устанавливается
в начало диска или партиции.
Вторая часть, основной загрузочный блок, устанавливается на диск или
партицию с заданным смещением.
Обе области диска являются зарезервированными по спецификации ZFS
для использования загрузки.
Если zfsboot установлен на партицию, эта партиция должна быть
загрузочной в соответствии с описанием boot(8). ( # man 8 boot )
Код: Выделить всё
EXAMPLES
zfsboot обычно устанавливается с использованием dd(1).
Для установки zfsboot на диск ada0, необходимо выполнить:
dd if=/boot/zfsboot of=/dev/ada0 count=1
dd if=/boot/zfsboot of=/dev/ada0 iseek=1 oseek=1024
Есди диск уже используется в системе, GEOM постарается защитить его
от прямой записи в специальные области, чтобы избежать этого
необходимо выполнить:
# sysctl kern.geom.debugflags=0x10
Ваш случай:
zfsboot может быть установлен на партицию MBR:
- создаем таблицу партиций MBR на диске ada0
# gpart create -s mbr ada0
- создаем партицию с типом freebsd на весь диск
# gpart add -t freebsd ada0
- записываем загрузчик первой стадии на диск ada0
# gpart bootcode -b /boot/boot0 ada0
- помечаем партицию как активную (все это в традиционных терминах старой MBR)
# gpart set -a active -i 1 ada0
- на всякий случай затираем 2'а сектора на ПЕРВОЙ партиции ada0s1 (это наша партиция с типом freebsd)
# dd if=/dev/zero of=/dev/ada0s1 count=2
- пишем в первый сектор партиции ada0s1 -> zfsboot - первая часть загрузки (см выше описание: zfsboot пишется в виде двух частей)
# dd if=/boot/zfsboot of=/dev/ada0s1 count=1
- iseek - пропускает первый блок в zfsboot, остальное пишет на первую партицию ada0s1 со смещением в 1024 блока
# dd if=/boot/zfsboot of=/dev/ada0s1 iseek=1 oseek=1024
Теперь касательно верхнего примера для Вас:
mbr у вас уже есть - диск размечен, соответственно: gpart create -s mbr ada0 / НЕ НУЖНО
партиция "freebsd" тоже есть: gpart add -t freebsd ada0 / НЕ НУЖНО
- загрузчик первой стадии уже тоже прописан: gpart bootcode -b /boot/boot0 ada0 / НЕ НУЖНО
- партиция уже помечена как активная: gpart set -a active -i 1 ada0 / НЕ НУЖНО
Что остается? Правильно, обновить zfsboot (если он изменился)
# dd if=/boot/zfsboot of=/dev/ada0s1 count=1
# dd if=/boot/zfsboot of=/dev/ada0s1 iseek=1 oseek=1024
Внимание, писать zfsboot нужно на партицию с ZFS, в нашем случае, она одна - первая,
отсюда: ada0s1 (ada0 - диск, s1 - первая партиция в терминах M$, или слайс в терминах Unix)
И при инсталляции, это делается на всех дисках, во время установки FreeBSD, переключаемся
на четвертую виртуальную консоль: ALT-F4 и после поднятия сети в инсталлере,
копируем файл-лог установки по сети куда нам нужно для изучения:
# scp /tmp/bsdinstall_log
user@remotehost.domain:/tmp/
Пример /tmp/bsdinstall_log: установка zfs raidz1 на три диска MBR:
Код: Выделить всё
DEBUG: zfs_create_diskpart: gpart destroy -F "da0"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0 destroyed
DEBUG: zfs_create_diskpart: Creating MBR layout...
DEBUG: zfs_create_diskpart: gpart create -s mbr "da0"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0 created
DEBUG: zfs_create_diskpart: gpart bootcode -b "/boot/mbr" "da0"
DEBUG: zfs_create_diskpart: retval=0 <output below>
bootcode written to da0
DEBUG: zfs_create_diskpart: gpart add -a 4k -t freebsd "da0"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0s1 added
DEBUG: zfs_create_diskpart: gpart set -a active -i 1 "da0"
DEBUG: zfs_create_diskpart: retval=0 <output below>
active set on da0s1
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da0s1"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da0s1
DEBUG: zfs_create_diskpart: gpart destroy -F "da0s1"
DEBUG: zfs_create_diskpart: retval=1 <output below>
gpart: arg0 'da0s1': Invalid argument
DEBUG: zfs_create_diskpart: gpart create -s BSD "da0s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0s1 created
DEBUG: zfs_create_diskpart: gpart add -i 1 -t freebsd-zfs -s 2147483648b "da0s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0s1a added
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da0s1a"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da0s1a
DEBUG: zfs_create_diskpart: gpart add -a 4k -i 2 -t freebsd-swap -s 2147483648b "da0s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0s1b added
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da0s1b"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da0s1b
DEBUG: zfs_create_diskpart: gpart add -a 4k -i 4 -t freebsd-zfs "da0s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da0s1d added
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da0s1d"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da0s1d
DEBUG: zfs_create_diskpart: dd if="/boot/zfsboot" of="/dev/da0s1" count=1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DEBUG: zfs_create_diskpart: retval=0 <output below>
1+0 records in
1+0 records out
512 bytes transferred in 0.036392 secs (14069 bytes/sec)
DEBUG: zfs_create_diskpart: printf "$FSTAB_FMT" "/dev/da0s1b" "none" "swap" "sw" "0" "0" >> "/tmp/bsdinstall_etc/fstab"
...
аналогично для второго диска
DEBUG: zfs_create_diskpart: gpart destroy -F "da1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1 destroyed
DEBUG: zfs_create_diskpart: Creating MBR layout...
DEBUG: zfs_create_diskpart: gpart create -s mbr "da1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1 created
DEBUG: zfs_create_diskpart: gpart bootcode -b "/boot/mbr" "da1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
bootcode written to da1
DEBUG: zfs_create_diskpart: gpart add -a 4k -t freebsd "da1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1s1 added
DEBUG: zfs_create_diskpart: gpart set -a active -i 1 "da1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
active set on da1s1
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da1s1"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da1s1
DEBUG: zfs_create_diskpart: gpart destroy -F "da1s1"
DEBUG: zfs_create_diskpart: retval=1 <output below>
gpart: arg0 'da1s1': Invalid argument
DEBUG: zfs_create_diskpart: gpart create -s BSD "da1s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1s1 created
DEBUG: zfs_create_diskpart: gpart add -i 1 -t freebsd-zfs -s 2147483648b "da1s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1s1a added
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da1s1a"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da1s1a
DEBUG: zfs_create_diskpart: gpart add -a 4k -i 2 -t freebsd-swap -s 2147483648b "da1s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1s1b added
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da1s1b"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da1s1b
DEBUG: zfs_create_diskpart: gpart add -a 4k -i 4 -t freebsd-zfs "da1s1"
DEBUG: zfs_create_diskpart: retval=0 <output below>
da1s1d added
DEBUG: zfs_create_diskpart: zpool labelclear -f "/dev/da1s1d"
DEBUG: zfs_create_diskpart: retval=1 <output below>
failed to read label from /dev/da1s1d
DEBUG: zfs_create_diskpart: dd if="/boot/zfsboot" of="/dev/da1s1" count=1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DEBUG: zfs_create_diskpart: retval=0 <output below>
1+0 records in
1+0 records out
512 bytes transferred in 0.018886 secs (27110 bytes/sec)
DEBUG: zfs_create_diskpart: printf "$FSTAB_FMT" "/dev/da1s1b" "none" "swap" "sw" "0" "0" >> "/tmp/bsdinstall_etc/fstab"
аналогично для третьего...
далее создание пула...
И в конце вторая часть записи zfsboot:
DEBUG: zfs_create_boot: Updating MBR boot loader on disks...
DEBUG: zfs_create_boot: dd if="/boot/zfsboot" of="/dev/da0s1a" skip=1 seek=1024
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DEBUG: zfs_create_boot: retval=0 <output below>
512+0 records in
512+0 records out
262144 bytes transferred in 0.227794 secs (1150793 bytes/sec)
DEBUG: zfs_create_boot: dd if="/boot/zfsboot" of="/dev/da1s1a" skip=1 seek=1024
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DEBUG: zfs_create_boot: retval=0 <output below>
512+0 records in
512+0 records out
262144 bytes transferred in 0.192364 secs (1362751 bytes/sec)
DEBUG: zfs_create_boot: dd if="/boot/zfsboot" of="/dev/da2s1a" skip=1 seek=1024
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DEBUG: zfs_create_boot: retval=0 <output below>
512+0 records in
512+0 records out
262144 bytes transferred in 0.205857 secs (1273426 bytes/sec)
Понятно? Понятно почему на все диски в RAIDZ1?