So konfigurieren Sie einen verschlüsselten ZFS-Pool mit DigitalOcean-Blockspeicher unter FreeBSD

ZFS ist ein Dateisystem- und Volume-Manager, der hohe Speicherkapazitäten unterstützt, Komprimierung unterstützt und Datenbeschädigungen verhindern kann. In Kombination mit dem block storage von DigitalOcean bietet ZFS eine Speicherlösung, die einfach einzurichten und zu erweitern ist.

In diesem Handbuch konfigurieren Sie Blockspeichervolumes für ZFS unter FreeBSD, die verschlüsselt sind, um Ihre Daten zu schützen.

Voraussetzungen

  • Ein FreeBSD-Droplet in einem Rechenzentrum, das Blockspeicher mit mindestens 4 GB RAM unterstützt, da ZFS in der Regel sehr speicherintensiv ist, insbesondere wenn Sie Block-Deduplizierung durchführen möchten. Wir verwenden das Standardkonto * freebsd *, das automatisch erstellt wird, wenn Sie ein FreeBSD-Droplet erstellen. Weitere Informationen zum Anmelden bei FreeBSD Droplet und zur grundlegenden Verwaltung finden Sie in der Tutorialserie Getting Started with FreeBSD.

  • Ein 100-GB-Volume, das an Ihr Droplet angehängt ist. Sie können dieses Volume erstellen, wenn Sie Ihr Droplet erstellen, oder Sie können https://www.digitalocean.com/community/tutorials/how-to-use-block-storage-on-digitalocean#creating-and-attaching-volumes verwenden [diese Anleitung] zum Erstellen und Anhängen eines Volumes.

In diesem Lernprogramm wird auch ein zweites 100-GB-Volume verwendet, um das Hinzufügen von Volumes zum Pool zu veranschaulichen. Sie müssen es jedoch nicht im Voraus einrichten. Die Anweisungen werden in Schritt 5 im Kontext behandelt.

Schritt 1 - Partitionieren des Volumes

Obwohl wir das gesamte Volume für ein einziges Dateisystem verwenden, ist es im Allgemeinen eine gute Idee, eine Partitionszuordnung auf dem Volume zu erstellen. Auf diese Weise können wir aussagekräftige Etikettenpartitionen anwenden, die wir erstellen.

Stellen Sie zunächst sicher, dass das Volume angehängt und verfügbar ist. Loggen Sie sich in Ihr Droplet ein.

ssh freebsd@

Vergewissern Sie sich nach der Anmeldung, dass das Volume angehängt wurde, indem Sie sich die Ausgabe des Befehls + dmesg + ansehen. Die lokale SSD für ein FreeBSD-Droplet wird als "+ vtbd0 " angezeigt, und alle angeschlossenen Volumes werden als " da +" - Geräte angezeigt.

Verwenden Sie "+ grep ", um die Ergebnisse des Befehls " dmesg " nach " da0 " zu filtern. Dies ist unser angefügtes Volume. Weitere Informationen zu " grep +" finden Sie in unserem Tutorial unter https://www.digitalocean.com/community/tutorials/ using-grep-regular-expressions-to-search-for-text-patterns-in-linux[Verwenden Sie Grep & Regular Ausdrücke für die Suche nach Textmustern unter Linux.

dmesg | grep

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Outputda0 at vtscsi0 bus 0 scbus2 target 0 lun 1
da0: <DO Volume 1.5.> Fixed Direct Access SPC-3 SCSI device
da0: 300.000MB/s transfers
da0: Command Queueing enabled
da0: 102400MB (209715200 512 byte sectors: 255H 63S/T 13054C)

Nachdem Sie überprüft haben, dass das Volume verfügbar ist, erstellen Sie eine Partitionszuordnung im GPT-Format. Führen Sie den folgenden Befehl aus:

sudo gpart create -s gpt

Erstellen Sie als Nächstes eine einzelne Partition für ZFS.

sudo gpart add -t  -l

Mit dem Flag "+ -t " können wir den Partitionstyp angeben, und mit der Option " -l +" können wir eine Bezeichnung für die Partition anwenden. Das Label kann sein, was wir wollen. In diesem Fall passen wir es an den Namen des Volumes an, um die Übersichtlichkeit zu gewährleisten.

Schützen wir nun die Daten, die wir auf dieser Partition ablegen, vor neugierigen Blicken.

Schritt 2 - Einrichten der Verschlüsselung

Das Verschlüsseln von Daten hat viele Vorteile und ist einfach einzurichten. Aktivieren wir den aesni -Treiber, damit wir die hardwarebeschleunigte AES-Verschlüsselung verwenden können:

sudo kldload aesni

Jetzt können wir die geli -Verschlüsselung auf der Partition konfigurieren. Wir verwenden den Befehl "+ geli +" und geben eine Schlüssellänge und die Partition an, die wir verschlüsseln möchten:

sudo geli init -l  /dev/gpt/

