Ein Versuch: ZFS Fileserver unter GhostBSD

berni51

Open-Net-FreeBSD user
Hallo.,
ich möchte unseren hausinternen Fileserver etwas sicherer machen und plane den Umstieg von einem Debian zu FreeBSD mit zfs. In Sachen zfs bin ich leider absoluter Laie und probiere deshalb vorher etwas herum.
Dazu hab ich auf einen alten Lenovo T500 mit 8GB RAM und einer 512er SSD ein aktuelles GhostBSD aufgespielt und als Dateisystem zfs gewählt. Hat auch alles gut geklappt (nettes OS übrigens), aber mit nur einer SSD ist das ja eher brotlose Kunst. Also eine weitere SSD mit 512 GB in den T500 gebaut.
Die 2te SSD hab ich dann einfach mit zpool add tank ada1 eingebunden, was die Maschine auch klaglos hingenommen hat.

Meine Fragen sind:
  • Welchen Effekt habe ich jetzt? Werden mit meiner Simple-Konfiguration jetzt bereits Daten gesichert (nicht gespiegelt)?
  • Hätte ich auf der 2ten SSD auch eine swap-Partition anlegen sollen?

Und als letztes: FIndet sich irgendwo eine gute Dokumentation zu zfs für Einsteiger? Doku gibts ja reichlich, nur fand ich das meiste bisher wenig hilfreich, bis auf die man-page. Ich denke aber mehr an Geshcriebenes, dass das Verständnis fördert.
 
Welchen Effekt habe ich jetzt? Werden mit meiner Simple-Konfiguration jetzt bereits Daten geischert (nicht gespiegelt)?
Um das zu verstehen, musst du verstehen wie ZFS Medien behandelt: Ein oder mehrere Speichermedien, also in der Praxis meist Partitionen auf SSDs oder HDDS, werden zu einem sogenannten vdev verbunden. Redundanz findet immer auf Ebene des vdev statt. Ein oder mehrere vdev ergeben dann einen Pool, innerhalb eines Pools werden die Daten gleichmäßig auf alle vdev verteilt.

Das hier (mein Desktop) wäre der einfachste Fall:
Code:
% zpool status
  pool: system
 state: ONLINE
  scan: scrub repaired 0 in 0 days 00:12:37 with 0 errors on Mon Sep 21 11:45:27 2020
config:

    NAME          STATE     READ WRITE CKSUM
    system        ONLINE       0     0     0
      ada1p3.eli  ONLINE       0     0     0

errors: No known data errors

Der Pool system hat ein vdev mit einer Partition unten drunter. Ein deutlich komplexeres Setup wäre das hier:

Code:
% zpool status
  pool: data
 state: ONLINE
  scan: resilvered 2,09T in 0 days 05:26:53 with 0 errors on Tue Oct 27 17:21:56 2020
config:

    NAME             STATE     READ WRITE CKSUM
    data             ONLINE       0     0     0
      raidz1-0       ONLINE       0     0     0
        gpt/zdisk01  ONLINE       0     0     0
        gpt/zdisk02  ONLINE       0     0     0
        gpt/zdisk03  ONLINE       0     0     0
        gpt/zdisk04  ONLINE       0     0     0
      raidz1-1       ONLINE       0     0     0
        gpt/zdisk05  ONLINE       0     0     0
        gpt/zdisk06  ONLINE       0     0     0
        gpt/zdisk07  ONLINE       0     0     0
        gpt/zdisk08  ONLINE       0     0     0
      raidz1-2       ONLINE       0     0     0
        gpt/zdisk09  ONLINE       0     0     0
        gpt/zdisk10  ONLINE       0     0     0
        gpt/zdisk11  ONLINE       0     0     0
        gpt/zdisk12  ONLINE       0     0     0
      raidz1-3       ONLINE       0     0     0
        gpt/zdisk13  ONLINE       0     0     0
        gpt/zdisk14  ONLINE       0     0     0
        gpt/zdisk15  ONLINE       0     0     0
        gpt/zdisk16  ONLINE       0     0     0
        gpt/zdisk17  ONLINE       0     0     0
      raidz1-4       ONLINE       0     0     0
        gpt/zdisk18  ONLINE       0     0     0
        gpt/zdisk19  ONLINE       0     0     0
        gpt/zdisk20  ONLINE       0     0     0
        gpt/zdisk21  ONLINE       0     0     0
        gpt/zdisk22  ONLINE       0     0     0
    logs
      gpt/zlog       ONLINE       0     0     0
    cache
      gpt/zcache     ONLINE       0     0     0
    spares
      gpt/zdisk23    AVAIL

