Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
system_von_ufs_auf_zfs_umstellen [2016/01/30 19:22] rakor [Vorraussetzung] |
system_von_ufs_auf_zfs_umstellen [2017/10/02 13:40] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== 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. | ||
- | <code> | ||
- | # gpart create -s gpt ada1 | ||
- | # gpart add -b 34 -s 128k -t freebsd-boot ada1 | ||
- | # gpart add -s 8G -t freebsd-swap -l swap1 ada1 | ||
- | # gpart add -t freebsd-zfs -l disk1 ada1 | ||
- | # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1 | ||
- | </code> | ||
- | |||
- | ====== Module laden ====== | ||
- | Bevor mit ZFS gearbeitet werden kann müssen die hierfür nötigen Kernelmodule geladen werden. | ||
- | <code> | ||
- | # kldload opensolaris | ||
- | # kldload zfs | ||
- | </code> | ||
- | |||
- | ====== ZFS anlegen ====== | ||
- | Im nächsten Schritt wird der **zpool** angelegt und die ZFS-Datasets (die ZFS-Partitionen) angelegt. | ||
- | <code> | ||
- | # 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 | ||
- | </code> | ||
- | |||
- | ====== Anpassungen ====== | ||
- | Das Verzeichnis ///tmp// benötigt besondere Rechte damit jeder Nutzer darin seine temorären Daten ablegen kann. | ||
- | <code> | ||
- | # chmod 1777 /mnt/tmp | ||
- | </code> | ||
- | |||
- | ====== 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. | ||
- | <code> | ||
- | # cd /mnt | ||
- | # dump 0Laf - /dev/ada0p1 | restore rf - | ||
- | # cd /mnt/usr | ||
- | # dump 0Laf - /dev/ada0p3 | restore rf - | ||
- | ... | ||
- | </code> | ||
- | |||
- | ====== 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. | ||
- | |||
- | <code> | ||
- | 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 | ||
- | </code> | ||
- | |||
- | In ///mnt/etc/fstab// alle Mountpoints löschen oder auskommentieren und folgende Zeile für den Swap ergänzen: | ||
- | <code> | ||
- | /dev/gpt/swap1 none swap sw 0 0 | ||
- | </code> | ||
- | |||
- | ====== 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: | ||
- | <code> | ||
- | # gpart create -s gpt ada0 | ||
- | # gpart add -b 34 -s 128k -t freebsd-boot ada0 | ||
- | # gpart add -s 8G -t freebsd-swap -l swap0 ada0 | ||
- | # gpart add -t freebsd-zfs -l disk0 ada0 | ||
- | # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 | ||
- | </code> | ||
- | |||
- | Anschließend wird die Festplatte zum //zroot// hinzugefügt. Wird dies mit dem Befehl **attach** durchgeführt wird automatisch ein Mirror erstellt. | ||
- | |||
- | <code> | ||
- | # zpool attach zroot /dev/gpt/disk1 /dev/gpt/disk0 | ||
- | </code> | ||
- | |||
- | Zum Abschluss muss nur noch die zweite Swap-Partition in ///etc/fstab// hinzugefügt werden. | ||
- | |||
- | <code> | ||
- | /dev/gpt/swap0 swap sw 0 0 | ||
- | </code> | ||