Installation FreeBSD sur ZFS

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

J'adore ZFS et pour me faire un gros NAS, j'ai besoin de FreeBSD qui est capable de faire du ZFS et tout particulièrement l'utiliser sur la partition root également.

Pour celà j'ai donc eu besoin de 5 disques de même capacité et du DVD de FreeBSD (j'insiste sur le DVD car la version livefs ou CD ne contiennent pas tout ce qu'il faut pour pouvoir booter sur du ZFS).

2 Formatage des disques

2.1 Création des partitions

Bootez sur le DVD de FreeBSD et lancez le menu Fixit.

Une fois dedans, je vous invite à prendre connaissance des noms des devices installés sur votre OS :

Command ls
> ls /dev/ad*
/dev/ad10 /dev/ad12 /dev/ad4 /dev/ad6 /dev/ad8

Avant de créer les partitions et les slices, sachez que vous pouvez à n'importe quel moment regarder l'état de vos disque comme ceci :

Command gpart
gpart show ad10

Nous allons définir le type des format des disques en GPT :

Command gpart
gpart create -s gpt ad10
gpart create -s gpt ad12
gpart create -s gpt ad4
gpart create -s gpt ad6
gpart create -s gpt ad8

Ensuite nous allons créer une partition de boot :

Command gpart
gpart add -b 34 -s 128 -t freebsd-boot ad10
gpart add -b 34 -s 128 -t freebsd-boot ad12
gpart add -b 34 -s 128 -t freebsd-boot ad4
gpart add -b 34 -s 128 -t freebsd-boot ad6
gpart add -b 34 -s 128 -t freebsd-boot ad8

Et une partition de swap (4Go par exemple) :

Command gpart
gpart add -b 162 -s 8388608 -t freebsd-swap -l swap0 ad10
gpart add -b 162 -s 8388608 -t freebsd-swap -l swap1 ad12
gpart add -b 162 -s 8388608 -t freebsd-swap -l swap2 ad4
gpart add -b 162 -s 8388608 -t freebsd-swap -l swap3 ad6
gpart add -b 162 -s 8388608 -t freebsd-swap -l swap4 ad8

Pour calculer en cylindres la taille souhaiter, c'est assez simple, voici la formule en Mb avec un exemple pour nos 4Go :

taille cylindre = x * 4 * 512
8388608 = 4096 * 4 * 512

Et pour terminer les partitions de données, là ou sera le raid-z :

Command gpart
gpart add -b 8388770 -s 125829120 -t freebsd-zfs -l disk0 ad12
gpart add -b 8388770 -s 125829120 -t freebsd-zfs -l disk1 ad10
gpart add -b 8388770 -s 125829120 -t freebsd-zfs -l disk2 ad4
gpart add -b 8388770 -s 125829120 -t freebsd-zfs -l disk3 ad6
gpart add -b 8388770 -s 125829120 -t freebsd-zfs -l disk4 ad8

