Setting up ZFS - Filesystem Properties and Installing on Root

krad kraduk at gmail.com
Tue Nov 22 09:52:42 UTC 2011


> It seems to me that you would only need disk
> 1 to have boot, swap, and zfs, and the other 3 disks only have one
> partition (using the entire drive) for zfs's pool.


As other have mentioned redundancy,  but also you will nver see the befit
as the zfs vdev (like any other raid system) size will defined by the
smallest unit in the group. ie if you have 4 x 1tb drives and you have 3x
1tb slices and 950GB available on your boot drive then all the storage you
will get is 4 x 950 - the parity data. Therefore make all you drives
layouts identical and mirror any boot partitions across them all, or just 2
and use the other 2 for swap or a combination of the 2.

Another way to do it is boot off usb stick although you should be able to
boot off a native raidz these days without to much hassle. If you do run
into issues with booting of zfs though try these recompiled boot blocks as
I never have issues with them.

http://people.freebsd.org/~pjd/zfsboot/

If you are using 4k disks which there is a fairly good chance you are make
sure you create the pool with ashift=12 using the gnop trick. Otherwise you
may experiance bad disk performance.

http://www.leidinger.net/blog/2011/05/03/another-root-on-zfs-howto-optimized-for-4k-sector-drives/

WIth regards to dedup, unless you have bucket loads of ram (32+Gigs) and/or
an ssd dedicated to l2arc stay away from it as you will almost certainly
find that very quickly the DDT wont fit into ram, and when that happens the
performance of the pool takes a serious performance dive do to every write
incuring many many reads to retrieve the ddt information. Also it may not
be worth it with your dataset. To test what you might achieve do a zdb -S
<pool> to see your expected dedup ratio.



in terms of disk layout this is fairly arbitary and you have a lot of
choice. This is what i use, and a loosly based it on opensolaris

system-4k/be                              26.6G   207G   252K  /system-4k/be
system-4k/be/root20110930                 1.73G   207G  1.31G  legacy
system-4k/be/root20111011                 2.03G   207G  1.69G  legacy
system-4k/be/root20111023                 1.98G   207G  1.68G
/system-4k/be/root20111023
system-4k/be/root20111028                 2.00G   207G  1.68G
/system-4k/be/root20111028
system-4k/be/root20111112                 2.08G   207G  1.76G
/system-4k/be/root20111112
system-4k/be/tmp                           360K   209G   360K  /tmp
system-4k/be/usr-local                    3.30G   207G  3.30G  /usr/local/
system-4k/be/usr-obj                       728M   207G   728M  /usr/obj
system-4k/be/usr-ports                    2.05G   207G  1.51G  /usr/ports
system-4k/be/usr-ports/distfiles           547M   207G   547M
/usr/ports/distfiles
system-4k/be/usr-src                       705M   207G   705M  /usr/src
system-4k/be/var                          2.04G   213G   816M  /var
system-4k/be/var/log                      1.21G   213G  1.21G  /var/log
system-4k/be/var/mysql                    34.0M   213G  34.0M  /var/db/mysql


everytime I do a make installword and installkernel I create a new root fs.
This way I can easily flip flop back and two between different os builds if
i want to. I use this simple script to set it up for me. Its not perfect
but it works well enough

$ cat /usr/local/scripts/install_world
#!/usr/local/bin/bash

if [ $UID != 0 ] ; then
  echo your not root !! ; exit 1
fi

date=`date '+%Y%m%d'`
oroot=`grep "vfs.root.mountfrom=\"zfs:system-4k/" /boot/loader.conf | sed
-e "s#^.*\"zfs:system-4k/be/##" -e "s#\"##"`
nroot="root$date"
snap="autoup-$RANDOM"
zpool=system-4k

export DESTDIR=/$zpool/be/$nroot


if [ "$oroot" =  "$nroot" ] ; then
 echo "i cant update twice in one day"; exit 1
fi

echo building in $zpool/be/$nroot

zfs snapshot $zpool/be/$oroot@$snap &&
zfs send $zpool/be/$oroot@$snap | mbuffer -m 500M | zfs receive -vv
$zpool/be/$nroot    &&
cd /usr/src &&
make installkernel &&
mount_nullfs /var $DESTDIR/var &&
mergemaster -p -D $DESTDIR &&
make installworld &&
mergemaster -D $DESTDIR &&
sed -i -e "s#$zpool/be/$oroot#$zpool/be/$nroot#" $DESTDIR/boot/loader.conf
&& \
echo "Installing boot records.." &&
zpool status system-4k | grep -A 2 mirror | grep ad | sed -e "s/p[0-9]//"
|
        while read a b; do
                gpart bootcode -b /zfsboot/pmbr -p /zfsboot/gptzfsboot -i 1
$a;
        done &&
cp -v /zfsboot/zfsloader $DESTDIR/boot/. &&
echo -en "\n\nNow run these two commands to make the changes live, and
reboot
 zfs set mountpoint=legacy $zpool/be/$nroot
 zpool set bootfs=$zpool/be/$nroot $zpool\n\n"


More information about the freebsd-questions mailing list