Die Option "+ -l +" gibt die Schlüssellänge an, die für den AES-XTS-Algorithmus entweder 128 Bit oder 256 Bit betragen muss. Wir verweisen auf die Partition mit der zuvor angegebenen Bezeichnung.

Wenn Sie den Befehl ausführen, werden Sie zur Eingabe einer Passphrase aufgefordert:

OutputEnter new passphrase:
Reenter new passphrase:

Metadata backup can be found in /var/backups/gpt_volume-nyc1-01.eli and
can be restored with the following command:

   # geli restore /var/backups/gpt_volume-nyc1-01.eli /dev/gpt/volume-nyc1-01

Bei jedem Neustart Ihres Droplets müssen Sie diese Passphrase eingeben, um die verschlüsselte Partition erneut anzuhängen. Dies ist eine geringfügige Unannehmlichkeit im Austausch für eine bessere Sicherheit.

Hängen Sie nun die verschlüsselte Partition an:

sudo geli attach /dev/gpt/

Sie werden aufgefordert, die Passphrase einzugeben, die Sie bei der Initialisierung der Partition eingegeben haben:

OutputEnter passphrase:

Dies richtet "+ / dev / gpt / volume-nyc1-01.eli +" ein, die entschlüsselte Version der Partition. Auf dieses Blockgerät geschriebene Daten werden verschlüsselt und auf das zugrunde liegende Gerät geschrieben. Dies ist der Pfad, den wir zu unserem Speicherpool hinzufügen, den wir als Nächstes erstellen.

Schritt 3 - Einrichten des ZFS-Pools

Ein ZFS-Speicherpool oder Zpool ist eine Sammlung von Volumes. So verwaltet ZFS sein Dateisystem. Und sie sind einfach zu erstellen. Da DigitalOcean-Volumes ihre eigene Datenredundanz implementieren, ist es nicht erforderlich, mehrere Volumes zu erstellen und zu spiegeln oder sie in einer RAID-Z-Konfiguration auszuführen. Wir können einfach das einzelne Volumen direkt im Pool verwenden.

Der Befehl + zpool create + erstellt einen neuen zpool. Es werden ein Name für den Pool und das Volume, das Sie dem Pool hinzufügen möchten, eingegeben.

sudo zpool create tank /dev/gpt/

Wir verwenden den generischen Namen "+ tank +" für unseren Pool. Sie können jedoch jeden beliebigen Namen verwenden.

Da das Volume über ein Netzwerk angeschlossen ist, ist der Dateizugriff langsamer als auf der lokalen SSD. Aktivieren Sie die Komprimierung auf der Ebene des ZFS-Dateisystems, um die Datenmenge zu minimieren, die über das Netzwerk auf das Gerät geschrieben wird. Dies ist völlig optional und kann auf Dateisystembasis festgelegt werden.

Wir werden den LZ4-Komprimierungsalgorithmus verwenden, der auf Geschwindigkeit optimiert ist und dennoch eine anständige Komprimierung bietet. Weitere Optionen finden Sie auf der Manpage https://www.freebsd.org/cgi/man.cgi?query=zfs [+ zfs +].

sudo zfs set compression=lz4 tank

Schauen wir uns jetzt unseren Pool an. Mit dem Befehl + zpool list + können wir einige detaillierte Informationen abrufen:

zpool list
OutputNAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT

Die Gesamtgröße des Pools ist aufgrund des Partitionierungs- und Formatierungsaufwands geringfügig kleiner als die Gesamtgröße des Volumes.

Wir können das ZFS-Dateisystem in diesem Pool auch mit dem Befehl + zfs list + anzeigen:

zfs list
OutputNAME   USED  AVAIL  REFER  MOUNTPOINT

oder mit dem Befehl + df +:

df -h
OutputFilesystem         Size    Used   Avail Capacity  Mounted on
/dev/gpt/rootfs     57G    2.2G     50G     4%    /
devfs              1.0K    1.0K      0B   100%    /dev

Sie werden diese Befehle von Zeit zu Zeit verwenden, um den Zustand Ihres neuen Dateisystems zu überprüfen.

Bevor wir fortfahren, stellen wir sicher, dass das ZFS-Kernelmodul beim Booten unseres Betriebssystems gestartet wird. Das Modul wurde für uns automatisch geladen, als wir den Befehl + zpool create + mit + sudo + ausführten, aber es wäre besser, wenn das Modul automatisch geladen würde.

Bearbeiten Sie dazu die Datei + / etc / rc.conf +:

sudo vi /etc/rc.conf

Fügen Sie diese Zeile nach allen vorhandenen Zeilen in der Datei hinzu:

/etc/rc.conf

zfs_enable="YES"

Speichern Sie dann die Änderungen in der Datei. Beim Neustart des Servers wird das ZFS-Kernelmodul geladen.

Einer der Vorteile von ZFS ist die Möglichkeit, dem Pool mehr Speicherplatz hinzuzufügen, wenn unsere Anforderungen steigen. Sehen wir uns an, wie das funktioniert.

Schritt 4 - Hinzufügen zusätzlicher Volumes zum Pool

