FreeBSD : installation auto avec zfs

Bonjour,

Un petit billet d'update qui fait suite à un précédent article :
FreeBSD : installation auto

Cet article expliquait comment faire une installation automatique avec des partitions en UFS.

Il est possible de le faire facilement avec la version 13.0 en ZFS.

Par rapport à l'article précédent, il faut éditer le fichier installerconfig et remplacer :

PARTITIONS="${DISKSLICE} MBR {8G freebsd-ufs /, 2G freebsd-swap, 3G freebsd-ufs /var, auto freebsd-ufs /usr }"

Par :

export nonInteractive="YES"
export ZFSBOOT_DISKS="${DISKSLICE}"
export ZFSBOOT_VDEV_TYPE="stripe"
export ZFSBOOT_POOL_CREATE_OPTIONS="-O compress=lz4 -O checksum=fletcher4"
export ZFSBOOT_BEROOT_NAME="ROOT"
export ZFSBOOT_BOOTFS_NAME="default"
export ZFSBOOT_SWAPFS_NAME="swap"

ZFSBOOT_SWAP_SIZE=1g
export ZFSBOOT_DATASETS="
    /ROOT                mountpoint=none
    /ROOT/default        quota=10g,reservation=10g,mountpoint=/

    /tmp        quota=1g,reservation=1g,mountpoint=/tmp,exec=on,setuid=off
    /usr        mountpoint=/usr
    /var        quota=5g,reservation=5g,mountpoint=/var
"

Détail des options :

  • nonInteractive = permet de dire à l'installeur qu'il n'est pas en mode intéractif et donc qu'il ne faut pas attendre de validation d'un humain
  • ZFSBOOT_DISKS = détermine le disque à utiliser pour l'installation
  • ZFSBOOT_VDEV_TYPE = détermine la topology disque pour ZFS dans ce cas, un seul disque = stripe
  • ZFSBOOT_POOL_CREATE_OPTIONS = détermine certaines options de base pour zfs
  • ZFSBOOT_BEROOT_NAME = détermine le nom du zdev root
  • ZFSBOOT_BOOTFS_NAME = détermine le nom du zdev boot
  • ZFSBOOT_SWAPFS_NAME = détermine le nom du zdev swap
  • ZFSBOOT_SWAP_SIZE = détermine la taille du swap
  • ZFSBOOT_DATASETS = détermine les différents dataset que l'on veut.

La description des datasets n'est pas obligatoire. Si rien n'est précisé, alors tout sera dans le même dataset.

Dans mon cas, cela crée plusieurs datasets pour séparer tmp/usr/var. Ces descriptions ont des options :

  • quota = permet de limiter la taille maxi
  • réservation = permet de réserver cette taille afin d'être sur d'avoir l'espace disque
  • mountpoint = défini le point de montage
  • exec = permet d'executer des fichiers depuis ce FS
  • setuid = active ou pas le suid

Une fois l'iso générée et l'installation faite, cela donne ce résultat niveau "partitions" (qui sont maintenant des datasets) :

root@freebsd-auto:~ # zfs list
NAME                 USED  AVAIL     REFER  MOUNTPOINT
zroot               16.4G  12.2G       96K  /zroot
zroot/ROOT          10.0G  12.2G       96K  none
zroot/ROOT/default   107M  9.90G      107M  /
zroot/tmp            108K  1024M      108K  /tmp
zroot/usr            437M  12.2G      437M  /usr
zroot/var           2.43M  5.00G     2.43M  /var
root@freebsd-auto:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     10G    107M    9.9G     1%    /
devfs                 1.0K    1.0K      0B   100%    /dev
zroot/var             5.0G    2.4M    5.0G     0%    /var
zroot/tmp             1.0G    108K    1.0G     0%    /tmp
zroot                  12G     96K     12G     0%    /zroot
zroot/usr              13G    437M     12G     3%    /usr

Have fun.