Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung
server_und_serverdienste:linux_zfs [2017/04/01 02:38] – angelegt adminserver_und_serverdienste:linux_zfs [2018/04/23 22:48] – [Die wichtigsten ZFS-Befehle auf einen Blick] boospy
Zeile 1: Zeile 1:
 {{datei:zfs-linux.png?nolink}} {{datei:zfs-linux.png?nolink}}
 +
 +====== Linux ZFS ======
 +
  
 ZFS (ursprünglich Zettabyte File System) wird oft als Dateisystem angesehen, was im Grunde genommen ein Missverständnis darstellt. ZFS kann ein Dateisystem sein, aber beherrscht auch noch einiges mehr. Es vereint die Funktionalität eines Logical Volume Managers und eines Software-RAID mit einem Copy-on-Write-Dateisystem (COW). Das heißt, dass es (aufgrund seiner Kenntnisse der Festplattenbelegung) effizienter als jedes Hardware-RAID arbeitet, Daten-Integrität per Transaktionen ähnlich wie bei relationalen Datenbanken sichert und im Falle von Daten-Redundanz (Mehrfachspeicherung) sogar selbständig Daten repariert. ZFS (ursprünglich Zettabyte File System) wird oft als Dateisystem angesehen, was im Grunde genommen ein Missverständnis darstellt. ZFS kann ein Dateisystem sein, aber beherrscht auch noch einiges mehr. Es vereint die Funktionalität eines Logical Volume Managers und eines Software-RAID mit einem Copy-on-Write-Dateisystem (COW). Das heißt, dass es (aufgrund seiner Kenntnisse der Festplattenbelegung) effizienter als jedes Hardware-RAID arbeitet, Daten-Integrität per Transaktionen ähnlich wie bei relationalen Datenbanken sichert und im Falle von Daten-Redundanz (Mehrfachspeicherung) sogar selbständig Daten repariert.
  
-  *  Systemgrundlage: Proxmox 3.4 / 4.X+  *  Systemgrundlage: Proxmox 3.4 / 4.X / 5.0
   *  ZFSutils: 0.6.4.3 /  0.6.5-pve6~jessie   *  ZFSutils: 0.6.4.3 /  0.6.5-pve6~jessie
-  *  Kernel: 3.10.0-10-pve / 4.2.3-2-pve+  *  Kernel: 3.10.0-10-pve / 4.2.3-2-pve / 4.10.17-4-pve
  
 Alles was unter diese Version liegt, ist entweder durch Bugs, oder fehlende Features wie z.B. das ZFS die Geräte per ID anspricht, nicht brauchbar. Alles was unter diese Version liegt, ist entweder durch Bugs, oder fehlende Features wie z.B. das ZFS die Geräte per ID anspricht, nicht brauchbar.
  
  
-====== Option Ashift ======+===== Option Ashift =====
  
  
Zeile 37: Zeile 40:
  
  
-====== Memorylimit setzen ======+===== Memorylimit setzen =====
  
 Wenn man möchte kann man ZFS ein Memorylimit setzten. Wenn man möchte kann man ZFS ein Memorylimit setzten.
Zeile 50: Zeile 53:
  
  
-====== Anlegen eines neuen Pools im Raid10 und hinzufügen zweier weiteren Festplatten ======+===== Anlegen eines neuen Pools im Raid10 und hinzufügen zweier weiteren Festplatten =====
  
  
Zeile 102: Zeile 105:
   errors: No known data errors   errors: No known data errors
  
-Die Daten werden bei einer Erweiterung nicht gesynct. Somit ist der Erweitungsprozess binnen Minuten abgeschlossen. Unabhängig von der Speichergröße. Daten werden erst dann auf die neuen Platten verteilt wenn diese das erste mal verwendet werden.+Die Daten werden bei einer Erweiterung nicht gesynct. Somit ist der Erweitungsprozess binnen Minuten abgeschlossen. Unabhängig von der Speichergröße. Daten werden erst dann auf die neuen Platten verteilt wenn diese das erste mal geschrieben werden. 
  
 +**Wichtig ist auch zu erwähnen das die neu hinzugefügten Platten zuerst bevorzugt auf den Füllstand der anderen Platten gebracht werden, erst dann werden wieder immer alle HDD's gleichzeitg verwendet.**
  