Wir können den Pool mit zusätzlichen Volumes erweitern, wenn wir mehr Platz benötigen. Mit ZFS müssen Sie lediglich ein zusätzliches Gerät zum Pool hinzufügen.

Zuerst brauchen wir ein anderes Gerät. Schließen Sie ein neues 100-GB-Volume an Ihr Droplet an. Einzelheiten dazu finden Sie unter this guide.

Wenn das Volume fertig ist, kehren Sie zum Terminal Ihres Servers zurück und überprüfen Sie, ob das neue Volume vorhanden und verbunden ist. Das neue Volume wird als "+ da1 +" gekennzeichnet.

dmesg | grep
Outputda1 at vtscsi0 bus 0 scbus2 target 0 lun 2
da1: <DO Volume 1.5.> Fixed Direct Access SPC-3 SCSI device
da1: 300.000MB/s transfers
da1: Command Queueing enabled
da1: 102400MB (209715200 512 byte sectors: 255H 63S/T 13054C)

Partitionieren und beschriften Sie das neue Volume mit dem gleichen Prozess, den Sie für das erste Volume verwendet haben. Erstellen Sie zuerst die Partition:

sudo gpart create -s gpt

Und dann erstelle das Volume:

sudo gpart add -t freebsd-zfs -l

Da Ihr vorhandenes Volume verschlüsselt ist, aktivieren Sie die Verschlüsselung auf diesem neuen Volume:

sudo geli init -l 256 /dev/gpt/

Erneut werden Sie zur Eingabe einer Passphrase aufgefordert, damit das Volume entschlüsselt und angehängt werden kann.

OutputEnter new passphrase:
Reenter new passphrase:

Metadata backup can be found in /var/backups/gpt_volume-nyc1-02.eli and
can be restored with the following command:

   # geli restore /var/backups/gpt_volume-nyc1-02.eli /dev/gpt/volume-nyc1-02

Fügen Sie dann dieses neue Volume hinzu und geben Sie die Passphrase ein, wenn Sie dazu aufgefordert werden:

sudo geli attach /dev/gpt/

Und schließlich fügen Sie es dem ZFS-Pool hinzu:

sudo zpool add tank /dev/gpt/

Das Dateisystem wird automatisch auf die Größe des Pools erweitert, die Sie mit dem folgenden Befehl überprüfen können:

zpool list
OutputNAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank            -     0%     0%  1.00x  ONLINE  -

Und wir können das mit dem Befehl + zfs list überprüfen:

zfs list

Die Ausgabe zeigt das "+ tank +" Volumen und die richtige Menge an Platz:

OutputNAME   USED  AVAIL  REFER  MOUNTPOINT
tank  62.5K       19K  /tank

Wenn Sie mehr Speicherplatz benötigen, wiederholen Sie diesen Vorgang, um dem Pool weitere Volumes hinzuzufügen.

Wir haben unserem Pool verschlüsselte Partitionen hinzugefügt. Schauen wir uns also an, wie Sie sie nach einem Neustart des Servers wieder anfügen können.

Schritt 5 - Handhabung eines Neustarts

Wenn Sie Ihren Server neu starten, werden die verschlüsselten Partitionen nicht mehr angehängt. Sie müssen sie manuell anhängen. Lassen Sie uns zu Übungszwecken einen Neustart durchführen, damit Sie den Vorgang sehen können.

Verwenden Sie den Befehl + shutdown +, um den Server neu zu starten. Dadurch wird die SSH-Sitzung getrennt.

sudo shutdown -r now

Es kann ungefähr eine Minute dauern, bis Ihr System neu gestartet ist. Sobald der Computer wieder online ist, melden Sie sich wieder bei Ihrem Droplet an.

ssh freebsd@

Fügen Sie dann die verschlüsselten Partitionen hinzu.

sudo geli attach /dev/gpt/volume-nyc1-01
sudo geli attach /dev/gpt/volume-nyc1-02

Wenn Sie eine Partition anhängen, werden Sie zur Eingabe der Passphrase aufgefordert, die Sie bei der Initialisierung dieser Partition eingegeben haben.

Betrachten Sie nun die Ergebnisse Ihres Pools mit + zpool +:

sudo zpool list

Sobald die Partitionen verbunden sind, erkennt ZFS den Pool automatisch und stellt die Dateisysteme bereit.

OutputNAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT

Wenn wir die Volumes nicht verschlüsselt hätten, müssten wir uns während eines Neustarts keine Gedanken über diese zusätzlichen Schritte machen. Wir handeln bequemer, um die Sicherheit zu erhöhen. niemand kann die Bände anhängen und den Inhalt ohne die Passphrase betrachten.

Fazit

Wie Sie sehen, können Sie mit ZFS und DigitalOceans Block Storage auf einfache Weise ein skalierbares, verschlüsseltes Dateisystem für Ihre Anforderungen erstellen. Weitere Informationen zu ZFS unter FreeBSD finden Sie im FreeBSD Handbook.