FreeBSD auf ZFS installieren
Möchte man FreeBSD auf ZFS installieren, so ist das noch nicht über die Installationsroutine möglich. Unter http://www.ish.com.au/solutions/articles/freebsdzfs findet man ein Anleitung wie man FreeBSD trotzdem auf ZFS installieren kann. Hier eine kleine Zusammenfassung: Um FreeBSD auf ZFS zu installieren, muss man mindestens FreeBSD 7 einsetzen. Man erstellt zuerst mit sysinstall einen Slice über die ganze Festplatte und anschliessend ein Label so, dass die Partition a 512 MB gross ist, und als / gemountet wird. Auch die Swappartition wird bereits erstellt. Im Rest des Slices wird eine Partition gelabelt, welche nicht formatiert und gemountet wird. In / wird dann ein minimal FreeBSD installiert.
Danach wird das installierte System im Single User Mode gestartet und die / Partition schreibend gemountet:
# mount -w /Nun kann auf dem freien Speicherplatz ein ZFS-Pool erstellt werden:
# zpool create tank /dev/ad0s1d
WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6
Danach können die Dateisysteme für /usr, /var und /tmp erstellt werden:
# zfs create tank/usr
# zfs create tank/var
# zfs create tank/tmp
Mit folgendem Eintrag in der /etc/rc.conf wird das ZFS Kernelmodul beim Booten geladen:
# echo 'zfs_enable="YES"' >> /etc/rc.conf
Nun kann der Inhalt der root-Partition auf das ZFS-Dateisystem verschoben werden:
# find -x / | cpio -pmd /tank
471416 blocks
Da FreeBSD noch nicht von ZFS booten kann, muss die bestehende UFS-Partition als boot-Partition verwendet werden:
# rm -rf /tank/boot
# mkdir /tank/bootdir
# cd /tank
# ln -s bootdir/boot boot
In der /tank/etc/fstab muss nun der Eintrag für die UFS boot-Partition geändert werden:
/dev/ad4s1a /bootdir ufs rw 1 1
Nun muss in der /boot/loader.conf eingetragen werden, dass das ZFS root-Dateisystem beim Booten geladen werden soll:
# echo 'zfs_load="YES"' >> /boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:tank"' >> /boot/loader.conf
Zum Schluss müssen noch die ZFS-Mountpoints für /usr, /var und /tmp konfiguriert werden und dabei sichergestellt werden, dass /tank nicht gemountet wird, da dies nun das root-Dateisystem ist:
# zfs set mountpoint=/tmp tank/tmp
# zfs set mountpoint=/usr tank/usr
# zfs set mountpoint=/var tank/var
# zfs set mountpoint=legacy tank
Jetzt sind alle Einstellungen gemacht und FreeBSD kann neu gestartet werden:
# shutdown -r now
Falls man möchte, können nun nicht gebrauchte Dateien aus der UFS boot-Partition gelöscht werden:
# cd /bootdir
# chflags noschg var/empty
# rm -rf usr var tmp COPYRIGHT home compat media mnt proc bin cdrom dev dist etc lib libexec root sbin sys
Mehr Informationen dazu findet man im FreeBSD wiki: http://wiki.freebsd.org/ZFSOnRoot
Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html
Comments
In diesem Blog wurde schon oftmals über ZFS berichtet, geschrieben und diskutiert. Aber auch andere Blogs beschäftigen sich ausgiebig mit ZFS unter FreeBSD und bieten dazu gleich noch Beispiele an wie sich was umsetzen lässt. Daher soll das Wort Bea
Erst mal vielen Dank fuer diesen tollen Beitrag.
Weare es ach moeglich einen solchen Beitrag zfs only Systeme zu machen.
Ich bin zur Zeit gerade an einem Artikel über ein reines ZFS System ohne UFS-Hilfspartition am schreiben. Ich hoffe, dass ich diesen am Wochenende fertig habe.
Kleine Anmerkung noch:
Mit FreeBSD 9.0 kann auch ein Erfolg nach der Methode vermeldet werden.
Wenn man in die Rootpartition /dev/ad0s1a kernel.tgz + base.tgz installiert, dann sind 512MB zu knapp. Mit 1GB gab es keine Probs.
Ein Eintrag in der /tank/etc/fstab mu:sste vermutlich:
"/dev/ad0s1a /bootdir ufs rw 1 1 "
heiszen.