Funktionierende Anleitung für FreeBSD 9 mit ZFS

morpheus

Well-Known Member
Hallo!

Ich bin nun dabei, unseren neuen Storageserver für erste Tests einzurichten. Ich würde dabei gerne nicht nur die Daten, sondern auch das Betriebssystem auf ZFS installieren. Natürlich habe ich vorher im Internet gegoogelt und auch eine Reihe von Anleitungen gefunden. Das Problem ist nur, dass die meisten irgendwie halbgar zu sein scheinen. Da schreibt dann einer, er habe das so gemacht und liefert eine Anleitung, zugleich gibt es aber zig Kommentare dazu, warum das so doch nicht richtig ist, was man eventuell besser machen könnte etc., die dann natürlich von einigen anderen direkt wieder in Frage gestellt werden.

So finde ich beispielsweise nicht wirklich Informationen zum Swap. Soll man es unter ZFS anlegen, oder besser eigene Partition? Wenn ja, wie? Muss ich unter ZFS eine besondere Swap-Partition anlegen? Dann gibt es Installationsanleitungen, wo das System nur auf einer Platte installiert wird, ich möchte es aber gerne auf einem Mirror aus zwei SSD haben.

Daher meine Frage: Gibt es irgendwo eine wirklich saubere und funktionierende Anleitung, wie ich FreeBSD 9 unter ZFS installiert bekomme?
Ich habe hier im Forum http://www.bsdforen.de/showthread.php?t=28292 diese Anleitung gefunden. Kann man die so nehmen?

Gruß, Morpheus
 
hi

ja die anleitung kannst du nehmen , das sie recht aehnlich ist zu der im freebsd wiki
um ein mirror einzirichten.

was ich immer noch zusaetzlich mache ist,
eine zusaetliche 1GB grosse part anlegen ( mit gpart )
diese auf allen ! platten.

ich nennem die immer diagX .

warum , wenn man mal in der situation ist eine platte zu wechseln und man weiss
von aussen nicht welche defekt ist bzw welche platte ok sind.
dann kann man mit dd auf dieser diag part einfach mal nullen schreiben so das die
hd LED an ist.
somit bekommt man da raus was geht bzw was nicht geht.

holger
 
Sollte man denn mit gpart add -t freebsd-swap eine SWAP-Partition einrichten, oder swap ins ZFS nehmen?
Richte den swap genau so oder verschlüsselt oder als mirror aber auf jeden Fall als eigene Partition(en) ein.
Daher meine Frage: Gibt es irgendwo eine wirklich saubere und funktionierende Anleitung, wie ich FreeBSD 9 unter ZFS installiert bekomme?

http://blogs.freebsdish.org/pjd/category/freebsd/
beste Anleitung die ich kenne. Und funktioniert. Nimm, wenn gewünscht, den sysinstall-Teil raus und gut.

hth
 
http://blogs.freebsdish.org/pjd/category/freebsd/
beste Anleitung die ich kenne. Und funktioniert. Nimm, wenn gewünscht, den sysinstall-Teil raus und gut.

Ist leider schon etwas veraltet und geht mittlerweile viel "eleganter".

@morpheus

Ich habe von meinen beiden Skripten die Variante mit Swap im Gmirror genommen. Weiterhin ist dort auch nicht "round-robin" als Mirror-Algo für die Swap genommen, sondern prefer, da round-robin hier und da Probleme machen soll. Und ich habe wirklich lange gesucht und probiert für dieses Setup.

Also falls du eine "frisch getestete" FreeBSD-9.1 Variante nehmen willst, nimm mein Skript.

Hier noch mal eine Variante, wo du die Device-Namen leichter austauschen kannst.
Code:
#configure skript
DISK0=ada0
DISK1=ada1

#boot from install cd and choose "Live CD"
#add devices and install bootloader
gpart create -s gpt $DISK0
gpart create -s gpt $DISK1
gpart add -a 4k -s 512k -t freebsd-boot $DISK0
gpart add -a 4k -s 512k -t freebsd-boot $DISK1

##gmirror-swap##
gpart add -a 4k -s 4G -t freebsd-swap -l swap0 $DISK0
gpart add -a 4k -s 4G -t freebsd-swap -l swap1 $DISK1
##gmirror-swap##

gpart add -a 4k -t freebsd-zfs -l disk0 $DISK0
gpart add -a 4k -t freebsd-zfs -l disk1 $DISK1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $DISK0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $DISK1

#create pool
gnop create -S 4096 /dev/gpt/disk0
gnop create -S 4096 /dev/gpt/disk1
zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot mirror /dev/gpt/disk0.nop /dev/gpt/disk1.nop
zpool export zroot
gnop destroy /dev/gpt/disk0.nop
gnop destroy /dev/gpt/disk1.nop
zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot

#setup pool
zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 zroot
zfs set atime=off zroot

zfs create zroot/usr
zfs create zroot/usr/home
zfs create zroot/var
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o compression=gzip-9 -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=gzip-9 -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

#create swap
#zfs create -V 4G -o org.freebsd:swap=on -o checksum=off -o sync=disabled -o primarycache=none -o secondarycache=none zroot/swap

##gmirror-swap##
gmirror label -b prefer swap gpt/swap0 gpt/swap1
##gmirror-swap##

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

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

#final configuration
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
echo 'LOADER_ZFS_SUPPORT=YES' > /mnt/etc/src.conf
echo 'WRKDIRPREFIX=/usr/obj' >> /mnt/etc/make.conf
touch /mnt/etc/fstab

##gmirror-swap##
echo '/dev/mirror/swap none swap sw 0 0' >> /mnt/etc/fstab
echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf
##gmirror-swap##

zfs set readonly=on zroot/var/empty