-====== Anlegen eines neuen Pools im RaidZ10 (entspricht Raid50) ======+ 
 +===== Anlegen eines neuen Pools im RaidZ10 (entspricht Raid50) =====
  
 Annahme ist hier ein Gerät mit 2 SDDs für das OS im Raid1 (läuft bereits). Nun bauen wir 10 Stück SATA Fesplatten mit einer Enterprise SSD für für Cache und Log dazu. Man das ganze nicht auf einmal erstellen, also zuerst die hälfte der Disks + Log und Cache, danach den Rest: Annahme ist hier ein Gerät mit 2 SDDs für das OS im Raid1 (läuft bereits). Nun bauen wir 10 Stück SATA Fesplatten mit einer Enterprise SSD für für Cache und Log dazu. Man das ganze nicht auf einmal erstellen, also zuerst die hälfte der Disks + Log und Cache, danach den Rest:
Zeile 157: Zeile 162:
  
  
-====== Korrupte Daten ======+===== Korrupte Daten =====
  
  
Zeile 175: Zeile 180:
  
  
-====== Festplatte ersetzen ======+===== Festplatte ersetzen =====
  
  
Zeile 185: Zeile 190:
  
  
-===== Festplatte im Rpool ersetzen =====+==== Festplatte im Rpool ersetzen ====
  
  
Zeile 257: Zeile 262:
  
  
-====== Die wichtigsten ZFS-Befehle auf einen Blick ======+===== Die wichtigsten ZFS-Befehle auf einen Blick =====
  
  
Zeile 277: Zeile 282:
 | mount /dev/zvol/v-machines/home/vm-<Nummer>-disk-<Nummer> /<mountpoint>| Hängt eine VMdisk vom Zpool "v-machines" am gewünschten Mountpoint ein. | | mount /dev/zvol/v-machines/home/vm-<Nummer>-disk-<Nummer> /<mountpoint>| Hängt eine VMdisk vom Zpool "v-machines" am gewünschten Mountpoint ein. |
 | zpool import -d /dev/disk/by-id/ -a| ersetzt SDX durch die ID der Festplatte | | zpool import -d /dev/disk/by-id/ -a| ersetzt SDX durch die ID der Festplatte |
 +| zpool import v-machines neuepoolname| importiert einen bestehenden Pool mit einem anderen Namen |
 | zfs list -t snapshot| zeigt alle Snapshots an | | zfs list -t snapshot| zeigt alle Snapshots an |
 | zpool set listsnapshots=on rpool| zeigt bei "zfs list" auch snapshots an | | zpool set listsnapshots=on rpool| zeigt bei "zfs list" auch snapshots an |
 | zfs list -r -t snapshot -o name,creation rpool| Snapshots mit Datum anzeigen | | zfs list -r -t snapshot -o name,creation rpool| Snapshots mit Datum anzeigen |
 | zfs get volsize v-machines/HDD-vmdata-KVM/vm-113-disk-1  NAME                                     PROPERTY  VALUE    SOURCE  v-machines/HDD-vmdata-KVM/vm-113-disk-1  volsize   36G      local| zeigt den maximal möglichen Speicher eines Volumes an | | zfs get volsize v-machines/HDD-vmdata-KVM/vm-113-disk-1  NAME                                     PROPERTY  VALUE    SOURCE  v-machines/HDD-vmdata-KVM/vm-113-disk-1  volsize   36G      local| zeigt den maximal möglichen Speicher eines Volumes an |