errors: No known data errors

Der Pool data hat fünd vdev, von denen jedes ein RAIDZ1 aus fünf Festplatten ist. Innerhalb jedes RAIDZ1 darf Festplatte. Fallen mehr Festplatten aus, ist das vdev kaputt. Damit auch der ganze Pool, denn der verteilt seine Daten gleichmäßig über alle vdev.

Du hattest am Anfang des einfachsten Fall. Ein Pool mit einem vdev aus einer Partition. Ein einfaches zpool add $pool $device hat ein zweites vdev aus einer Platte erstellt und an den Pool angefügt. Der Pool verteilt seine Daten nun schön über zwei SSDs, sobald eine SSD ausfällt, sind deine Daten weg. Um einen Spiegel zu bekommen, hättest du das vorhandene vdev in einem Mirror umwandeln müssen: zpool attach $pool $vorhandenes_device $neues_device

Wenn du dich näher damit beschäftigst, wirst du feststellen, dass vdevs und Pool leider recht starr sind und sich nur begrenzt verändern lassen, wenn sie einmal erstellt wurden. Das ist in meinen Augen der einzige große Nachteil von ZFS. Am flexibelsten sind Spiegel, dort kann man beliebig Devices herausnehmen und einfügen. Alle anderen vdev sind mehr oder weniger unveränderbar. Es gibt seit Jahren Bemühungen es etwas flexibler zu gestalten und dabei ist schon zpool remove herausgekommen, aber ZFS ist in seinem Design leider einfach nicht auf nachträgliche Änderungen ausgelegt.

Hätte ich auf der 2ten SSD auch eine swap-Partition anlegen sollen?
Wenn man wirklich hohe Ausfallsicherheit haben will, kann man Swap-Partitionen mit gmirror spiegeln.
 
Hätte ich auf der 2ten SSD auch eine swap-Partition anlegen sollen?
Nur, wenn du mehr Swap auf deinem System brauchst, ansonsten kannst du dir das sparen.

Welchen Effekt habe ich jetzt? Werden mit meiner Simple-Konfiguration jetzt bereits Daten gesichert (nicht gespiegelt)?

Wenn "tank" dein Ursprungs-Pool ist, und du die 2. Disk mit "add" hinzugefügt hast, wird das eher ein concatenate sein, d.h. die 2. Platte ist "hinten drangehängt" anstatt "mirror". Das siehst du mittels "zpool status", bei einem mirror stünde dann "mirror-0".

EDIT:
Hier wär noch ein kleines Tutorial für den Einstieg.

Eigentlich ist ZFS ganz unkompliziert (*) - du brauchst erstmal (und meist auch später im Betrieb) nur die Befehle "zfs create" "zfs snapshot" und ggf "zfs destroy" fürs löschen sowie send/recv wenn du zwischen Maschinen bzw weiteren Disks Daten übertragen möchtest.

(*) Kann natürlich je nach Setup und plötzlich eintretenden Events beliebig kompliziert werden :D
 
plane den Umstieg von einem Debian zu FreeBSD mit zfs.
Lustig. Weil genau so einen Umstieg hab ich auch schon mal gemacht. Auch mit der Absicht ein ZFS-driven Fileserver zu haben.

FIndet sich irgendwo eine gute Dokumentation zu zfs für Einsteiger?
Das Handbuch widmet sich ZFS und so als Einstieg und so ist es recht brauchbar:
https://www.freebsd.org/doc/de/books/handbook/zfs.html

Generell ist es initial auch alles nicht soooo schwer, da man ja schon bei der Installation nen ZFS-Pool anlegen kann (hast Du ja auch selbst mitbekommen). Von da an, kann man dann Finetuning betreiben.

