ZFS ist ein modernes Dateisystem welches gegenüber UFS einige Vorteile bietet. Einige Dieser Vorteile sind:
Als Nachteile sind zu werten:
Es wird hier davon ausgegangen, dass ein vorhandenes System welches mit UFS partitioniert wurde in ein reines ZFS-System umgewandelt wird. Damit das Vorgehen ohne Datenverlust durchführbar ist muss eine von zwei Vorraussetzungen erfüllt sein.
Im Weiteren wird davon ausgegangen, dass zwei Festplatten gleicher Größe vorliegen. Auf Festplatte ada0 liegt das aktuelle System und ada1 wird neu mit ZFS angelegt. Zum Ende wird ada0 zusammen zu ada1 in ein zmirror (also ein RAID1-Verband in ZFS) überführt.
Zunächst wird die 2. Festplatte ada1 partitioniert. Sie erhält einen Bootsector um später das System starten zu können und eine 8GB große Swap-Partition für Auslagerungen. Der Rest der Festplatte wird für das ZFS zur Verfügung gestellt.
# gpart create -s gpt ada1 # gpart add -b 34 -s 128k -t freebsd-boot ada1 # gpart add -s 8G -a 1m -t freebsd-swap -l swap1 ada1 # gpart add -a 1m -t freebsd-zfs -l disk1 ada1 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
Bevor mit ZFS gearbeitet werden kann müssen die hierfür nötigen Kernelmodule geladen werden.
# kldload opensolaris # kldload zfs
Im nächsten Schritt wird der zpool angelegt und die ZFS-Datasets (die ZFS-Partitionen) angelegt. Zunächst wird mittels des ashift-Werts eine Sektorgröße von mindestens 4K-Blöcken erzwungen.
# sysctl vfs.zfs.min_auto_ashift=12 # zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot /dev/gpt/disk1 # zpool set bootfs=zroot zroot # zfs set checksum=fletcher4 zroot # zfs create zroot/usr # zfs create zroot/usr/home # zfs create zroot/usr/home/user1 # zfs create zroot/usr/jails # zfs create zroot/usr/local # zfs create zroot/var # zfs create -o setuid=off zroot/usr/ports # zfs create -o exec=on -o setuid=off zroot/tmp # zfs create -o compression=gzip -o exec=off -o setuid=off zroot/usr/src
Das Verzeichnis /tmp benötigt besondere Rechte damit jeder Nutzer darin seine temorären Daten ablegen kann.
# chmod 1777 /mnt/tmp
Nachdem das Dateisystem komplett angelegt ist können die Daten der alten Festplatte ada0 eingespielt werden. Dies muss für jede Partition auf ada0 die übernommen werden soll durchgeführt. Im Beispiel hier ist unter ada0p1 das root-Verzeichnis / abgelegt und unter ada0p3 das Verzeichnis /usr.
Alternativ kann an dieser Stelle ein bestehendes Backup eingespielt werden.
# cd /mnt # dump 0Laf - /dev/ada0p1 | restore rf - # cd /mnt/usr # dump 0Laf - /dev/ada0p3 | restore rf - ...
Das neue System muss nun noch angepasst werden. Zunächst wird der ZFS-Cache in das neue System kopiert damit das zpool überhaupt eingebunden werden kann. Als nächstes werden in rc.conf und loader.conf die zfs-optionen gesetzt damit das Kernelmodul geladen wird und alle fehlenden Partitionen eingebunden werden. Abschliessend wird in der loader.conf noch das zu bootende Root-Dateisystem gesetzt. In diesem Fall ist das der zpool.
cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf echo 'zfs_load="YES"' >> /mnt/boot/loader.conf echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
In /mnt/etc/fstab alle Mountpoints löschen oder auskommentieren und folgende Zeile für den Swap ergänzen:
/dev/gpt/swap1 none swap sw 0 0
Nun kann in das neue ZFS-System gebootet werden um zu testen ob alles funktioniert.
Wenn alle Daten von ada0 sicher auf ada1 übertragen wurden kann die Platte in einen Spiegel aufgenommen werden. Hierbei gehen alle auf ada0 vorhandenen Daten verloren!!
Zunächst wird die Festplatte identisch zur ersten partitioniert:
# gpart create -s gpt ada0 # gpart add -b 34 -s 128k -a 1m -t freebsd-boot ada0 # gpart add -s 8G -a 1m -t freebsd-swap -l swap0 ada0 # gpart add -a 1m -t freebsd-zfs -l disk0 ada0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
Anschließend wird die Festplatte zum zroot hinzugefügt. Wird dies mit dem Befehl attach durchgeführt wird automatisch ein Mirror erstellt.
# zpool attach zroot /dev/gpt/disk1 /dev/gpt/disk0
Zum Abschluss muss nur noch die zweite Swap-Partition in /etc/fstab hinzugefügt werden.
/dev/gpt/swap0 swap sw 0 0