#reboot into the new system
#passwd root
#tzsetup
#cd /etc/mail ; make aliases
#echo 'WITH_PKGNG=yes' >> /etc/make.conf
#...edit rc.conf
#in login.conf eintragen:
##:charset=UTF-8:\
##:lang=de_DE.UTF-8:\
#cap_mkdb /etc/login.conf
 
Moin Leute,

ich hätte da mal eine Nuss für euch zum Brechen:

Ich habe mir das Einsteiger-Tutorial von Serverzeit.de mal durchgesehen und fand es klasse.
Hat alles was ich für meinen Heimserver mit eingener Domain brauche und so weiter.
Alles schön und gut nun kommt mein Problem; "ICH BIN ÄNFÄNGER"-Schild tragend frag ich nach einer möglichkeit das Tutorial-Beispiel auf meinen derzeitigen Software-Raid 5 CentOS server zu übertragen. Antwort kam Prompt und hieß ZFS! Super!
Anscheind hat der Herr nicht ganz verstanden was ich meinte und mir nicht erläutern wollen wie ich das ZFS so beim Installations vorgang verwende wie gewollt.

Derzeit läuft mein CentOS wie Folgt:
4x 2TB Festplatten über ein Software-Raid 5 zu einer großen platte gebaut. /Boot auf der ersten platte mit ca 2GB Speicher zum laden des Bootloaders.
Ungefähr genauso sollte es nun mit ZFS nun aufgebaut werden aber KEINER kann mir Erklären Wie ich das anstellen soll.
Halbgare Anleitungen und Veraltete Ratgeber haben bei mir bislang nur zum vollständigen systemshutdown geführt und nun hoffe ich das ihr mir hier weiterhelfen könnt.

mfg

Devilsdream

PS: Ja ich weiß Rechtschreibfehler und so aber legastenie ist nunmal eine Krankheit die man nicht mit Medikamenten heilen kann ^^
 
Das Skript oben von -Nuke- kannst du als Anhaltspunkt gut verwenden. Nicht alles läuft wie gewollt mit der csh von der LiveCD, aber das meiste tut.

Ansonsten kannst du auch mal nach mfsBSD schauen, dass installiert dir das alles per Skript out-of-the box auf die Festplatte schreiben. Ich würde dir allerdings empfehlen, dass ausgiebig entweder in einer virtuellen Maschine oder auf einem anderen Testsystem ausgiebig zu testen.
 
Das Skript oben von -Nuke- kannst du als Anhaltspunkt gut verwenden. Nicht alles läuft wie gewollt mit der csh von der LiveCD, aber das meiste tut.

Bin für Verbesserungsvorschläge immer zu haben ;) Hab letztens erst wieder ein System damit ohne Probleme erstellt (also LiveCD ausgewählt und dann Skript gestartet mit "sh"), daher würden mich Probleme interessieren.
 
hmmm, also die (t)csh, die root standardmäßig bekommt, mag das export, die for schleife und den tar-aufruf nicht wirklich. mit sh als skript hab ich das noch nicht gestartet, da mein anforderungen bisher noch nie wirklich gepasst haben ;).
 
Hallo Leute,

ich hatte mal auf meinem Fileserver das OS (FreeBSD 9.0) auf ZFS. Aber immer wenn der Rechner Backups der internen ZFS Devices hin und her geschoben hat per rsync und der Ram dann knapp wurde hat sich die Kiste selbst gekillt, alles in allem keine gute Kombination ZFS und Swapen weil Ram knapp wird ;-)

Gruß ré
 
Hallo,

Evtl. ein wenig offtopic:

eine kleine Anmerkung bzgl ZFS und NFS: Da ZFS per default Schreibvorgänge synchronisiert (ich sage nur ZIL!) ist z.B. die Performance beim "remote" anlegen und löschen vieler kleiner Dateien relativ schlecht... Das habe ich hier mal an meinen Solaris Servern des Typs X4540 vor Monaten mal getestet. Der Performanceunterschied zwischen lokal und per NFS ist weit über Faktor 100 und wenn man sich dieses ZIL (also das Synchronisationslogging) ansieht, wird dauernd darauf geschrieben... Von daher ist ZFS keine Eier-Legenede-Wollmilchsau. Wenn ich auch sagen muss, dass es wirklich einfach zu handhaben ist... Wenn ZFS und remote Zugriff per NFS, sollte man sich eine SSD für das Logging anlegen, das wurde mir jedenfalls empfohlen.

Viele Grüße, Norbert
 
das gleiche habe ich auch festgestellt und werde nun einen Fileserver für NFS mit SSDs anlegen. Man kann das ZIL für die Pools auch abschalten (sollte man nicht tun!) und stellt fest, was möglich wäre. Bei größeren Dateien (mehrere GB) tritt das ebenfalls auf.
 
Das Skript oben von -Nuke- kannst du als Anhaltspunkt gut verwenden. Nicht alles läuft wie gewollt mit der csh von der LiveCD, aber das meiste tut.

Ich nutze das Script (etwas auf meine Bedürfnisse angepasst) regelmäßig.
Leider bin ich kein Script-Held.
Aber export und die for-Schleife funktionieren bei mir mit der Standard-Root-Shell sh,
denn die installierten Systeme funktionieren.
Auch hier
https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot
wird ein export und eine for-Schleife genutzt.

Darum, was geht denn nicht???
 
Zuletzt bearbeitet:
Das verstehe ich ja.
Er nutzt dann aber nicht die Standardshell, oder?

Es ist halt ein Unterschied, ob du das Skript mit "sh" oder mit "./" aufrufst.

"./" nimmt halt die aktuelle Shell (csh). Da das Skript aber in sh geschrieben ist, muss man halt "sh" nehmen.
 
Zurück
Oben