собственно, для понимания как оно вообще, и для закрепления навыков отредактировал вот этот скрипт:
https://sites.google.com/site/luzanov/freebsd/zfs/root_zfs
под себя.
как использовать:
записать на флешку имидж 9ки фри, подмонтировать флешку к фревой железке, и скопировать в произвольную (я поклал в /custom) папочку скриптик следующего содержания:
#!/bin/sh
# Vars
dev=ada0
tank=zroot
if_wan=em0
hostname=new.corp.filanco.ru
#prepare
echo "preparing environment..."
echo "load modules..."
kldload opensolaris
kldload zfs
echo "ram /tmp creating..."
umount /dev/md1
echo "md1 unmounted..."
mdmfs -s 512M md1 /tmp
echo "md1 ram mounted ..."
chmod 1777 /tmp
echo "1777 priveleges on /tmp granted..."
#clean up
gpart show
echo "zfs cleanup..."
zfs unmount -a
zpool destroy zroot
echo "deleting gpt partitions..."
gpart delete -i 3 ada0
gpart delete -i 2 ada0
gpart delete -i 1 ada0
echo "gpt partitions is deleted..."
echo "destroing gpt provider..."
gpart destroy ada0
echo "provider destroyed..."
echo " "
# gpart
echo "### Create GPT, add partitions...###"
gpart create -s GPT $dev
gpart add -b 34 -s 64k -t freebsd-boot $dev
gpart add -b 2048 -s 4G -t freebsd-swap -l swap $dev
gpart add -t freebsd-zfs -l disk0 $dev
echo "### GPT on $dev created, partitions added. ###"
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev
gpart show $dev
# Create ZFS pool
echo "### Create ZFS pool...###"
zpool create -f $tank /dev/gpt/disk0
zpool set bootfs=$tank $tank
echo "### zfs tank created, bootcode writed ###"
# Create ZFS-filesystem
echo "### Create filesystem...###"
zfs set atime=off $tank
zfs set checksum=fletcher4 $tank
zfs set mountpoint=/mnt $tank
# Export and import the pool
zpool export $tank
zpool import -o cachefile=/var/tmp/zpool.cache $tank
echo "### zfs cache exported/imported ###"
zfs create -o compression=on -o exec=on -o setuid=off $tank/tmp
chmod 1777 /mnt/tmp
zfs create $tank/usr
zfs create $tank/usr/home
cd /mnt ; ln -s /usr/home home
zfs create -o compression=off -o setuid=off $tank/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off $tank/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off $tank/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off $tank/usr/src
zfs create $tank/var
zfs create -o compression=lzjb -o exec=off -o setuid=off $tank/var/crash
zfs create -o exec=off -o setuid=off $tank/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off $tank/var/db/pkg
zfs create -o exec=off -o setuid=off $tank/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off $tank/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off $tank/var/mail
zfs create -o exec=off -o setuid=off $tank/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off $tank/var/tmp
chmod 1777 /mnt/var/tmp
echo "### ZFS-filesystem structure: ###"
zfs list
sleep 3
# install base system
echo "### Install base system... ###"
cd /usr/freebsd-dist
export DESTDIR=/mnt
for file in base.txz kernel.txz lib32.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}) ; done
echo "### System has bin installed... ###"
echo "### Copy zpool cache... ###"
cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache
# install base config
echo "### Install base config... ###"
echo "zfs_enable=\"YES\"" > /mnt/etc/rc.conf
echo "hostname=\"$hostname\"" >> /mnt/etc/rc.conf
echo "ifconfig_$if_wan=\"inet 10.20.0.254 netmask 255.255.255.0\"" >> /mnt/etc/rc.conf
echo "defaultrouter=\"10.20.0.1\"" >> /mnt/etc/rc.conf
echo "sshd_enable=\"YES\"" >> /mnt/etc/rc.conf
echo 'zfs_load="YES"' > /mnt/boot/loader.conf
echo 'coretemp_load="YES"' >> /mnt/boot/loader.conf
echo "vfs.root.mountfrom=\"zfs:$tank\"" >> /mnt/boot/loader.conf
echo 'vfs.zfs.prefetch_disable=1' >> /mnt/boot/loader.conf
echo 'vm.kmem_size="1500M"' >> /mnt/boot/loader.conf
echo 'vm.kmem_size_max="1500M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc="1024M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc_max="1024M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.vdev.cache.size="20M"' >> /mnt/boot/loader.conf
echo 'loader_logo="beastie"' >> /mnt/boot/loader.conf
echo "/dev/gpt/swap none swap sw 0 0" > /mnt/etc/fstab
echo "nameserver 195.128.48.65" > /mnt/etc/resolv.conf
echo "nameserver 8.8.8.8" >> /mnt/etc/resolv.conf
echo "#### fstab ###"
cat /mnt/etc/fstab
echo "### /boot/loader.conf ###"
cat /mnt/boot/loader.conf
echo "### /etc/rc.conf ###"
cat /mnt/etc/rc.conf
# correct ZFS mount points and quotas
echo "### Set mount points and quotas...###"
zfs unmount -af
zfs set mountpoint=legacy $tank
zfs set mountpoint=/usr $tank/usr
zfs set quota=4G $tank/tmp && zfs set mountpoint=/tmp $tank/tmp
zfs set quota=4G $tank/var && zfs set mountpoint=/var $tank/var
sleep 5
zpool status
sleep 15
echo "### Choice your time zone... ###"
sleep 5
tzsetup
cd /etc/mail
make aliases
echo "### done! ###"
отмонтировать флешку и воткнуть ее в целевую (ту, на которую собираемся ставить) железку. железка должна быть чистой. на ней не должно быть никаких полезных данных, т.к флешка убъет все, что есть на диске /dev/ada0. загрузиться с флешки, и выбрать «Live CD». перемонтировать корневую fs в rw:
# mount -o rw / (это может и не обязательно, но вдруг пригодиться)
запустить на исполнение скрипт, дальше он все сделает сам. в конце надо будет только выбрать часовой пояс.
скрипт планирую дотачивать, вносить в него некоторую гибкость и кастомабельность. но это в будущем, пока и так сгодится.
вот тут с офффорума, как надо это делать:
http://forums.freebsd.org/showthread.php?t=23544