aber mit nur einer SSD ist das ja eher brotlose Kunst.
Kommt drauf an. Von einigen Features wie Snapshots usw. profitierst Du ja auch, wenn Du nur eine Platte hast.
Ansonsten: Ja klar. Richtig lustig wird ZFS erst wenn ein Pool mehrere Platten umfasst, die dann quasi im RAID-Verbund laufen.
Im Beitrag von Yamagi wurde das ja ganz gut erläutert.
Aber frag ruhig nach, wenn was unklar ist.

Hätte ich auf der 2ten SSD auch eine swap-Partition anlegen sollen?
Ist die Frage, ob es überhaupt sinnvoll ist für Swap eine Partition zu nehmen. Ich mache das eher ungern, weil Partitionen recht unflexibel sind. Wenn dann nehme ich eher eine Swap-Datei oder (was man bei ZFS ja gut machen kann) ein sogenanntes Volume.
 
Zu üben und testen, kannst du auch einfach Image Dateien anlegen und damit einen Pool erstellen:

Image Dateien erstellen:
Code:
dd if=/dev/zero of=disk1.img bs=1024M count=2
dd if=/dev/zero of=disk1.img bs=1024M count=2
dd if=/dev/zero of=disk1.img bs=1024M count=2
Zpool erstellen:
Code:
zpool create testpool raidz disk1.img disk2.img disk3.img
Status:
Code:
root@freebsdpkg /data # zpool status testpool
  pool: testpool
 state: ONLINE
  scan: none requested
config:

        NAME                 STATE     READ WRITE CKSUM
        testpool             ONLINE       0     0     0
          raidz1-0           ONLINE       0     0     0
            /data/disk1.img  ONLINE       0     0     0
            /data/disk2.img  ONLINE       0     0     0
            /data/disk3.img  ONLINE       0     0     0
Damit kannst du jetzt verschiedene Konfigurationen testen. Einen Pool mit RAIDZ und einem Mirror VDEV z.B.

Zum Schluss einfach den ZPOOL löschen: zpool destroy testpool und die *.img Dateien per: rm tilgen.
 
Danke. eure Ausführungen haben mir sehr geholfen, damit habe ich den von @turrican verlinkten Artikel verstanden.
Den T500 mit den 2 SSD werde ich aber noch einmal umkonfigurieren und ein Mirror-System erstellen. Das erscheint mir für eine spätere Anwendnung als Fileserver im Moment als das Richtige.
Aber erst einmal werde ich jetzt mit Images und zfs herumspielen.
Nochmals besten Dank. :)
 
Ich kann übrigens sehr das Buch "FreeBSD Mastery: ZFS" von Michael W Lucas empfehlen. Für schmales Geld zu haben und bietet einen guten Einstieg in ZFS.
 

die beiden Seiten habe ich eigentlich immer offen, weil ich mir die Dinge einfach nicht merken kann, wenn ich sie nur alle paar Monate mal einsetzen möchte. und natürlich die zugehörigen man-pages.
Ich denke, wenn man das mal durchgelesen hat, bekommt man schon einen guten Überblick (für Endanwender).
Trotzdem muss man auch etwas üben. Die Beispiele sind ganz gut und man glaubt, dass sie ganz einleuchtend sind und erst dann, wenn man sie wirklich einsetzen muss, merkt man dann, wo es vielleicht noch hapert.
 
Danke @medV2 . Ist zwar nicht unbedingt eine Einsteiger-Doc, aber nachdem ich mich jetzt eingelesen hab, ist das schon verständlich.

Der Umstieg von Debian auf ein BSD ist in meinem Fall eine reine Sympathiefrage und völlig subjektiv. Ich empfinde alle BSD als flüssiger und klarer. Und ein Linux mit systemd fühlt sich für mich nicht mehr wie ein Unix an.
Dabei weiss (wusste) ich die Zuverlässigkeit eines Debian-Systems durchaus zu schätzen. Schätze aber, dass FreeBSD in der Hinsicht genauso gut ist.
 
Zurück
Oben