Mar. 20th, 2018

victor_sudakov: (Default)
Последовательность действий для установки 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 грузиться не будет.

Ошибка найдена благодаря [livejournal.com profile] dadv, см. также https://docs.freebsd.org/cgi/getmsg.cgi?fetch=22620+0+current/freebsd-questions

Также мой пример использует 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

Profile

victor_sudakov: (Default)
Виктор Судаков

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 21st, 2025 01:07 pm
Powered by Dreamwidth Studios