BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

FreeBSD nur auf ZFS installieren

Möchte man FreeBSD auf einem System nur mit ZFS installieren, so kann man dazu von einer FreeBSD LiveFS CD -ROM oder DVD booten und den Fixit -> CDROM/DVD Modus wählen. Nun kann eine GUID-Partitionstabelle auf der Platte erstellt werden, auf der man FreeBSD mit ZFS installieren kann. Im folgenden Beispiel wird die ganze Festplatte für FreeBSD verwendet, wobei diese noch keine Daten enthält:

Fixit# gpart create -s GPT ad0
ad0 created

Zuerst wird eine Boot-Partition erstellt:

Fixit# gpart add -b 34 -s 128 -t freebsd-boot ad0
ad0p1 added

Mit dem restlichen Speicherplatz wird eine Partition für das ZFS erstellt:

Fixit# gpart show ad0
=>       34  156301421  ad0  GPT  (75G)
         34        128    1  freebsd-boot  (64K)
        162  156301293       - free -   (75G)
Fixit# gpart add -b 162 -s 156301293 -t freebsd-zfs ad0
ad0p2 added

Danach kann der Bootstrap-Code in der Bootpartition installiert werden:

Fixit# gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad0
ad0 has bootcode

Das erstellte Partitionsschema kann mit gpart show kontrolliert werden:

Fixit# gpart show ad0
=>       34  156301421  ad0  GPT  (75G)
         34        128    1  freebsd-boot  (64K)
        162  156301293    2  freebsd-zfs  (75G)

Als nächstes werden die für eine ZFS-Installation benötigten Kernelmodule geladen:

Fixit# kldload /mnt2/boot/kernel/opensolaris.ko
Fixit# kldload /mnt2/boot/kernel/zfs.ko

Danach wird auf der freien Partition ein ZFS-Pool namens rpool erstellt, von dem das System später gebootet wird:

Fixit# zpool create rpool /dev/ad0p2
Fixit# zpool set bootfs=rpool rpool

Darin werden nun die gewünschten ZFS-Dateisysteme erstellt:

Fixit# zfs create rpool/tmp
Fixit# zfs create rpool/usr
Fixit# zfs create rpool/var

Im ZFS-Pool wird danach ein Swap-Bereich erstellt, welcher im folgenden Beispiel 2GB gross ist:

Fixit# zfs create -V 2gb rpool/swap
Fixit# zfs set org.freebsd:swap=on rpool/swap
Fixit# zfs set checksum=off rpool/swap

Nun werden das Basissystem und der Kernel installiert:

Fixit# cd /dist/8.0-BETA2/base
Fixit# export DESTDIR=/rpool
Fixit# ./install.sh
You are about to extract the base distribution into /rpool - are you SURE
you want to do this over your installed system (y/n)? y
Fixit# cd ../kernels
Fixit# ./install.sh generic
Fixit# cd /rpool/boot
Fixit# cp -Rp GENERIC/* kernel/

Desweiteren müssen noch die FreeBSD-Quelldateien sowie die Manpages installiert werden:

Fixit# cd /dist/8.0-BETA2/src
Fixit# ./install.sh all
Extracting sources into /usr/src...
  Extracting source component: base
  Extracting source component: bin
  Extracting source component: cddl
  Extracting source component: contrib
  Extracting source component: crypto
  Extracting source component: etc
  Extracting source component: games
  Extracting source component: gnu
  Extracting source component: include
  Extracting source component: krb5
  Extracting source component: lib
  Extracting source component: libexec
  Extracting source component: release
  Extracting source component: rescue
  Extracting source component: sbin
  Extracting source component: secure
  Extracting source component: share
  Extracting source component: sys
  Extracting source component: tools
  Extracting source component: ubin
  Extracting source component: usbin
Done extracting sources.
Done extracting sources.
Fixit# cd ../manpages
Fixit# ./install.sh

Danach müssen die entsprechenden Einträge in rc.conf(5) sowie loader.conf(5) gemacht werden, so dass von einem ZFS-Dateisystem gebootet werden kann. Ausserdem muss der ZFS Support für den Bootloader in src.conf(5) gesetzt werden:

