Im vorherigen Tutorial haben wir gelernt, wie man einen zpool und ein ZFS-Dateisystem oder Dataset erstellt. In dieser Anleitung zeige ich Ihnen Schritt für Schritt, wie Sie mit ZFS-Snapshots, -Klonen und -Replikation arbeiten. Schnappschuss, Klon. und Replikation sind die leistungsstärksten Funktionen des ZFS-Dateisystems.
ZFS-Snapshots - eine Übersicht
Snapshot ist eine der leistungsstärksten Funktionen von ZFS. Ein Snapshot bietet eine schreibgeschützte Point-in-Time-Kopie eines Dateisystems oder Volumes, die keinen zusätzlichen Speicherplatz im ZFS-Pool verbraucht. Der Snapshot verwendet nur dann Speicherplatz, wenn die Blockreferenzen geändert werden. Snapshots sparen Speicherplatz, indem sie nur die Unterschiede zwischen dem aktuellen Datensatz und einer früheren Version aufzeichnen.
Ein typisches Beispiel für die Verwendung eines Snapshots ist eine schnelle Möglichkeit, den aktuellen Zustand des Dateisystems zu sichern, wenn eine riskante Aktion wie eine Softwareinstallation oder ein Systemupgrade durchgeführt wird.
Erstellen und Löschen eines ZFS-Schnappschusses
Auf Snapshots von Volumes kann nicht direkt zugegriffen werden, aber sie können geklont, gesichert und zurückgesetzt werden. Das Erstellen und Zerstören eines ZFS-Snapshots ist sehr einfach, wir können dafür die Befehle zfs snapshot und zfs destroy verwenden.
Erstellen Sie einen Pool namens datapool.
# zpool create datapool mirror /dev/sdb /dev/sdc
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
datapool 1.98G 65K 1.98G - 0% 0% 1.00x ONLINE -
Jetzt haben wir einen Pool namens Datapool, als nächstes müssen wir ein ZFS-Dateisystem erstellen, um die Snapshot-Funktion zu simulieren.
# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME USED AVAIL REFER MOUNTPOINT
datapool 93.5K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
Um einen Snapshot des Dateisystems zu erstellen, können wir den zfs-Snapshot-Befehl verwenden, indem wir den Pool und den Snapshot-Namen angeben. Wir können die Option -r verwenden, wenn wir einen Snapshot rekursiv erstellen möchten. Der Snapshot-Name muss die folgenden Benennungsanforderungen erfüllen:
[email protected] [email protected]
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 0 - 19.5K -
Ein Snapshot für datapool/docs wird erstellt.
Um den Snapshot zu zerstören, können wir wie gewohnt den Befehl zfs destroy verwenden.
# zfs destroy datapool/[email protected]
# zfs list -t snapshot
no datasets available
Einen Snapshot zurücksetzen
Für die Simulation müssen wir eine Testdatei im /docs-Verzeichnis erstellen.
# echo "version 1" > /docs/data.txt
# cat /docs/data.txt
version 1
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 9K - 19.5K -
Jetzt ändern wir den Inhalt von /docs/data.txt
# echo "version 2" > /docs/data.txt
# cat /docs/data.txt
version 2
Wir können ein vollständiges Rollback auf einen älteren Snapshot durchführen, der uns den Zeitpunkt der Kopie zu dem Zeitpunkt gibt, zu dem der Snapshot erstellt wurde.
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 9.50K - 19.5K -
# zfs rollback datapool/[email protected]
# cat /docs/data.txt
version 1
Wie wir sehen können, ist der Inhalt von data.txt wieder der vorherige Inhalt.
Wenn wir den Snapshot umbenennen möchten, können wir den Befehl zfs rename verwenden.
# zfs rename datapool/[email protected] datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 9.50K - 19.5K -
Hinweis:Ein Datensatz kann nicht zerstört werden, wenn Snapshots dieses Datensatzes vorhanden sind, aber wir können die Option -r verwenden, um dies zu überschreiben.
# zfs destroy datapool/docs
cannot destroy 'datapool/docs': filesystem has children
use '-r' to destroy the following datasets:
datapool/[email protected]
# zfs destroy -r datapool/docs
# zfs list -t snapshot
no datasets available
Übersicht über ZFS-Klone
Ein Klon ist ein beschreibbares Volume oder Dateisystem, dessen ursprünglicher Inhalt derselbe ist wie der Datensatz, aus dem es erstellt wurde.
Erstellen und Zerstören eines ZFS-Klons
Klone können nur aus einem Snapshot erstellt werden und ein Snapshot kann nicht gelöscht werden, bis Sie den Klon löschen, der auf diesem Snapshot basiert. Verwenden Sie zum Erstellen eines Klons den Befehl zfs clone.
# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME USED AVAIL REFER MOUNTPOINT
datapool 93.5K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
# mkdir /docs/folder{1..5}
# ls /docs/
folder1 folder2 folder3 folder4 folder5
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 0 - 19K -
Jetzt erstellen wir einen Klon aus dem Snapshot-Datenpool/[email protected]
# zfs clone datapool/[email protected] datapool/pict
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
datapool 166K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
datapool/pict 1K 1.92G 19K /datapool/pict
Der Klonvorgang ist abgeschlossen, der Snapshot-Datenpool/[email protected] wurde nach /datapool/pict geklont. Wenn wir den Inhalt des Verzeichnisses /datapool/pict prüfen, sollte der Inhalt mit dem von /datapool/docs übereinstimmen.
# ls /datapool/pict
folder1 folder2 folder3 folder4 folder5
Nachdem wir einen Snapshot geklont haben, kann der Snapshot nicht gelöscht werden, bis Sie das Dataset löschen.
# zfs destroy datapool/[email protected]
cannot destroy 'datapool/[email protected]': snapshot has dependent clones
use '-R' to destroy the following datasets:
datapool/pict
# zfs destroy datapool/pict
Endlich können wir den Snapshot zerstören.
# zfs destroy datapool/[email protected]
# zfs list -t snapshot
no datasets available
Übersicht über die ZFS-Replikation
Die Basis für diese ZFS-Replikation ist ein Snapshot, wir können jederzeit einen Snapshot erstellen, und wir können so viele Snapshots erstellen, wie wir möchten. Durch kontinuierliches Erstellen, Übertragen und Wiederherstellen von Snapshots können Sie eine Synchronisierung zwischen einer oder mehreren Maschinen bereitstellen. ZFS bietet eine integrierte Serialisierungsfunktion, die eine Stream-Darstellung der Daten an die Standardausgabe senden kann.
ZFS-Replikation konfigurieren
In diesem Abschnitt möchte ich Ihnen zeigen, wie Sie einen Datensatz aus dem Datenpool in den Sicherungspool replizieren, aber es ist möglich, die Daten nicht nur in einem anderen Pool zu speichern, der mit dem lokalen System verbunden ist, sondern sie auch über ein Netzwerk an ein anderes System zu senden. Die zum Replizieren von Daten verwendeten Befehle sind zfs send und zfs Receive.
Erstellen Sie einen weiteren Pool namens Backuppool.
# zpool create backuppool mirror sde sdf
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
backuppool 1.98G 50K 1.98G - 0% 0% 1.00x ONLINE -
datapool 1.98G 568K 1.98G - 0% 0% 1.00x ONLINE -
Prüfen Sie den Pool-Status:
# zpool status
pool: datapool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
datapool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors
pool:backuppool
status:ONLINE
scan:keine angefordert
config:
NAME STATUS LESEN SCHREIBEN CKSUM
backuppool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
bekannte Fehler
Erstellen Sie ein Dataset, das wir replizieren.
# zfs snapshot datapool/[email protected]
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/[email protected] 0 - 19K -
# ls /docs/
folder1 folder2 folder3 folder4 folder5
Es ist Zeit für die Replikation.
# zfs send datapool/[email protected] | zfs receive backuppool/backup
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
backuppool 83K 1.92G 19K /backuppool
backuppool/backup 19K 1.92G 19K /backuppool/backup
datapool 527K 1.92G 19K /datapool
datapool/docs 19K 1.92G 19K /docs
# ls /backuppool/backup
folder1 folder2 folder3 folder4 folder5
Der Datensatz datapool/[email protected] wurde erfolgreich in den Backuppool/backup repliziert.
Um einen Datensatz auf einen anderen Computer zu replizieren, können wir den folgenden Befehl verwenden:
# zfs send datapool/[email protected] | ssh otherserver zfs recv backuppool/backup
Fertig.
Schlussfolgerung
Snapshot, Klon und Replikation sind die leistungsstärksten Funktionen von ZFS. Snapshots werden verwendet, um Point-in-Time-Kopien von Dateisystemen oder Volumes zu erstellen, Klonen wird verwendet, um ein dupliziertes Dataset zu erstellen, und die Replikation wird verwendet, um ein Dataset von einem Datenpool in einen anderen Datenpool auf demselben Computer zu replizieren oder Datenpools zwischen verschiedenen zu replizieren Maschinen.