A vous d'adapter en fonction de l'espace restant (voir 'gpart show' pour savoir ce qu'il vous reste).
On installe le protected MBR et le gptzfsboot à chaque disques :

Command gpart
gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad12
gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad10
gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad4
gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad6
gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad8

2.2 Création du ZFS

Nous allons avoir besoin de charger les modules ZFS :

Command kldload
kldload /mnt2/boot/kernel/opensolaris.ko
kldload /mnt2/boot/kernel/zfs.ko

Et enfin on créer le raidz :

Command
 mkdir /boot/zfs
 zpool create zroot raidz1 /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk2 /dev/gpt/disk3 /dev/gpt/disk4
 zpool set bootfs=zroot zroot

Maintenant nous allons créer les points de montage nécessaires ainsi que les options ZFS pour installer le système.
On active la vérification par checksum sur le filesystem :

Command zfs
zfs set checksum=fletcher4 zroot

On créer une partition pour le /tmp avec quelques options sympas :

Command zfs
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
chmod 1777 /zroot/tmp

Et voilà, c'est terminé pour la partie ZFS.

3 Installation de FreeBSD

Nous allons décompresser une partie e ce qui se trouve sur le DVD dans notre zpool fraichement créer :

Command
cd /dist/8.0-*
export DESTDIR=/zroot
for dir in base catpages dict doc games info lib32 manpages ports; do (cd $dir ; ./install.sh) ; done
cd src ; ./install.sh all
cd ../kernels ; ./install.sh generic
cd /zroot/boot ; cp -Rlp GENERIC/* /zroot/boot/kernel/

On se chroot dans notre nouvel environnement :

Command chroot
chroot /zroot

Et on configure le fichier rc.conf :

Configuration File /etc/rc.conf
zfs_enable="YES"
hostname="freebsd.deimos.fr"
ifconfig_re0="DHCP"

Et le fichier bootloader :

Configuration File /boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:zroot"

3.1 Configuration

On configure le password de root :

Command passwd
passwd

La timezone :

Command tzsetup
tzsetup

Les alias mail :

Command
cd /etc/mail
make aliases

On démonte et sort du chroot :

Command
umount /dev
exit

Et on copie le cache du zpool :

Command cp
cp /boot/zfs/zpool.cache /zroot/boot/zfs/zpool.cache

On créer le fstab :

Configuration File /zroot/etc/fstab
# Device                       Mountpoint              FStype  Options         Dump    Pass#
/dev/gpt/swap0                 none                    swap    sw              0       0
/dev/gpt/swap1                 none                    swap    sw              0       0
/dev/gpt/swap2                 none                    swap    sw              0       0
/dev/gpt/swap3                 none                    swap    sw              0       0
/dev/gpt/swap4                 none                    swap    sw              0       0

On démonte le zpool :

Command export
export LD_LIBRARY_PATH=/mnt2/lib
zfs unmount -a

Et on configure les points de montage de nos zfs :

Command
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp

Il ne reste plus qu'a sortir du mode fixit et du sysinstall pour rebooter.

4 FAQ

4.1 RaidZ2 degraded

Qu'est-ce qu'il se passe si vous avez un disque en mode dégradé ? C'est simple déjà, on va faire un status histoire de voir ce que ça donne :

Command zpool
> zpool status -x
  pool: zroot
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-2Q
 scrub: none requested
...

Là on peut voir l'état "DEGARDED". Pour aller au plus simple :

  • Si la machine est allumée : remplacez le disque défectueux par un neuf.
  • Si la machine est éteinte ou que vous souhaitez l'éteindre : bootez sur le DVD de FreeBSD, chargez les modules de ZFS.

Recréez ensuite les partitions comme vous avez fait pour les autres disques. Puis nous allons ajouter le nouveau disque dans le raidz2 afin que celui ci reconstruise automatiquement ce qu'il faut :

Command zpool
zpool replace zroot /dev/gpt/disk3

Ici mon disk3 était défectueux, j'ai donc recréer exactement les mêmes partitions sur le nouveau disque et l'ajoute. Lorsque l'on fait un status, on peut voir que les autres disques reconstruisent le nouveau :

Command zpool
> zpool status
  pool: zroot
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h4m, 92.79% done, 0h0m to go
config:

	NAME                        STATE     READ WRITE CKSUM
	zroot                       DEGRADED     0     0     0
	  raidz2                    DEGRADED     0     0     0
	    gpt/disk0               ONLINE       0     0     0  4.63M resilvered
	    gpt/disk1               ONLINE       0     0     0  4.63M resilvered
	    gpt/disk2               ONLINE       0     0     0  4.59M resilvered
	    replacing               DEGRADED     0     0     0
	      10045559159691639333  UNAVAIL      0 1.49K     0  was /dev/gpt/disk3/old
	      gpt/disk3             ONLINE       0     0     0  8.22G resilvered
	    gpt/disk4               ONLINE       0     0     0  4.63M resilvered

errors: No known data errors

Une fois terminé, vous pouvez soit rebooter si vous avez choisis la solution d'avoir booter sur le DVD de FreeBSD, soit rien à faire si votre machine était déjà allumée.

5 Ressources

http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/RAIDZ1
Documentation on How to install FreeBSD 7.0 under ZFS
http://www.sun.com/bigadmin/features/articles/zfs_part2_ease.jsp