zfs
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
| zfs [2025-12-10 17:23:51] – [ZFS resize] manfred | zfs [2025-12-10 17:26:41] (aktuell) – [ZFS-Snapshot erstellen] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== ZFS ====== | ||
| + | |||
| + | - [[:: | ||
| + | - [[https:// | ||
| + | * Die OpenZFS-Entwickler haben Anpassungen für FreeBSD in ihr Repositorum übernommen. FreeBSD plant bereits seit geraumer Zeit, auf die freie Variante des ZFS-Dateisystems aufzusetzen und trieb die Integration voran. | ||
| + | * ... Doch auch andere Betriebssysteme setzen nicht auf das Original-ZFS, | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ===== Installation ===== | ||
| + | |||
| + | Linux: | ||
| + | > apt install zfsutils-linux zfsnap | ||
| + | |||
| + | FreeBSD //(Die ZFS-Tools sind bereits im FreeBSD-Basis-System enthalten)//: | ||
| + | > pkg install sysutils/ | ||
| + | |||
| + | |||
| + | ===== Allgemeines ===== | ||
| + | |||
| + | > zfs list -s used | ||
| + | > zfs list -S used | ||
| + | |||
| + | |||
| + | ==== ZFS-Cache ==== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | * ARC: ZFS's " | ||
| + | * MFU: Most Frequently Used | ||
| + | * MRU: Most Recently Used | ||
| + | |||
| + | |||
| + | ==== ZFS-Snapshot ==== | ||
| + | |||
| + | [[: | ||
| + | |||
| + | |||
| + | ==== ZFS mit Verschlüsselung ==== | ||
| + | |||
| + | ZFS-Pool anlegen (ohne Mount-Point): | ||
| + | > zpool create -m none HDD1000 /dev/sda | ||
| + | > zpool list HDD1000 | ||
| + | > zpool status HDD1000 | ||
| + | > zfs get mountpoint, | ||
| + | NAME | ||
| + | HDD1000 | ||
| + | HDD1000 | ||
| + | HDD1000 | ||
| + | |||
| + | ZFS-Volumen mit Verschlüsselung anlegen (mit Mount-Point): | ||
| + | > zfs get 2>&1 | grep -Fi encryption | ||
| + | encryption | ||
| + | | ||
| + | > zfs create -o encryption=aes-256-gcm -o keylocation=prompt -o keyformat=passphrase -o mountpoint=/ | ||
| + | |||
| + | Infos über das ZFS-Volumen anzeigen: | ||
| + | > zfs list HDD1000/ | ||
| + | NAME | ||
| + | HDD1000/ | ||
| + | | ||
| + | > zfs get mountpoint, | ||
| + | NAME | ||
| + | HDD1000/ | ||
| + | HDD1000/ | ||
| + | HDD1000/ | ||
| + | | ||
| + | > zfs list | ||
| + | NAME | ||
| + | HDD1000 | ||
| + | HDD1000/ | ||
| + | |||
| + | ZFS-Volumen wieder löschen: | ||
| + | > zfs destroy HDD1000/ | ||
| + | |||
| + | ZFS-Pool wieder löschen: | ||
| + | > zpool destroy HDD1000 | ||
| + | |||
| + | |||
| + | ==== ZFS-Snapshot erstellen ==== | ||
| + | |||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Dieses Skript macht von dem ZFS-Pool " | ||
| + | # | ||
| + | # Es kann maximal EINER pro Stunde angelegt werden, | ||
| + | # sollte für diesen Zeitraum bereits einer existieren, | ||
| + | # dann wird er vorher gelöscht. | ||
| + | # | ||
| + | # zfs snapshot mysql_datadir@4-16 | ||
| + | # zfs list -t snapshot mysql_datadir | ||
| + | # mount -t zfs mysql_datadir@7-16 /mnt | ||
| + | # zfs destroy mysql_datadir@4-16 | ||
| + | # | ||
| + | # Bedeutung von " | ||
| + | # mysql_datadir - ZFS-Pool (Tank) | ||
| + | # 4 - 4. Wochentag -> am Donnerstag aufgenommen | ||
| + | # 16 - zwischen 16:00 und 16:59 Uhr aufgenommen | ||
| + | # | ||
| + | |||
| + | SNAP_ZEIT=" | ||
| + | zfs list -Hp | awk '/ | ||
| + | do | ||
| + | echo "################################################################################" | ||
| + | echo " | ||
| + | zfs destroy ${SNAP}@${SNAP_ZEIT} | ||
| + | zfs snapshot ${SNAP}@${SNAP_ZEIT} | ||
| + | done | ||
| + | echo | ||
| + | |||
| + | # alle SnapShots anzeigen | ||
| + | zfs list -t snapshot | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== ZFS-Snapshot mounten ==== | ||
| + | |||
| + | <code bash> | ||
| + | root@mysqlhost01: | ||
| + | NAME | ||
| + | mysql_datadir@3-17 | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | Filesystem | ||
| + | mysql_datadir@3-17 | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | total 13K | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x 23 root root 4.0K Dec 9 15:39 .. | ||
| + | drwxr-xr-x | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | Filesystem | ||
| + | / | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | total 8.0K | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x 23 root root 4.0K Dec 9 15:39 .. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== ZFS-Snapshot löschen ==== | ||
| + | |||
| + | <code bash> | ||
| + | root@mysqlhost01: | ||
| + | NAME | ||
| + | mysql_datadir@3-17 | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | no datasets available | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== ZFS-Pool resize ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | the resize is triggered by running the online subcommand with '' | ||
| + | <code bash resize> | ||
| + | root@mysqlhost01: | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | |||
| + | root@mysqlhost01: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Stand 2010 ==== | ||
| + | |||
| + | Leider gibt es unter Linux (und NetBSD) kein natives (und freies) ZFS (-Kernelmodul), | ||
| + | * [[http:// | ||
| + | Weiterhin gibt es mit ZFS im Zusammenhang mit großen Datenmengen und weniger als 4GB RAM Probleme. Unter FUSE (egal ob Linux oder NetBSD) gibt es noch eine deutliche Verschärfung dieser Probleme. | ||
| + | |||
| + | So ist bei mir in einem Test auf einem Rechner mit 2GB RAM der FUSE-Daemon immer ausgestiegen, | ||
| + | |||
| + | Aus diesem Grund würde ich ZFS unter Linux nur für USB-Sticks verwenden, auf großen Speichermedien | ||
| + | nur mit Solaris oder FreeBSD. | ||
| + | Unter FreeBSD und Solaris ist es dagegen mein absolutes Lieblingsdateisystem! | ||
| + | Soein genial einfach zu bedienendes und zuverlässiges Dateisystem ist momentan absolut konkurenzlos! | ||
| + | |||
| + | |||
| + | ==== Stand Ende 2013 ==== | ||
| + | |||
| + | |||
| + | === Linux === | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | Das Projekt [[https:// | ||
| + | Ich nutze ihn seit ein paar Wochen und bin damit zufrieden. | ||
| + | |||
| + | > echo "deb http:// | ||
| + | |||
| + | > apt-key adv --recv-keys --keyserver keyserver.ubuntu.com E871F18B51E0147C77796AC81196BA81F6B0FC61 | ||
| + | Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring / | ||
| + | gpg: requesting key F6B0FC61 from hkp server keyserver.ubuntu.com | ||
| + | gpg: key F6B0FC61: public key " | ||
| + | gpg: Total number processed: 1 | ||
| + | gpg: | ||
| + | |||
| + | > apt-key export F6B0FC61 | ||
| + | -----BEGIN PGP PUBLIC KEY BLOCK----- | ||
| + | Version: GnuPG v1.4.12 (GNU/Linux) | ||
| + | | ||
| + | mI0ETjjRQwEEAN1t7LdXiXEDucAXemaXZphLeDSmUE2gHxj/ | ||
| + | rLOqTDNq8XPi4ZSp8Rr8R8jVupmKlt446ESGOadUO0AAjFyYe+YwZ65uYa69536k | ||
| + | T+PhcFepWm8YgJL1skn0u+qpHzMJLvLB6iyAP8fP5C19wjiY8TtpSEtLABEBAAG0 | ||
| + | JkxhdW5jaHBhZCBQUEEgZm9yIE5hdGl2ZSBaRlMgZm9yIExpbnV4iLgEEwECACIF | ||
| + | Ak440UMCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEBGWuoH2sPxh32cD | ||
| + | / | ||
| + | LgHZrft2X3D1fUP6djnueTnFG/ | ||
| + | / | ||
| + | =qkiU | ||
| + | -----END PGP PUBLIC KEY BLOCK----- | ||
| + | |||
| + | > aptitude update | ||
| + | Get: 3 http:// | ||
| + | Get: 6 http:// | ||
| + | Get: 10 http:// | ||
| + | Get: 11 http:// | ||
| + | Ign http:// | ||
| + | Ign http:// | ||
| + | Ign http:// | ||
| + | |||
| + | > aptitude search ubuntu-zfs | ||
| + | p | ||
| + | p | ||
| + | |||
| + | > aptitude install ubuntu-zfs | ||
| + | The following NEW packages will be installed: | ||
| + | build-essential dpkg-dev{a} g++{a} g++-4.7{a} libalgorithm-diff-perl{a} libalgorithm-diff-xs-perl{a} libalgorithm-merge-perl{a} libnvpair1{a} libstdc++6-4.7-dev{a} | ||
| + | libuutil1{a} libzfs1{a} libzpool1{a} spl spl-dkms{a} ubuntu-zfs zfs-dkms zfsutils | ||
| + | The following packages will be upgraded: | ||
| + | mountall | ||
| + | 1 packages upgraded, 17 newly installed, 0 to remove and 1 not upgraded. | ||
| + | Need to get 14,3 MB of archives. After unpacking 45,9 MB will be used. | ||
| + | Do you want to continue? [Y/n/?] | ||
| + | | ||
| + | ... | ||
| + | | ||
| + | depmod.... | ||
| + | | ||
| + | DKMS: install completed. | ||
| + | Setting up libstdc++6-4.7-dev: | ||
| + | Setting up g++-4.7 (4.7.3-1ubuntu1) ... | ||
| + | Setting up g++ (4: | ||
| + | update-alternatives: | ||
| + | Setting up dpkg-dev (1.16.10ubuntu1) ... | ||
| + | Setting up build-essential (11.6ubuntu4) ... | ||
| + | Setting up libalgorithm-diff-perl (1.19.02-3) ... | ||
| + | Setting up libalgorithm-diff-xs-perl (0.04-2build3) ... | ||
| + | Setting up libalgorithm-merge-perl (0.08-2) ... | ||
| + | Setting up spl (0.6.2-1~raring) ... | ||
| + | Setting up libuutil1 (0.6.2-1~raring) ... | ||
| + | Setting up libnvpair1 (0.6.2-1~raring) ... | ||
| + | Setting up libzpool1 (0.6.2-1~raring) ... | ||
| + | Setting up libzfs1 (0.6.2-1~raring) ... | ||
| + | Setting up zfsutils (0.6.2-1~raring) ... | ||
| + | Processing triggers for initramfs-tools ... | ||
| + | update-initramfs: | ||
| + | Warning: No support for locale: en_US.utf8 | ||
| + | | ||
| + | Processing triggers for ureadahead ... | ||
| + | Setting up ubuntu-zfs (7~raring) ... | ||
| + | Processing triggers for libc-bin ... | ||
| + | ldconfig deferred processing now taking place | ||
| + | |||
| + | Current status: 1 update [-1]. | ||
| + | |||
| + | |||
| + | ===== Beispiel ===== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | den Daten-Pool " | ||
| + | > zpool create speicher mirror /dev/ad7 /dev/ad8 | ||
| + | |||
| + | > zpool list speicher | ||
| + | > zpool iostat speicher | ||
| + | > zpool status speicher | ||
| + | |||
| + | alle Daten auf dem Pool überprüfen und ggf. reparieren: | ||
| + | > zpool scrub speicher | ||
| + | |||
| + | auf dem Daten-Pool " | ||
| + | > zfs create speicher/ | ||
| + | > zfs create speicher/ | ||
| + | > zfs create speicher/ | ||
| + | > zfs create speicher/ | ||
| + | |||
| + | die 4 ZFS-Volumen bekommen jeweils einen Mount-Point zugewiesen: | ||
| + | > zfs set mountpoint=/ | ||
| + | > zfs set mountpoint=/ | ||
| + | > zfs set mountpoint=/ | ||
| + | > zfs set mountpoint=/ | ||
| + | |||
| + | so kannst du eine doppelte Redundanz einstellen, das bringt deutlich mehr Datensicherheit | ||
| + | > zfs set copies=2 speicher/ | ||
| + | |||
| + | so kannst du Kompression einstellen: | ||
| + | > zfs set compression=gzip speicher/ | ||
| + | |||
| + | einen SnapShot von '' | ||
| + | > zfs snapshot speicher/ | ||
| + | |||
| + | alle SnapShots von '' | ||
| + | > zfs list -rt snapshot speicher/ | ||
| + | NAME USED AVAIL REFER MOUNTPOINT | ||
| + | speicher/ | ||
| + | |||
| + | den SnapShots mounten: | ||
| + | > mount -t zfs speicher/ | ||
| + | > ls -lha /mnt | ||
| + | > umount /mnt | ||
| + | |||
| + | den SnapShots löschen: | ||
| + | > zfs destroy speicher/ | ||
| + | | ||
| + | > zfs list -rt snapshot speicher/ | ||
| + | no datasets available | ||
| + | |||
| + | nur das eine ZFS-Volumen " | ||
| + | > zfs destroy -r speicher/ | ||
| + | |||
| + | alle ZFS-Volumen ('' | ||
| + | > zfs destroy -r speicher | ||
| + | |||
| + | den ganzen Daten-Pool " | ||
| + | > zpool destroy speicher | ||
| + | |||