-| zfs set volsize=32g v-machines/HDD-vmdata-KVM/vm-113-disk-1| Verkleinert das Dataset auf 32GB | +| zfs set volsize=32g v-machines/HDD-vmdata-KVM/vm-113-disk-1| Verkleinert/Vergrößert das zvol auf 32GB \\ (Blockdevice)
-| zfs create -V 5gb tank/vol| legt ein neues Dataset mit einer maximalen Größe von 5G an |+| zfs create -V 5gb tank/vol| legt ein neues zvol mit einer maximalen Größe von 5G an \\ (Blockdevice) | 
 +| zfs set quota=50g tank/backupfolder | setzt die Quota eines normalen Datesets auf 50g | 
 +| zfs rename -p rpool/test rpool/server123 | Verschiebt eine Dataset | 
 +| zfs list -o space | Speicherauslastung inkl. wie viel für Snapshots verbraucht wird | 
 +| mount -t zfs -o ro v-machines/home@rep_home_2017-07-05_00:36:48 /mnt/zfsmountsnap | Snapshot mounten | 
 +| zfs set primarycache=metadata pool/dataset | Optimal für Backups, hier wird der Ramverbrauch erheblich reduziert | 
 +|apt install zfs-auto-snapshot | [[https://forum.proxmox.com/threads/zfs-automatic-snapshot-including-ram.43057/#post-207054|Infolink]] |
  
  
  
-====== ZFS Snapshots und deren Verwaltung ======+===== ZFS Snapshots und deren Verwaltung =====
  
 Snapshots eigenes sich hervorragend für die Datensicherung oder auch wenn man was testet oder auch nur Updates fährt. Man kann sofort wieder zurück. Um nun ein Snapshot von unserem Rootfilesystem zu erstellen geht von wie folgt vor: Snapshots eigenes sich hervorragend für die Datensicherung oder auch wenn man was testet oder auch nur Updates fährt. Man kann sofort wieder zurück. Um nun ein Snapshot von unserem Rootfilesystem zu erstellen geht von wie folgt vor:
Zeile 324: Zeile 336:
  
  
-===== Snapshots Remote abspeichern =====+==== Snapshots Remote abspeichern ====
  
 Um nun auch wirkliche Backups zu generieren muss man die Snapshots natürlich außerhalb des Servers ablegen. In unserem ersten Beispiel senden wir einen Snapshot auf eine Backupfestplatte in unserem Server.  Um nun auch wirkliche Backups zu generieren muss man die Snapshots natürlich außerhalb des Servers ablegen. In unserem ersten Beispiel senden wir einen Snapshot auf eine Backupfestplatte in unserem Server. 
Zeile 358: Zeile 370:
  
  
-===== Snapshots inkrementell abspeichern =====+==== Snapshots inkrementell abspeichern ====
  
 Die beste Methode für Backups ist wohl diese. Es werden hier immer nur die Änderungen gespeichert und man kann auch auf jede einzelne Datei zugreifen. In diesem Fall möchten wir wieder unser home-Dataset auf einer anderen Festplatte abspeichern. Zuerst müssen wir das Dataset auf der Zielfestplatte erstellen. Danach machen wir unser erstes Snapshot und überspielen das auf diese Platte. ACHTUNG: Feature wie Posixacls werden nicht mit aktiviert. Diese mit "zfs set ..." einfach vorher oder nachher nach Wunsch aktivieren.  Die beste Methode für Backups ist wohl diese. Es werden hier immer nur die Änderungen gespeichert und man kann auch auf jede einzelne Datei zugreifen. In diesem Fall möchten wir wieder unser home-Dataset auf einer anderen Festplatte abspeichern. Zuerst müssen wir das Dataset auf der Zielfestplatte erstellen. Danach machen wir unser erstes Snapshot und überspielen das auf diese Platte. ACHTUNG: Feature wie Posixacls werden nicht mit aktiviert. Diese mit "zfs set ..." einfach vorher oder nachher nach Wunsch aktivieren. 
Zeile 389: Zeile 401:
  
  
-==== Snapshot kann nicht gesendet werden ====+=== Snapshot kann nicht gesendet werden ===
  
 Sollte das Snapshot nicht gesendet werden können z.b. hier ein riesiges Homedataset: Sollte das Snapshot nicht gesendet werden können z.b. hier ein riesiges Homedataset:
Zeile 412: Zeile 424:
  
  
-===== Snapshot von einem anderen Ort zurückspielen =====+==== Snapshot von einem anderen Ort zurückspielen ====
  
 Um ein Snapshot zurückspielen zu können muss man zuerst vorhandene lokale Snapshots löschen: Um ein Snapshot zurückspielen zu können muss man zuerst vorhandene lokale Snapshots löschen:
Zeile 423: Zeile 435:
   pigz -d -c /backup/home@bla1.gz | zfs receive -F rpool/home   pigz -d -c /backup/home@bla1.gz | zfs receive -F rpool/home
  
 +==== Snapshot mounten und Daten rausholen ====
 +Sehr praktisch. Um ein Snapshot zu mounten kann den normalen Mountbefehl benutzen. Z.B. 
 +<code>
 +mount -t zfs v-machines/home@rep_home_2017-07-05_00:36:48 /mnt/zfsmountsnap
 +</code>
 +Um das ganze automatisch und elegant mit ZFS zu gestalten machten den Ordner ''.zfs'' in Datasets sichtbar. Z.B.
 +<code>
 +zfs set snapdir=visible  v-machines/home
 +</code>
 +Danach wird das gewünschte Snapshot automatisch beim Zugriff auf ''.zfs/snapshot/rep_home_2017-07-16_00:01:25'' gemountet. 
  
  
-===== Snapshot klonen =====+==== Snapshot klonen ====
  
 Es ist oft sehr praktisch ein Filesystem zu klonen um Dinge auszutesten. Es ist oft sehr praktisch ein Filesystem zu klonen um Dinge auszutesten.
Zeile 449: Zeile 471:
 </code> </code>
  
 +===== Mit komplettem ZFSpool umziehen =====
 +Mit einem kompletten Pool um zu ziehen ist super einfach, in Gegesatz zu nem Rsync oder ähnlichem. Zuerst macht man rekursiv ein Snapshot, danach kopiert man dem Pool auf die neuen/anderen Platten.
 +<code>
 +zfs snapshot -r oldpool@migration
 +zfs send -v -R -p oldpool@migration  | zfs receive -F myfreshpool
 +</code>
  
-====== Autoexpand ======+===== Autoexpand =====
  
 Ist "autoexpand" aktiviert vergrößert sich der Festplattenspeicher beim Tausch einer kleineren durch eine größere Platte automatisch. Beispiel: Man hat ein Raid1 mit 2x500GB Festplatten. Man tauscht die platten nacheinander aus (replace/resilvern). Ist die zweite Platte getauscht ist der Mehrspeicher sofort verfügbar.  Ist "autoexpand" aktiviert vergrößert sich der Festplattenspeicher beim Tausch einer kleineren durch eine größere Platte automatisch. Beispiel: Man hat ein Raid1 mit 2x500GB Festplatten. Man tauscht die platten nacheinander aus (replace/resilvern). Ist die zweite Platte getauscht ist der Mehrspeicher sofort verfügbar. 
Zeile 468: Zeile 496:
  
  
-===== Autoexpand auf einem Rootpool =====+=== Autoexpand auf einem Rootpool ===
  
 Das ganze ist ein wenig komplizierter da man die GPT Bootpartion beachten muss. Zuerst erstellt auf der neuen getauschten Disk eine GPT Partition: Das ganze ist ein wenig komplizierter da man die GPT Bootpartion beachten muss. Zuerst erstellt auf der neuen getauschten Disk eine GPT Partition:
      
-  sgdisk -Z /dev/sdf+  sgdisk -Z /dev/sdf # löscht nur gpt und mbr struktur 
 +  sgdisk -Z -o /dev/sdf # löscht auch Partitionen
   sgdisk -a1 -n1:34:2047 -t1:EF02 -n9:-8M:0 -t9:BF07 -n2:2048:0 -t2:BF01 -c 2:zfs /dev/sdf   sgdisk -a1 -n1:34:2047 -t1:EF02 -n9:-8M:0 -t9:BF07 -n2:2048:0 -t2:BF01 -c 2:zfs /dev/sdf
   zpool replace rpool 10714300945297318711 sdf2   zpool replace rpool 10714300945297318711 sdf2
Zeile 487: Zeile 516:
 9: reserved space (8MB) 9: reserved space (8MB)
  
 +===== Autoreplace =====
 +Autoreplace ersetzt automatische eine defekte Platte aus einem Zpool. Hierfür ist aber ein eingener [[http://www.informit.com/articles/article.aspx?p=1433052&seqNum=7|Hotsparepool]] erforderlich. 
  
-====== Proxmox spezifisches ======+ 
 +===== Proxmox spezifisches =====
  
 Unter Proxmox wird LVM defaultmäßing mitinstalliert, man im Installer wählen kann ob man ZFS oder EXT4 mit LVM haben möchte. Unter ZFS kann LVM einen Filter erstellen damit der HOST die LVMs von den Gästen nicht sieht. Ist sauberer. Unter Proxmox wird LVM defaultmäßing mitinstalliert, man im Installer wählen kann ob man ZFS oder EXT4 mit LVM haben möchte. Unter ZFS kann LVM einen Filter erstellen damit der HOST die LVMs von den Gästen nicht sieht. Ist sauberer.
Zeile 499: Zeile 531:
  
  
-===== Proxmox Rescue ZFS =====+==== Proxmox Rescue ZFS ====
  
  
Zeile 515: Zeile 547:
  
 Natürlich bevor wir das alles erledigen möge man sich vorher erkundigen ob noch etwaige Zusatzdatasets auf Root zeigen. Diese müssen vorher ausgehängt werden. Natürlich bevor wir das alles erledigen möge man sich vorher erkundigen ob noch etwaige Zusatzdatasets auf Root zeigen. Diese müssen vorher ausgehängt werden.
 +
 +===== Kompletten RPOOL mit Proxmox recovern =====
 +https://darkdevil.osit.cc/index.php/s/rWkEAEytAsmLc1r
 +
 +FIXME
  
  
-====== Links ======+===== Links =====
  
   *  [[https://pve.proxmox.com/wiki/Storage:_ZFS|ProxmoxWIKI ZFS]]   *  [[https://pve.proxmox.com/wiki/Storage:_ZFS|ProxmoxWIKI ZFS]]
Zeile 526: Zeile 563:
  
  
-====== Notiz ======+===== Notiz =====
  
      
   zpool replace  -o ashift=9 zfs_raid <virtual device> /dev/sdd1   zpool replace  -o ashift=9 zfs_raid <virtual device> /dev/sdd1
 +  zdb --help