FreeBSD – zfs Konfiguration

der home-Server hat folgende Funktionalitäten:

  • Fileserver
  • Backup-Server (mit LTO-3 SCSI)
  • Austausch-Verzeichnis
  • Bilderverwaltung (digikam mit MariaDB)
  • Icinga – monitoring

Die zfs-konfiguration liefert stabile 100MB/s über das GigaBit-Netz lesend und schreibend.
Die Konfiguration ist folgendermaßen:
– M.2 NVME (SSD) für Betriebssystem, L2ARC und ZIL
– 2x 4TB RAID1 – mirroring für wichtiges
– 4x 3TB RAID5 – für Archiv-Kram

Das Betriebssystem wurde auf der NVME installiert, und mit gpart zusätzlich je 2 partitionen für das ZIL (1GB) und L2ARC (29GB) angelegt (einmal für das RAID1 und einmal für das RAID5).

Normalerweise gewinnt zfs an Performance, wenn man viele vdevs anlegt, nunja, soviel Platten habe ich nicht, respektive meine Zielkonfiguration ist hier ein „Kompromiss“.
Standardmäßig aktiviere ich die lz4 Kompression für die zpools und deren zfs-partitionen.
Für das Foto-Archiv, welches noch um Dubletten bereinigt werden muss, ist auch das DeDup aktiviert, das frisst aber Ressourcen! Aktuell ist das „nur“ Faktor 1.37.

zpool create family mirror ada5 ada4  (Erzeugung des RAID1)
zfs set compression=lz4 family        (lz4 Kompression aktivieren)
zpool add family log nvd0p5           (ZIL hinzufügen von nvme)
zpool add family cache nvd0p6         (L2ARC hinzufügen)

zpool create archiv raidz /dev/ada0 /dev/ada1 /dev/ada2 /dev/ada4
zpool add -f archiv log nvd0p6
zpool add archiv cache nvd0p7

auf weitere partitionserstellungen gehe ich jetzt nicht ein 🙂
Gemountet werden die zpools selbst nicht, nur die erzeugten partitionen, alle unter /data/, damit etwas Struktur drinnen ist…
Ich bevorzuge mehrere Partitionen, dies ermöglicht auch die Backups etwas einfacher zu strukturieren. 10TB auf Band sichern ist etwas stressig.

HomeServer

Vor 3 Jahren löste ich meinen home-Server in einem riesigem „Eye-Tower 920“ ab – es musste etwas Neues her, wesentlich leiser und stromsparender.

Meine Komponenten:

Coolmaster Silencio 550 Gehäuse
be quiet! STRAIGHT POWER10 400W ATX24
GigaByte G1.Sniper B7 B150
Intel Core i5-6500 3200 1151 BOX
SSD SanDisk Extreme Pro 1TB M.2
2x 16GB DDR4 Riegel (um später vielleicht noch was zuzustecken)
5x Seagate 6TB IronWolf 7200 SATA-3
2x Seagate 4TB ST4000DM004 5400 SATA-3
ein alter SATA-Controller, um die die vielen SATAs anschließen zu können
Tandberg LTO-3 SCSI-Streamer.

Das dazugehörige Betriebssystem.

FreeBSD – Systemaktualisierung

In den Anfangszeiten nutzte ich lange das ctm um den source zu aktualisieren, vor einigen Jahren wurde dieser beerdigt und ich bin auf svn umgestiegen. Alte Gepflogenheiten ändert man nicht, also kein „freebsd-update“ oder „Package-update“ – immer selbst kompilieren…

svn checkout scv://svn.freebsd.org/base/stable/12 /usr/src/

dies kopiert/aktualisiert unter /usr/src mit den aktuellsten Änderungen.

