Inhaltsverzeichnis

Allgemein

ZFS ist ein modernes Dateisystem welches gegenüber UFS einige Vorteile bietet. Einige Dieser Vorteile sind:

Als Nachteile sind zu werten:

Voraussetzung

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.

  1. Es liegen zwei Festplatten vor
  2. Es liegt ein Komplettbackup des Systems vor.

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.

Partitionen anlegen

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

Module laden

Bevor mit ZFS gearbeitet werden kann müssen die hierfür nötigen Kernelmodule geladen werden.

# kldload opensolaris
# kldload zfs

ZFS anlegen

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

Anpassungen

Das Verzeichnis /tmp benötigt besondere Rechte damit jeder Nutzer darin seine temorären Daten ablegen kann.

# chmod 1777 /mnt/tmp

Daten einspielen

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 -
...

Nachbereitung

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

Reboot

Nun kann in das neue ZFS-System gebootet werden um zu testen ob alles funktioniert.

Mirror erzeugen

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