====== ZFS & ZPool ( File System) ====== Was ist ZFS und was ist ein ZPool? Folgende Zittate können als kurze Erklährung herangezogen werden. [[https://openzfs.github.io/openzfs-docs/index.html|Eine gute Dokumentation über Open ZFS findet sich hier.]] ===== Was ist ZFS oder Zpool? ===== [[https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/zfs-term.html#zfs-term-vdev|Ein Zittag aus der FreeBSD Online-Dokumentation.]] ZFS ist ein fundamental anderes Dateisystem aufgrund der Tatsache, dass es mehr als ein Dateisystem ist. ZFS kombiniert die Rolle eines Dateisystems mit dem Volumemanager, was es ermöglicht, zusätzliche Speichermedien zu einem laufenden System hinzuzufügen und diesen neuen Speicher sofort auf allen auf dem Pool existierenden Dateisystemen zur Verfügung zu haben. Durch die Kombination von traditionell getrennten Rollen ist ZFS in der Lage, Einschränkungen, die zuvor RAID-Gruppen daran gehindert hatten, zu wachsen. Jedes Gerät auf höchster Ebene in einem Pool wird ein vdev genannt, was eine einfache Platte oder eine RAID-Transformation wie ein Spiegel oder RAID-Z-Verbund sein kann. ZFS-Dateisysteme (datasets genannt), haben jeweils Zugriff auf den gesamten freien Speicherplatz des gesamten Pools. Wenn Blöcke aus diesem Pool allokiert werden, verringert sich auch der freie Speicherplatz für jedes Dateisystem. Dieser Ansatz verhindert die allgegenwärtige Falle von umfangreichen Partitionen, bei denen freier Speicherplatz über alle Partitionen hinweg fragmentiert wird. [[https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/zfs-term.html#zfs-term-vdev|Ein Zittat aus der Wiki Online-Dokumentation.]] ZFS ist ein von Sun Microsystems entwickeltes transaktionales Dateisystem, das zahlreiche Erweiterungen für die Verwendung im Server- und Rechenzentrumsbereich enthält. Hierzu zählen die vergleichsweise große maximale Dateisystemgröße, eine einfache Verwaltung selbst komplexer Konfigurationen, die integrierten RAID-Funktionalitäten, das Volume-Management sowie der prüfsummenbasierte Schutz vor Datenübertragungsfehlern. Der Name ZFS stand ursprünglich für Zettabyte File System, ist aber inzwischen ein Pseudo-Akronym, wodurch die Langform nicht mehr gebräuchlich ist. [[https://wiki.ubuntu.com/ZFS/ZPool|Ein Zittag aus dem Ubuntu Wiki Online-Dokumentation.]] ZFS filesystems are built on top of virtual storage pools called zpools. A zpool is constructed of virtual devices (vdevs), which are themselves constructed of block devices: files, hard drive partitions, or entire drives, with the last being the recommended usage.[6] Block devices within a vdev may be configured in different ways, depending on needs and space available: non-redundantly (similar to RAID 0), as a mirror (RAID 1) of two or more devices, as a RAID-Z group of three or more devices, or as a RAID-Z2 group of four or more devices.[7] Besides standard storage, devices can be designated as volatile read cache (ARC), nonvolatile write cache, or as a spare disk for use only in the case of a failure. Finally, when mirroring, block devices can be grouped according to physical chassis, so that the filesystem can continue in the face of the failure of an entire chassis. Zusammenfassend hier die technischen Eckdaten des ZFS: ^Bedeutung^Grösse oder Dimmension^ |Wortlänge|128 Bit| |Volumen Manager|integriert| |Ausfallsicherheit|RAID-1 RAID-Z1 (1 Parity-Bit analog RAID 5)| |max Grösse des Dateisystems|16 EiB(=64 Bit Gross)| |max. Größe jedes Pools |128 Bit Gross| |max. Anzahl an Dateien in einem Verzeichnis|48 Bit Gross| |max. Anzahl an Geräten im Pool |64 Bit Gross| |max. Anzahl an Dateisystemen im Pool |64 Bit Gross| |max. Anzahl an Pools im System |64 Bit Gross| ---- ===== Einrichten ===== Ein zpool zeigt sich aus Sicht des Anwender wie ein Verzeichnis analog dem mount Verzeichnis bei Linux (/mnt/...). Um ein zpool laufwerk (Verzeichnis) einzurichten benötigt man nur wenige Schritte. [[https://wiki.ubuntu.com/ZFS/ZPool|Folgend einige Beispiele gefunden auf dieser Seite.]] [[https://docs.oracle.com/cd/E37838_01/html/E61017/index.html|Auch die Oracle Dokumentation findet sich gute Anleitungen und Beispiele.]] #ZPool Types #ZPool Stripe group: zpool create vol0 /dev/sda /dev/sdb /dev/sdc #Der Pool heisst hier vol0 und man kann in als Ordner im #Linux Dateisystem sehen. Darin befinden sich 3 Laufwerke #die alle zu einem zusammengefasst werden. Die Grösse #ist also sda + sdb + sdc = max Speicherkapazität. #Achtung hier keine Datensichheit. Ist ein Laufwerk #defekt können Sie Daten verlieren. #ZPool mirror group: zpool create vol0 mirror /dev/sda /dev/sdb #Alles wie oben erwähnt. Nur hier werden 2 Laufwerke #gespiegelt. Damit sind auf beiden Laufwerken #identischen Daten vorhanden. Wenn ein Laufwerk #ausfällt so sind die Daten auf dem anderen #noch enthalten. Die Speichergrösse ist allerdings #nur so gross wie die des kleinsten Laufwerks. #ZPool raidz group: Similar to RAID5. zpool create vol0 raidz /dev/sda /dev/sdb /dev/sdc #ZPool raidz2 set: Similar to RAID5 with dual parity. zpool create vol0 raidz2 /dev/sdb /dev/sdc1 /dev/sdd /dev/sde Jetzt stellt sich die Frage wie man diese Pools (Disk Pools) auch wieder löschen kann. ---- Eine einmal eingesetzte Harddisk oder auch zwei (Mirror) kann ausfallen und muss unter Umständen ausgetauscht werden. Damit eine z.B. Harddisk defekt ist, muss man diese letztendlich austauschen. Mit folgende Befehlen lässte sich eine HD aus dem zpool entfernen. # Erst muss festellen wie der zpool aufgebaut ist bzw. ein defekt vorliegt. zpool status # Ausgabe: pool: zfs_disk_pool state: ONLINE scan: scrub repaired 0B in 1 days 02:03:00 with 0 errors on Mon Nov 9 02:27:01 2020 config: NAME STATE READ WRITE CKSUM zfs_disk_pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 sdd ONLINE 0 0 0 sde ONLINE 0 0 0 # Nun muss noch festgestellt werden welche HD zu entfernen ist. # Mit folgendem Befehl lässt sich eine detaillierte Ausgabe anzeigen. lsblk # Hier ein Beispiel. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 512M 0 part └─sda3 8:3 0 465.3G 0 part ├─pve-swap 253:0 0 8G 0 lvm [SWAP] ├─pve-root 253:1 0 96G 0 lvm / ├─pve-data_tmeta 253:2 0 3.5G 0 lvm │ └─pve-data-tpool 253:4 0 338.4G 0 lvm │ ├─pve-data 253:5 0 338.4G 0 lvm │ ├─pve-vm--100--disk--0 253:6 0 32G 0 lvm │ └─pve-vm--800--disk--0 253:7 0 56G 0 lvm └─pve-data_tdata 253:3 0 338.4G 0 lvm └─pve-data-tpool 253:4 0 338.4G 0 lvm ├─pve-data 253:5 0 338.4G 0 lvm ├─pve-vm--100--disk--0 253:6 0 32G 0 lvm └─pve-vm--800--disk--0 253:7 0 56G 0 lvm sdb 8:16 0 12.8T 0 disk ├─sdb1 8:17 0 12.8T 0 part └─sdb9 8:25 0 8M 0 part sdc 8:32 0 12.8T 0 disk ├─sdc1 8:33 0 12.8T 0 part └─sdc9 8:41 0 8M 0 part sdd 8:48 0 7.3T 0 disk ├─sdd1 8:49 0 7.3T 0 part └─sdd9 8:57 0 8M 0 part sde 8:64 0 7.3T 0 disk ├─sde1 8:65 0 7.3T 0 part └─sde9 8:73 0 8M 0 part # In diesem Beispiel möchte ich die beiden 8TB HD's austauschen. Also 'sdd' und 'sde'. # Wie bei 'zpool status' ersichtlich befinden sich beide in 'mirror-1'. # Mit folgendem Befehl werden nun beide aus dem zpool herausgenommen. # Wichtig dabei! Es wird dabei versucht die Daten auf den rest des pools zu kopieren. # Kontrollieren Sie vorher ob genügent Platz vorhanden ist. zpool remove zfs_disk_pool mirror-1 ---- ====== btrfs (B-tree File System) (ähnlich wie ZFS) ====== Für das neue Dateisystem [[https://de.wikipedia.org/wiki/Btrfs|btrfs (B-tree File System)]] gibt es an dieser Stelle eine [[https://btrfs.wiki.kernel.org/index.php/Getting_started|englische Anleitung]]. Damit lassen sich viele [[https://btrfs.wiki.kernel.org/index.php/SysadminGuide|verschieden Dateisysteme]] und über verschiedene Laufwerke erstellen. Ein [[https://www.youtube.com/watch?v=qHalOdCZO9Q&feature=youtu.be|kurzes Youtube Video]] erklärt was btrfs ist und wie einige Befehlen funktionieren. Dieser [[https://www.libe.net/ubuntu-zfs#BTRFS|Bericht über btrfs]] erklärt die Optimierungsmöglichenkeit von btrfs. Diese [[https://wiki.ubuntuusers.de/Installieren_auf_Btrfs-Dateisystem/#Der-mkfs-btrfs-Befehl|Hilfe ist spezielle für Ubuntu Systeme]] gedacht. Beim Einsatz von mehreren Haddisk oder SSD empfield sich ein [[https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices|btrfs Raid]] einzusetzen. ====== Installation und Konfiguration ====== Das Dateisystem **btrfs** ist ein System dem sich auf einfachste weise Speichermedien hinzuzufügen und entfernen lassen ohne dabei die Daten zu verlieren. Letzteres sollte man natürlich nur mit vorsicht vornehmen will man nicht Daten verlieren. Es lassen sich auch Relationen wie **Raid0**, **Raid1**, **Raid10** erstellen und diese lassen sich auch im nachhinein einrichten. Diese kurze [[https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices|wiki Beschreibung]] hilft beim ersten Einrichten eines btrfs Dateisystems. ==== BtrFs einrichten ==== Als Beispiel wie **btrfs** einzurichten ist, soll folgende Situation herhalten. Stellen Sie sich vor Sie wollen zukünftig ein **Raid10** besitzen, haben aber heute noch nicht das Geld gleich vier Harddisk zu kaufen. Infolge dessen wird man erst eine Platte kaufen und diese einrichten. Das Gute dabei ist, dass man sich zu diesem Zeitpunkt noch nicht entscheiden muss welches Raid man letztendlich anwenden will. Nachfolgende Grafik zeigt der Aufbau eines Raid10 Systems auf. {{:start:linux:filesystem:btrfs:raid_10_schema.jpg?400|}} .. ==== 1. Disk einrichten ==== mkfs.btrfs -d single /dev/sdb //Hier Ihre Laufwerksname ==== 2. xxx ==== Tool -> btrfs-prog ... ==== 3. xxx ==== mkfs.btrfs ... ... ==== 4. xxx ==== mount -> over uuid ==== 5. xxx ==== nano /etc/fstab ==== 6. xxx ==== ...folgt..