Fixit# echo 'zfs_enable="YES"' > /rpool/etc/rc.conf
Fixit# echo 'LOADER_ZFS_SUPPORT="YES"' > /rpool/etc/src.conf
Fixit# echo 'zfs_load="YES"' > /rpool/boot/loader.conf
Fixit# echo 'vfs.root.mountfrom="zfs:rpool"' >> /rpool/boot/loader.conf

Anschliessend kann die zpool.cache-Datei erstellt werden, indem der ZFS-Pool exportiert und wieder importiert wird:

Fixit# mkdir /boot/zfs
Fixit# zpool export rpool && zpool import rpool
Fixit# cp /boot/zfs/zpool.cache /rpool/boot/zfs/

Nun wird im neu installierten System der Bootloader mit ZFS-Support gebaut und installiert. Ausserdem wird eine leere fstab(5) erstellt, damit beim Booten keine Fehlermeldungen angezeigt werden:

Fixit# chroot /rpool
Fixit# mount -t devfs devfs /dev
Fixit# unset DESTDIR
Fixit# cd /usr/src/sys/boot/
Fixit# make obj
Fixit# make depend
Fixit# make
Fixit# cd i386/loader
Fixit# make install
Fixit# umount /dev
Fixit# touch /etc/fstab
Fixit# exit

Zuletzt wird noch festgelegt, wo die ZFS-Dateisysteme gemountet werden sollen. Damit die dynamisch gelinkten Programme danach noch funktionieren, muss zuerst die LD_LIBRARY_PATH -Umgebungsvariable richtig gesetzt werden:

Fixit# export LD_LIBRARY_PATH=/mnt2/lib
Fixit# zfs set mountpoint=legacy rpool
Fixit# zfs set mountpoint=/tmp rpool/tmp
Fixit# zfs set mountpoint=/var rpool/var
Fixit# zfs set mountpoint=/usr rpool/usr

Nun kann das System neu gestartet werden, welches danach von ZFS bootet. Ist das System gebootet, kann man sich als root ohne Passwort anmelden. Jetzt kann das System in der /etc/rc.conf konfiguriert werden sowie Benutzerkonten angelegt und das root-Passwort gesetzt werden.

Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Dieser Artikel wurde auf der Basis des FreeBSD Wiki Artikels ZFSOnRootWithZFSboot erstellt.

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
ZFS Dateisystemoptionen verwenden
Comments (6)  Permalink

Comments

Hans @ 29.07.2009 22:22 UTC
Man munkelt, dass Swap auf ZFS nen Teufelskreis verursacht. Weis aber nicht wie aktuell das noch ist.
Alexander @ 03.08.2009 20:49 UTC
Hi,
vielen Dank für die sehr nützliche Anleitung. Zur Installation musste ich jedoch das 8.0-BETA2-x-dvd1.iso benutzen, da auf der LiveFS CD-ROM der Ordner 8.0-BETA2 nicht vorhanden war.

Gruß
Alexander
Oli @ 04.09.2009 12:43 UTC
Hoi,

hab das mit beta 3, amd64 und nem zraid aus 3 partitionen versucht, nach dem reboot kommt nur noch zfs i/o error all block copies unavailable

unable to load a kernel

can't load kernel


hat da jemand ne idee
Martin Maciaszek @ 16.10.2009 21:43 UTC
Ich habe es mit 8.0-RC1 probiert. Hat soweit alles funktioniert bis auf:
cp -Rp GENERIC/* kernel/

es gibt da kein GENERIC-Verzeichnis. Nach dem reboot habe ich dann nur noch:
Loading /boot/defaults/loader.conf
Unable to load a kernel!

can't load 'kernel'
cryx @ 20.10.2009 17:43 UTC
Nur falls jemandem das per Hand installieren zu aufwändig ist, ich hab da ein script für geschrieben. Funktioniert sowohl per Fixit CD, holt sich die packages per ftp, als auch dem DVD image.

http://anonsvn.h3q.com/projects/freebsd-patches/browser/manageBE/create-zfsboot-gpt_livecd.sh
SIFE @ 22.11.2009 09:10 UTC
Salamo Alikom
i compile CUSTOM kernel (8.0-RC3) with zfs support but when i type :
kldload zfs
i get :
kldload: can't load zfs: No such file or directory
even the present of zfs module in /boot/kernel .
No new comments allowed (anymore) on this post.