Установка FreeBSD на ZFS в MBR раздел
Mar. 20th, 2018 08:46 amПоследовательность действий для установки FreeBSD (RootOnZFS) в качестве второй (третьей, четвертой... ) операционки. Система получается beadm-ready.
Важно: man zfsboot и статьи https://wiki.freebsd.org/RootOnZFS/ZFSBootPartition , https://wiki.freebsd.org/RootOnZFS/ZFSBootSlice содержат ошибку: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226714 Если делать по написанному в мане (создавать BSD label в разделе, "gpart create -s BSD"), то FreeBSD грузиться не будет.
Ошибка найдена благодаря
dadv, см. также https://docs.freebsd.org/cgi/getmsg.cgi?fetch=22620+0+current/freebsd-questions
Также мой пример использует altroot, что делает установку/клонирование более удобным и исключает ошибку, при которой вновь созданный zroot перекроет / исходной системы.
Сам пример установки:
UPD: моя попытка написать новую статью для FreeBSD Wiki: https://hg.sr.ht/~vas/FAQ/browse/default/FreeBSD/Installing_FreeBSD_Root_on_ZFS_using_FreeBSD-ZFS_partition_in_a_FreeBSD_MBR_Slice.txt
Важно: man zfsboot и статьи https://wiki.freebsd.org/RootOnZFS/ZFSBootPartition , https://wiki.freebsd.org/RootOnZFS/ZFSBootSlice содержат ошибку: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226714 Если делать по написанному в мане (создавать BSD label в разделе, "gpart create -s BSD"), то FreeBSD грузиться не будет.
Ошибка найдена благодаря
Также мой пример использует altroot, что делает установку/клонирование более удобным и исключает ошибку, при которой вновь созданный zroot перекроет / исходной системы.
Сам пример установки:
#!/bin/sh
# sysctl kern.geom.debugflags=0x10 # should not be necessary
DISK=da1
POOL="zroot-test3"
NEWSYSTEM=newsystem
SLICE=2
partition() {
gpart create -s mbr ${DISK}
gpart add -t fat32 -s 1G ${DISK}
gpart add -t freebsd -s 2G -i ${SLICE} ${DISK}
gpart set -a active -i ${SLICE} ${DISK}
}
bootcode() {
gpart bootcode -b /boot/boot0 ${DISK}
dd if=/dev/zero of=/dev/${DISK}s${SLICE} count=2
dd if=/boot/zfsboot of=/dev/${DISK}s${SLICE} count=1
dd if=/boot/zfsboot of=/dev/${DISK}s${SLICE} iseek=1 oseek=1024
}
zfscreate() {
zpool create -m none -R /${NEWSYSTEM} ${POOL} ${DISK}s${SLICE}
zfs create -o mountpoint=none ${POOL}/ROOT
zfs create -o mountpoint=/ ${POOL}/ROOT/default
zfs create -o mountpoint=/usr -o canmount=off ${POOL}/usr
zfs create -o mountpoint=/var -o canmount=off ${POOL}/var
zfs create -o mountpoint=/tmp ${POOL}/tmp
zfs create -o mountpoint=/usr/home ${POOL}/usr/home
zfs create -o mountpoint=/usr/src ${POOL}/usr/src
zfs create -o mountpoint=/usr/ports ${POOL}/usr/ports
zfs create -o mountpoint=/var/audit ${POOL}/var/audit
zfs create -o mountpoint=/var/crash ${POOL}/var/crash
zfs create -o mountpoint=/var/log ${POOL}/var/log
zfs create -o mountpoint=/var/mail ${POOL}/var/mail
zfs create -o mountpoint=/var/tmp ${POOL}/var/tmp
zfs create -V 1G -o org.freebsd:swap=on ${POOL}/swap
zpool set bootfs=${POOL}/ROOT/default ${POOL}
}
clone() {
cd /${NEWSYSTEM} || exit 3
#sleep 10
dump -0af - / | restore -ryf - || exit 3
mv etc/fstab etc/fstab.bak
echo '# empty' > etc/fstab
rm etc/hostid
rm etc/ssh/*key*
echo 'zfs_enable="YES"' >> etc/rc.conf.local
echo 'zfs_load="YES"' >> boot/loader.conf
cd /root
}
zfsexport() {
zpool export ${POOL}
}
partition
bootcode
zfscreate
clone
zfsexport
UPD: моя попытка написать новую статью для FreeBSD Wiki: https://hg.sr.ht/~vas/FAQ/browse/default/FreeBSD/Installing_FreeBSD_Root_on_ZFS_using_FreeBSD-ZFS_partition_in_a_FreeBSD_MBR_Slice.txt