im /usr/src findet sich dann das README, in welchem die Aktualisierung beschrieben wird, mit make buildworld und make buildkernel, make installkernel.
Hat man eine multicore-Architektur zur Verfügung, kann man mit <make -j 4 buildworld> die Kompilierung auf 4 cores erweitern.
Beim buildkernel wurde mir davon abgeraten. Wenn ich einen Versionssprung mache, oder der compiler aktualisiert wird, baue ich das System nach der ersten Aktualisierung und reboot gleich nochmal neu…

Eine sehr praktische Sache ist auch der „Ports“ Bereich, hier sind die Programme, welche nicht Bestandteil des Betriebssystems sind, also zB firefox, thunderbird, Samba, gimp, u.v.m.

Die Ports-source holt man sich mit:

svn checkout svn://svn.freebsd.org/ports/head /usr/ports/

Als erstes empfehle ich die Installation vom portmaster:

cd /usr/ports/ports-mgmt/portmaster/
make install

damit manage ich die Port-Installationen und Aktualisierungen.
Wichtig!!! – auch hier gibt es einen Readme (im Ports-Verzeichnis), welcher vor Aktualisierungen unbedingt gelesen werden sollte (bei Neu-Installationen ist das hinfällig 😉 )
Der portmaster löst einem erforderlichen Abhängigkeit auf und klappert alles in einem Rutsch ab – Beispiel:

portmaster -d --force-config sysutils/rsync

Bei einer Neu-Installation ist das Mutterverzeichnis wichtig, ohne geht es nicht. Bei Aktualisierungen reicht der Port-Name.
–force-config bewirkt, das bei verfügbaren Optionen diese vor der Kompilierung aktiviert oder deaktiviert werden können. Manchmal sind das Sachen wie CUPS für zum Drucken oder SSE-Unterstützung und so…
-d steht dafür das unter Ports/distfiles/ die alten Pakete ohne Nachfrage gelöscht werden (aufgeräumt).

Irgendwann, wenn man mal das System aktualisiert hat, will man auch die Ports, zB wegen Sicherheitsfixes aktualisieren, dann möchte man sich zB eine Liste erstellen lassen, was alles aktualisiert werden möchte:

portmaster -L | egrep -B1 '(ew|ort) version|Aborting|installed|dependencies| IGNORE|marked|Reason:|MOVED|deleted' | grep -v '^--' | less

Das less kann jeder handhaben wie er möchte, ist aber praktisch, mal drüber zu schauen und querzuchecken mit dem README, ob man ggfs das ein oder andere zu beachten hat. Speziell vorherige Läufe zwecks DeInstallationen oder library-Umstellungen…

Wenn man alles Aktualisieren möchte, bietet sich auch:

portmaster -a -d

Damit werden alle Ports aktualisiert, für welche Updates verfügbar sind.

FreeBSD – wie ich dazu kam

FreeBSD nutze ich seit Version 2, also etwa seit 1992.

Meine ersten Gehversuche hatte ich damals mit einer DLD 0.99pl15 (linux) und wurde irgendwie gar nicht glücklich damit. Da ich 1990 vom Apple //e auf Macintosh umstieg, war der Mac für mich das ideale System geworden. Netzwerktechnisch verstand dieser allerdings nur Appletalk, dafür gab es in der freien unix-Welt 2 Lösungen: CAP (Columbia Appletalk Package) und netatalk. Beide bedingten allerdings ein paar Spezifitäten im TCP-Stack, welche unter Linux damals nicht verfügbar waren. Unter BSD aber.

Also, FreeBSD probiert (und netBSD auch mal 😀 )

Dez 1994 kam FreeBSD 2.2.5, unter welchem ich rund 8 Jahre die Quark LU2 (Maus-Mailbox) betrieben habe (inclusive manchem Systemupdate) – welche damit die schnellste Tauschbox im MausNet wurde, ohne daß die Outfiles vorgepackt sein mussten.

Mittlerweile betreibe ich FreeBSD in der Version 13-STABLE, seit Jahren bevorzuge ich den STABLE-tree, da dieser für Stabilität und Security steht.

Der Server.