====== Allgemein ====== ZFS ist ein modernes Dateisystem welches gegenüber UFS einige Vorteile bietet. Einige Dieser Vorteile sind: *Instant Snapshots (für Backups) *Ein integrierter LVM *Integrierte Quotas *Komprimierung einzelner Dateisysteme *Verschiedene RAID-Levels (Mirror, RAID-Z). Als Nachteile sind zu werten: *Etwas komplexeres Handling *Derzeit nur von manuell zu erstellen (Keine Installeroption) *Ressourcenhungrig (64Bit und "ausreichend" RAM sollten vorhanden sein). ====== 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. -Es liegen zwei Festplatten vor -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