Administration BSD IT

FreeBSD 9 mit Root on ZFS

Der aktuelle 9.0 Release von FreeBSD unterstützt im mitgelieferten curses-Installer (bsdinstall) leider immer noch nicht die Auswahl des Dateisystems zfs als root-Dateisystem. Das Prozedere der manuellen Installation ist in einigen Punkten durch die neue Installer-/Live-CD um Einiges einfacher geworden. Dabei bin ich nach diesem Howto vorgegangen, welches ich hier quasi nur für den deutschsprachigen Raum und zur eigenen Referenz wiedergebe:

1. Vom FreeBSD9 Installationmedium von CD oder USB-Stick booten und „LIVE-CD“ auswählen

2. Erstellen der notwendigen Partitionen auf den HDDs und Hinzufügen des ZFS Bootcodes

Diese Schritte für jede weitere Festplatte wiederholen (ada0, ada1, ada2 …)

gpart create -s gpt ada0
gpart add -b 34 -s 94 -t freebsd-boot ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

3. Den ZFS pool erstellen

(Warnungen zum Mounten können ignoriert werden)

Installation auf einer HDD (wie in meinem Fall z. B. mit einem LVM-Volume auf dem Linux RAID1 des KVM Hypervisors):

zpool create zroot /dev/gpt/disk0 #-f falls gemeckert wird, wegen etwaiger vorhandener Daten, forcieren

Installation auf einem Mirror-Setup mit 2 HDDs:

zpool create zroot mirror /dev/gpt/disk0 /dev/gpt/disk1

Installation auf einem raidz Setup (ähnlich Raid5) mit mind. 3 HDDs:

zpool create zroot raidz /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2

Installation auf einem raidz2 Setup (ähnlich Raid6) mit mind. 3 HDDs:

zpool create zroot raidz2 /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gpt/disk3

4. Einstellen der bootfs Eigenschaften, Prüfsummen und Mountpoints

zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 zroot
zfs set mountpoint=/mnt zroot

5. An diesem Punkt den Pool ex- und wieder importieren unter Beibehaltung des zroot.cache in /var/tmp

zpool export zroot
zpool import -o cachefile=/var/tmp/zpool.cache zroot

6. Erstellen der Dateisysteme

(Hier kann man natürlich improvisieren)

zfs create zroot/usr
zfs create zroot/home
zfs create zroot/var
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp

7. Swap Speicher anlegen und Prüfsummen deaktivieren

(hier werden 4GB Swap erstellt, je nach eigenen Bedürfnissen anpassen)

zfs create -V 4G zroot/swap
zfs set org.freebsd:swap=on zroot/swap
zfs set checksum=off zroot/swap

8. Symbolische Links nach /home und Berechtigungen korrigieren

chmod 1777 /mnt/tmp
cd /mnt ; ln -s usr/home home
chmod 1777 /mnt/var/tmp

9. Die eigentliche FreeBSD Installation

sh
cd /usr/freebsd−dist
export DESTDIR=/mnt
for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
do (cat $file | tar −−unlink −xpJf − −C ${DESTDIR:−/}); done

10. Den zpool.cache kopieren

(sehr wichtig!)

cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache

11. Erstellen von rc.conf, loader.conf und einer leeren fstab

(sonst meckert das System)

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
touch /mnt/etc/fstab

12. Alles aushängen und Mountpoints für den ersten Boot vorbereiten

zfs set readonly=on zroot/var/empty
zfs umount -af
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var

Jetzt kann das System neu gestartet werden, nach dem Anpassen der Zeitzone, dem Setzen eines Passworts für den root user kann man sein System genießen, oder direkt im Falle einer Virtualisierung unter KVM mit den Einrichten von virtio fortfahren.

Autor

Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein/e Beruf/ung, die weit über den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fuß und bietet mittlerweile professionelle Lösungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich beschäftigt er sich neben Computerspielen mit der Fotografie.

7 Kommentare Neuen Kommentar hinzufügen

  1. Olli sagt:

    Das tar −−unlink −xpJf − −C ${DESTDIR:−/}); done bringt bei mir jede Menge „Could not unlink“. Hoffe mal, dass das dennoch ok ist.

      1. Olli sagt:

        Irgendwann hat er es akzeptiert. Im Übrigen gab es die lib32.txz bei mir im freebsd-dist Folder nicht mehr.

        Hast du noch nen Tipp, wie ich der Hardware sage, dass er die ada0 als bootmedium nehmen soll? Von alleine macht es das scheinbar nicht.

        1. Wenn der boot record erstellt wurde (gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0), reicht es aus, die Festplatte im BIOS als erste in der Bootreihenfolge einzustellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.