Auf dieser Seite
- Voraussetzungen:
ZFS ist ein kombinierter Dateisystem- und Logical-Volume-Manager. Zu den Merkmalen von ZFS gehören Schutz vor Datenkorruption, Unterstützung hoher Speicherkapazitäten, effiziente Datenkomprimierung, Integration des Dateisystem- und Volume-Management-Konzepts, Snapshots und Copy-on-Write-Klone, kontinuierliche Integritätsprüfung und automatische Reparatur, RAID-Z und nativ NFSv4-ACLs.
ZFS wurde ursprünglich als Open-Source-Software implementiert und unter der Common Development and Distribution License (CDDL) lizenziert.
Wenn wir über das ZFS-Dateisystem sprechen, können wir die folgenden Schlüsselkonzepte hervorheben:
- Datenintegrität.
- Einfache Speicherverwaltung mit nur zwei Befehlen:zfs und zpool.
- Alles kann erledigt werden, während das Dateisystem online ist.
Eine vollständige Übersicht und Beschreibung aller verfügbaren Funktionen finden Sie in diesem ausführlichen Wikipedia-Artikel.
In diesem Tutorial führe ich Sie Schritt für Schritt durch die Installation des ZFS-Dateisystems auf Debian 8.1 (Jessie). Ich werde Ihnen zeigen, wie Sie Pools mit raid0 (Stripe), raid1 (Mirror) und RAID-Z (Raid mit Parität) erstellen und konfigurieren und erklären, wie Sie ein Dateisystem mit ZFS konfigurieren.
Basierend auf den Informationen von der Website www.zfsonlinux.org wird ZFS nur auf der AMD64- und Intel-64-Bit-Architektur (amd64) unterstützt. Beginnen wir mit der Einrichtung.
Voraussetzungen:
- Debian 8 mit 64-Bit-Kernel.
- Root-Rechte.
Schritt 1 – Aktualisieren Sie das Repository und aktualisieren Sie das Debian-Linux-System
Um das zfsonlinux-Repository zu unserem System hinzuzufügen, laden Sie das zfsonlinux-Paket herunter und installieren Sie es wie unten gezeigt. Dadurch werden die Dateien /etc/apt/sources.list.d/zfsonlinux.list und /etc/apt/trusted.gpg.d/zfsonlinux.gpg auf Ihrem Computer hinzugefügt. Danach können Sie zfs wie jedes andere Debian-Paket mit dem Befehl apt-get installieren. Ein weiterer Vorteil der Verwendung des zfsonlinux-Repositorys besteht darin, dass Sie Updates automatisch erhalten, indem Sie "apt-get update &&apt-get upgrade" ausführen.
Melden Sie sich mit SSH-Zugriff beim Debian-Server an, werden Sie Root-Benutzer und führen Sie dann die folgenden Befehle aus.
# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get update
Schritt 2 - Installieren Sie zfsonlinux
Zfsonlinux hat viele Softwareabhängigkeiten, die von apt automatisch installiert werden. Dieser Vorgang wird eine Weile dauern. Wenn die Installation abgeschlossen ist, starten Sie den Server neu.
# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r now
Schritt 3 – Pool erstellen und konfigurieren
Überprüfen Sie nach dem Neustart des Servers, ob zfsonlinux installiert ist und gut läuft.
# dpkg -l | GREP ZFS
II Debian-Zfs 7 ~ Jessie AMD64 Native ZFS-Dateisystem-Metapackage für Debian. -2 Alle nativen ZFS-Dateisystem-Kernel-Module für Linux
II Zfsonlinux 6 All Archive.zfsonlinux.org Trust Paket
ii Zfsutils 0.6.5.2-2 AMD64-Befehlszeilen-Tools zum Verwalten von ZFS-Dateisystemen
Das obige Ergebnis zeigt, dass zfs unter Linux bereits installiert ist, sodass wir mit der Erstellung des ersten Pools fortfahren können.
Ich habe diesem Server fünf Festplatten hinzugefügt, jede mit einer Größe von 2 GB. Wir können die verfügbaren Festplatten mit diesem Befehl überprüfen:
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
Wir können sehen, dass wir /dev/sda haben, bis /dev/sdg, /dev/sda für das Betriebssystem Debian Linux Jessie 8.1 verwendet wird. Wir werden /dev/sdb bis /dev/sdg für das ZFS-Dateisystem verwenden.
Jetzt können wir mit dem Erstellen des Pools beginnen, für den ersten zeige ich Ihnen, wie Sie einen raid0 (Stripe) erstellen.
# zpool list
keine Pools verfügbar
# zpool create -f pool0 /dev/sdb
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0 % 0 % 1,00 x ONLINE -
Der Befehl „zpool list“ zeigt, dass wir erfolgreich einen raid0 zfs-Pool erstellt haben, der Name des Pools ist pool0 und die Größe ist 2 GB.
Als nächstes erstellen wir ein raid1 (Spiegel) mit den anderen Festplatten.
# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0 % 0 % 1,00x ONLINE -
pool1 1,98 G 64 K 1,98 G - 0 % 0 % 0 % 1,00 x ONLINE -
Wir können sehen, dass wir jetzt zwei Pools haben, pool0 für raid0 und pool1 für raid1.
Um den Status der Pools zu überprüfen, können wir den folgenden Befehl verwenden:
# zpool status
pool:pool0
state:ONLINE
scan:none angefordert
config:
NAME STATE READ WRITE CKSUM
pool0 ONLINE 0 0 0
sdb ONLINE 0 0 0
Fehler:Keine Datenfehler bekannt
pool:pool1
status:ONLINE
Scan:Keine angefordert
Konfiguration:
Name Status Lesen Sie Schreiben Sie CKSUM
Pool1 Online 0 0 0
Mirror-0 online 0 0 0
SDC Online 0 0 0
sdd ONLINE 0 0 0
Fehler:Keine bekannten Datenfehler
Wir können den Pool-Status mit dem Befehl „zpool status“ überprüfen. Wir können den Unterschied zwischen pool0 und pool1 sehen, pool0 hat nur eine Festplatte und pool1 hat zwei Festplatten und der Status der Festplatten ist gespiegelt (mirror-0).
Als Nächstes erstellen wir einen Pool mit RAID-Z, RAID-Z ist ein Daten-/Paritätsverteilungsschema wie RAID-5, aber es verwendet eine dynamische Streifenbreite:Jeder Block hat seinen eigenen RAID-Streifen, unabhängig von der Blockgröße. was dazu führt, dass jeder RAID-Z-Schreibvorgang ein Full-Stripe-Schreibvorgang ist.
RAID-Z erfordert mindestens drei Festplatten und ist eine Art Kompromiss zwischen RAID 0 und RAID 1. In einem RAID-Z-Pool:Wenn eine einzelne Festplatte in Ihrem Pool ausfällt, ersetzen Sie einfach diese Festplatte und ZFS baut die Daten automatisch wieder auf basierend auf den Paritätsinformationen von den anderen Festplatten. Um alle Informationen in Ihrem Speicherpool zu verlieren, müssten zwei Festplatten sterben. Um die Laufwerkskonfiguration noch redundanter zu machen, können Sie RAID 6 (RAID-Z2 im Falle von ZFS) verwenden, um doppelte Parität zu erhalten.
Lassen Sie uns zuerst einen RAID-Z-Pool mit einer Parität erstellen.
# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz1 5.94G 117K 5.94G - 0 % 1,00x ONLINE -
# zpool status poolz1
pool:poolz1
state:ONLINE
scan:none angefordert
config:
NAME STATE READ WRITE CKSUM
Poolz1 Online 0 0 0
Raidz1-0 Online 0 0 0
SDE Online 0 0 0
SDF Online 0 0 0
SDG Online 0 0 0
errors:Keine bekannten Datenfehler
# df -h /poolz1
Dateisystem Größe Verwendet Verfügbar Verwenden % Eingehängt auf
poolz1 3,9 G 0 3,9 G 0 % /poolz1
Wie wir sehen können, zeigt df -h, dass unser 6-GB-Pool jetzt auf 4 GB reduziert wurde, 2 GB werden zum Speichern von Paritätsinformationen verwendet. Mit dem Befehl zpool status sehen wir, dass unser Pool jetzt RAID-Z verwendet.
Als nächstes erstellen wir RAID-Z2 (Raid 6), dazu müssen wir den vorhandenen Pool entfernen, da keine Festplatten mehr verfügbar sind. Das Entfernen eines Pools ist sehr einfach, wir können dafür den Befehl zpool Destroy verwenden.
# zpoolliste
Namensgröße Alloc Free EXDSZ Frag Cap Dedup Health Alroot
Pool0 1,98G 64K 1,98G -0%0%1,00X Online -
Pool1 1,98G 64K 1,98G - 0 % 0 % 1,00x ONLINE -
poolz1 5,94 G 117 K 5,94 G - 0 % 0 % 0 % 1,00x ONLINE -
# zpool zerstört pool0
# zpool zerstört pool1
# zpool zerstört poolz1
# zpool list
keine Pools verfügbar
Jetzt sind alle unsere Zpools weg, sodass wir einen RAID-Z2-Pool erstellen können.
# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz2 7.94G 135K 7.94G - 0 % ONLINE -
# df -h /poolz2
Dateisystem Größe Verwendet Verfügbar Verwenden % Eingehängt auf
poolz2 3,9 G 0 3,9 G 0 % /poolz2
# zpool status poolz2
pool:poolz2
state:ONLINE
scan:none angefordert
config:
NAME STATE READ WRITE CKSUM
Poolz2 Online 0 0 0
Raidz2-0 Online 0 0 0
SDB Online 0 0 0
SDC Online 0 0 0
SDD Online 0 0 0
SDE ONLINE 0 0 0
Fehler:Keine bekannten Datenfehler
Wie wir sehen können, zeigt df -h, dass unser 8-GB-Pool jetzt auf 4 GB reduziert wurde, da 4 GB verwendet werden, um die Paritätsinformationen zweimal zu speichern. Mit dem Befehl „zpool status“ sehen wir, dass unser Pool jetzt RAID-Z2 verwendet.
Schritt 4 – Simulieren Sie einen Festplattenfehler
In diesem Schritt simulieren wir einen katastrophalen Festplattenausfall (d. h. eine der Festplatten im zpool funktioniert nicht mehr).
Erstellen Sie eine Datei in poolz2 und stellen Sie sicher, dass wir darauf zugreifen können.
# echo "Nur Test"> /poolz2/test.txt
# cat /poolz2/test.txt
Nur Test
Bevor wir den Fehler simulieren:Überprüfen Sie den Status von poolz2 und stellen Sie sicher, dass der Status Online ist und dass der Status aller Laufwerke Online ist.
Der Fehler wird simuliert, indem zufällige Daten mit dem dd-Befehl in /dev/sdb geschrieben werden .
# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
pool:poolz2
state :ONLINE
status:Bei einem oder mehreren Geräten ist ein nicht behebbarer Fehler aufgetreten. Es wurde
versucht, den Fehler zu beheben. Anwendungen sind nicht betroffen.
Maßnahme:Stellen Sie fest, ob das Gerät ersetzt werden muss, und löschen Sie die Fehler
mit "zpool clear" oder ersetzen Sie das Gerät mit "zpool replace".
siehe:http://zfsonlinux.org/msg/ZFS-8000-9P
Scan:Scrub reparierte 17K in 0h0m mit 0 Fehlern am Dienstag, 8. Dez. 22:37:49 2015
config:
Name Status Lesen Sie Schreiben Sie CKSUM
Poolz2 Online 0 0 0
Raidz2-0 Online 0 0 0
SDB Online 0 0 25
SDC Online 0 0 0
SDD Online 0 0 0
sde ONLINE 0 0 0
Fehler:Keine Datenfehler bekannt
Jetzt können wir sehen, dass bei einer oder mehreren Festplatten ein nicht behebbarer Fehler aufgetreten ist, also müssen wir die Festplatte ersetzen. In diesem Fall ersetzen wir die /dev/sdb-Festplatte durch /dev/sdf.
# zpool replace poolz2 sdb sdf
# zpool status
pool:poolz2
state:ONLINE
scan:Resilvered 49.5K in 0h0m mit 0 Fehlern am Di 8. Dezember 22:43:35 2015
Konfiguration:
Name Status Lesen Sie Schreiben Sie CKSUM
Poolz2 Online 0 0 0
Raidz2-0 online 0 0
SDF online 0 0 0
SDC Online 0 0 0
SDD Online 0 0 0
sde online 0 0
Fehler:Keine bekannten Datenfehler
Nachdem wir /dev/sdb durch /dev/sdf ersetzt haben, ist der Fehler verschwunden und wir können immer noch auf die zuvor erstellte Testdatei zugreifen.
# cat /poolz2/test.txt
Nur testen
Bis zu diesem Schritt wissen wir, wie man einen zpool erstellt und konfiguriert.
Schritt 5 – ZFS-Dateisystem erstellen und konfigurieren
Im nächsten Schritt lernen wir, wie man das ZFS-Dateisystem erstellt und konfiguriert.
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 105K 3.83G 26.1K /poolz2
Wir haben bereits ein ZFS-Dateisystem, das automatisch hinzugefügt wird, wenn wir den zpool erstellen. Jetzt erstellen wir ein weiteres ZFS-Dateisystem.
# zfs create poolz2/tank
# zfs list
NAME VERWENDET VERFÜGBAR REFER MOUNTPOINT
poolz2 132K 3,83G 26,1K /poolz2
poolz2/tank 25,4K 3,83G 25,4K /poolz2/tank
# df -h | grep poolz2
poolz2 3,9 G 128 K 3,9 G 1 % /poolz2
poolz2/tank 3,9 G 128 K 3,9 G 1 % /poolz2/tank
Sehr einfach oder? Wir erstellen ein neues ZFS-Dateisystem mit dem Namen Tank und mounten es automatisch als /poolz2/tank.
Wie erstelle ich einen benutzerdefinierten Mountpoint für ein ZFS-Dateisystem? Verwenden Sie den folgenden Befehl:
# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2 3,9 G 0 3,9 G 0 % /poolz2
poolz2/tank 3,9 G 0 3,9 G 0 % /poolz2/tank
poolz2/data 3,9 G 0 3,9 G 0 % /data
Wie ändere ich den vorhandenen Mountpoint? Wir können das mit dem folgenden Befehl tun:
# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2 3,9 G 0 3,9 G 0 % /poolz2
poolz2/data 3,9 G 0 3,9 G 0 % /data
poolz2/tank 3,9 G 0 3,9 G 0 % /tankVerwenden Sie den folgenden Befehl, um ein Dateisystem zu mounten und zu unmounten:
# zfs unmount /data
# df -h | grep poolz2
poolz2 3,9 G 0 3,9 G 0 % /poolz2
poolz2/tank 3,9 G 0 3,9 G 0 % /tank# zfs mount poolz2/data
# df -h | grep poolz2
poolz2 3,9 G 0 3,9 G 0 % /poolz2
poolz2/tank 3,9 G 0 3,9 G 0 % /tank
poolz2/data 3,9 G 0 3,9 G 0 % /dataDas Entfernen eines zfs-Dateisystems ist sehr einfach, wir können dafür den Befehl zfs destroy verwenden.
# zfs zerstören poolz2/data
# zfs list
NAME VERWENDET VERFÜGBAR REFER MOUNTPOINT
poolz2 152K 3,83G 26,1K /poolz2
poolz2/tank 25,4K 3,83G 25,4K /tankDas Dateisystem /data ist weg.
Schlussfolgerung
Das ZFS-Dateisystem ist ein revolutionäres neues Dateisystem, das die Art und Weise, wie Dateisysteme auf Unix-ähnlichen Betriebssystemen verwaltet werden, grundlegend verändert. ZFS bietet Funktionen und Vorteile, die in keinem anderen heute verfügbaren Dateisystem gefunden wurden. ZFS ist robust, skalierbar und einfach zu verwalten.