Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
server_und_serverdienste:linux_zfs [2018/06/17 23:53] boospyserver_und_serverdienste:linux_zfs [2024/08/20 10:25] (aktuell) loma
Zeile 3: Zeile 3:
 ====== Linux ZFS ====== ====== Linux ZFS ======
  
 +Du möchtest dich gerne für unsere Hilfe erkenntlich zeigen 8-o. Gerne. Wir bedanken uns bei dir für deine Spende! LOL \\ 
 +[[https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KE592Y5993ZKW|{{:wiki:btn_donatecc_lg.gif|}}]] \\ 
 +\\ 
 +Hauseigenes Apt-Repo: [[https://apt.iteas.at]]    
 +\\ 
 +GITLAB Enterprise: [[https://git.osit.cc|{{:gitlab_logo.png?nolink&60|}}]]  
 +\\ 
 +\\
 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.
  
Zeile 41: Zeile 48:
  
 ===== Memorylimit setzen ===== ===== Memorylimit setzen =====
 +Genaue Info zu den aktuellen Werten bekommt man mit:
 +  arcstat
 +oder
 +  arc_summary
  
 Wenn man möchte kann man ZFS ein Memorylimit setzten. Wenn man möchte kann man ZFS ein Memorylimit setzten.
Zeile 46: Zeile 57:
   nano  /etc/modprobe.d/zfs.conf   nano  /etc/modprobe.d/zfs.conf
   options zfs zfs_arc_max=10737418240   options zfs zfs_arc_max=10737418240
 +  
 +oder 8GB
 +  8589934592
  
 Danach noch die initram updaten und rebooten. Danach noch die initram updaten und rebooten.
      
-  update-initramfs -u+  update-initramfs -u -k all
  
  
Zeile 108: Zeile 122:
  
 **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.** **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.**
 +
 +Als addon kann man noch eine spare disk hinzfügen, die man in Falle eines Ausfalls der produktiven Disks verwenden kann:
 +
 + zpool add <poolname> spare <device>
  
  
Zeile 160: Zeile 178:
   errors: No known data errors   errors: No known data errors
  
 +Nachdem dies ein Rpool ist, danach nicht vergessen Grub auf allen hinzugefügten Platten zu installieren. 
 +
 +===== Hinzufüge eines Special Device =====
 +
 +Ein "Special Device" kann die Geschwindigkeit eines Pools verbessern, der aus langsam drehenden Festplatten mit vielen Metadatenänderungen besteht. Beispielsweise profitieren Arbeitslasten, die das Erstellen, Aktualisieren oder Löschen einer großen Anzahl von Dateien beinhalten, vom Vorhandensein eines speziellen Geräts. ZFS-Datensätze können auch so konfiguriert werden, dass ganze kleine Dateien auf dem Spezialgerät gespeichert werden, was die Leistung weiter verbessern kann. Verwende schnelle SSDs für das Special Device.
 +
 +Die Redundanz des speziellen Geräts sollte mit der des Pools übereinstimmen, da das spezielle Gerät eine Ausfallstelle für den gesamten Pool darstellt.
 +
 +<WRAP center round tip 60%>
 +Das Hinzufügen eines speziellen Geräts zu einem Pool kann nicht rückgängig gemacht werden!
 +</WRAP>
 +
 +
 +Im folgenden Beispiel werden 2 Mirrors für das Special Devices verwendet. 
 +
 + zpool add <poolname> special mirror <device1> <device2> mirror <device3> <device4> 
  
  
Zeile 203: Zeile 237:
   sgdisk -G /dev/sdb   sgdisk -G /dev/sdb
  
-Nun den Resilverprozess anstoßen.+Nun den Resilverprozess der Partition anstoßen.
      
   zpool replace -f rpool sdb2 sdb2   zpool replace -f rpool sdb2 sdb2
Zeile 260: Zeile 294:
   Write failed: Broken pipe   Write failed: Broken pipe
  
 +Neuere Proxmoxsysteme haben ZFS immer beides. Grub und EFI. Verwendet man zum Booten Grub, verwendet man den ''grub-install''. Verwendet man EFI, bedient man sich systemd-boot: 
 +<code> 
 +pve-efiboot-tool format <new disk's ESP> 
 +pve-efiboot-tool init <new disk's ESP> 
 +</code>
  
 ===== Die wichtigsten ZFS-Befehle auf einen Blick ===== ===== Die wichtigsten ZFS-Befehle auf einen Blick =====
Zeile 269: Zeile 307:
 | zpool list| Zeigt alle Zpools in Kurzform an | | zpool list| Zeigt alle Zpools in Kurzform an |
 | zfs list| Zeigt alle ZFS-Pools und Datasets inkl. Einhängepunkte an | | zfs list| Zeigt alle ZFS-Pools und Datasets inkl. Einhängepunkte an |
-| zpool iostat -v| Zeigt alle Festplattenaktiviäten genau an |+| zpool iostat -v| Zeigt alle Festplattenaktiviäten genau an, inkl. Füllstände \\ der einzellnen Festplatten |
 | zfs set compression=lz4 <pool-name>| Aktiviert die Komprimierung des Dateisystem, empfohlen gut 7mal so schnell wie ohne. | | zfs set compression=lz4 <pool-name>| Aktiviert die Komprimierung des Dateisystem, empfohlen gut 7mal so schnell wie ohne. |
 | zpool upgrade <poolname>| Hebt den geannten Pool auf eine neue ZFSversion. | | zpool upgrade <poolname>| Hebt den geannten Pool auf eine neue ZFSversion. |
Zeile 283: Zeile 321:
 | 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 | | zpool import v-machines neuepoolname| importiert einen bestehenden Pool mit einem anderen Namen |
 +| zpool import -f -R /mnt rpool| importiert einen Rootpool auf einen anderen Mountpoint |
 | 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 | zeigt den maximal möglichen Speicher eines Volumes an |
 | zfs set volsize=32g v-machines/HDD-vmdata-KVM/vm-113-disk-1| Verkleinert/Vergrößert das zvol auf 32GB \\ (Blockdevice)| | 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 zvol mit einer maximalen Größe von 5G an \\ (Blockdevice) | | 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 set quota=50g tank/backupfolder | setzt die Quota eines normalen Datesets auf 50g |
 | zfs rename -p rpool/test rpool/server123 | Verschiebt eine Dataset | | zfs rename -p rpool/test rpool/server123 | Verschiebt eine Dataset |
 +| zfs set reservation=5G mypool | Reserviert 5G damit im Falle von Disk voll \\ noch Aktionen gesetzt werden können |
 | zfs list -o space | Speicherauslastung inkl. wie viel für Snapshots verbraucht wird | | 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 | | mount -t zfs -o ro v-machines/home@rep_home_2017-07-05_00:36:48 /mnt/zfsmountsnap | Snapshot mounten |
Zeile 496: Zeile 536:
  
  
-=== 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 # löscht nur gpt und mbr struktur +<code> 
-  sgdisk -Z -o /dev/sdf # löscht auch Partitionen +sgdisk -Z /dev/sdf # löscht nur gpt und mbr struktur 
-  sgdisk -a1 -n1:34:2047 -t1:EF02 -n9:-8M:0 -t9:BF07 -n2:2048:0 -t2:BF01 -c 2:zfs /dev/sdf +sgdisk -Z -o /dev/sdf # löscht auch Partitionen 
-  zpool replace rpool 10714300945297318711 sdf2 +sgdisk -a1 -n1:34:2047 -t1:EF02 -n9:-8M:0 -t9:BF07 -n2:2048:0 -t2:BF01 -c 2:zfs /dev/sdf 
-  grub-intall /dev/sdf+partx -s /dev/sdf (hier sieht man die Partionierung) 
 +zpool replace rpool 10714300945297318711 sdf2 
 +grub-install /dev/sdf 
 +</code>
  
 Das natürlich mit jeder Platte wiederholen. Das natürlich mit jeder Platte wiederholen.
Zeile 515: Zeile 558:
  
 9: reserved space (8MB) 9: reserved space (8MB)
 +
 +=== Partitionieren ab Proxmox-Boot-Tool ===
 +Bei neuen Systemen wird nicht mehr Grub sondern Proxmox Boottool verwendet. Dabei wird für EFI eine extra 512MB Partition benötigt. Der Befehl dazu sieht dann so aus: Die erste zwei Befehle können auch über die Webgui durch einen Mausklick ausgeführt werden (Initialisiere Disk mit GPT)
 +<code>
 +sgdisk -Z /dev/disk/by-id/ata-ST8000VN004-3CP101_XXXXXX # löscht nur gpt und mbr struktur
 +sgdisk -Z -o /dev/disk/by-id/ata-ST8000VN004-3CP101_XXXXXX # löscht auch Partitionen
 +sgdisk -a1 -n1:34:2047 -t1:EF02 -n2:2048:+512M -t2:EF00 -n3:0:0 -t3:BF01 -c 3:zfs /dev/sdX
 +partx -s /dev/disk/by-id/ata-ST8000VN004-3CP101_XXXXXX (hier sieht man die Partionierung)
 +zpool replace rpool 10714300945297318711 ata-ST8000VN004-3CP101_XXXXXX-part3
 +proxmox-boot-tool format /dev/disk/by-id/ata-ST8000VN004-3CP101_XXXXXX-part2
 +proxmox-boot-tool init /dev/disk/by-id/ata-ST8000VN004-3CP101_XXXXXX-part2
 +</code>
 +==== Autoexpand of an Raidz2 Pool ====
 +For example: 
 +<code>
 +zpool status                                                                                               
 +  pool: backup_pool_1
 + state: ONLINE
 +config:
 +
 +        NAME                                      STATE     READ WRITE CKSUM
 +        backup_pool_1                             ONLINE               0
 +          raidz2-0                                ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi1  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi2  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi3  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi4  ONLINE               0
 +</code>
 +
 +Switch drive offline:
 + zpool offline backup_pool_1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi4
 +
 +<code>
 +pool: backup_pool_1
 + state: DEGRADED
 +status: One or more devices has been taken offline by the administrator.
 +        Sufficient replicas exist for the pool to continue functioning in a
 +        degraded state.
 +action: Online the device using 'zpool online' or replace the device with
 +        'zpool replace'.
 +config:
 +
 +        NAME                                      STATE     READ WRITE CKSUM
 +        backup_pool_1                             DEGRADED             0
 +          raidz2-0                                DEGRADED             0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi1  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi2  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi3  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi4  OFFLINE      0         0
 +</code>
 +Remove your old drive (or not if you have enouth bay's) and replace it with your new bigger one ''zpool replace -f <pool> <old device> <new device>''
 + zpool replace backup_pool_1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 scsi-0QEMU_QEMU_HARDDISK_drive-scsi5
 +
 +<code>
 +pool: backup_pool_1
 + state: ONLINE
 +  scan: resilvered 768K in 00:00:00 with 0 errors on Mon Jul 15 14:57:10 2024
 +config:
 +
 +        NAME                                      STATE     READ WRITE CKSUM
 +        backup_pool_1                             ONLINE               0
 +          raidz2-0                                ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi1  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi2  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi3  ONLINE               0
 +            scsi-0QEMU_QEMU_HARDDISK_drive-scsi5  ONLINE               0
 +</code>
 +Then the next drive.
 +
 +==== Umwandeln eines Rpool Singledisk in einen Mirror inkl. Autoexpand ====
 +Annahme ist hier ein Rpool mit einer Samsung EVO750. Da die Disk nicht Enterprise ist und das Wearoutlevel schon bei 90% ist, fügen wir eine Samsung SM863a als Mirror hinzu. Dann können wir beim Ausfall der EVO bequem eine weitere SM863a hinzufügen. Der zeitiger Status ist:
 +<code>
 +zpool status 
 +  pool: rpool
 + state: ONLINE
 +  scan: scrub repaired 0B in 0h3m with 0 errors on Sun Oct 14 00:27:05 2018
 +config:
 +
 +        NAME        STATE     READ WRITE CKSUM
 +        rpool       ONLINE               0
 +          sda2      ONLINE               0
 +</code>
 +Rpool's könne hier nur mit den Alias "SDX" umgehen. Alle anderen "nicht Rootpools" mit ''/dev/disk/by-id'' 
 +Wir haben nun unsere neue SSD in's laufende System gehängt. Diese scheint mit ''sdb'' auf. Wir konfigurieren diese DISK mit GPT schauen das wie oben beschrieben auch Autoexpand am Pool aktiviert ist und partitionieren diese richtig:
 +<code>
 +sgdisk -a1 -n1:34:2047 -t1:EF02 -n9:-8M:0 -t9:BF07 -n2:2048:0 -t2:BF01 -c 2:zfs /dev/sdb
 +Setting name!
 +partNum is 1
 +REALLY setting name!
 +The operation has completed successfully.
 +</code>
 +Mit ''partx -s /dev/sdb'' sehen wir das die Disk nun richtig konfiguriert wurde:
 +<code>
 +partx -s /dev/sdb
 +NR     START       END   SECTORS   SIZE NAME UUID
 +        34      2047      2014  1007K      abdb3664-8f24-4f9c-b69f-48041a12dd2a
 +      2048 468845709 468843662 223,6G zfs  54a8aa0b-3e13-4e05-b8f6-3bcc1a5452d5
 + 9 468845710 468862094     16385     8M      8dfaf865-cv4f-4931-86ba-9a9a274d3ead
 +</code>
 +Nun können wir die neue Disk zu unserer alten dazu hängen:
 +<code>
 +zpool attach  -o ashift=12 -f  rpool  /dev/sda2 /dev/sdb2
 +Make sure to wait until resilver is done before rebooting.
 +</code>
 +Nach erfolgreichen resilvern, sieht unser Pool nun so aus:
 +<code>
 +zpool status         
 +  pool: rpool
 + state: ONLINE
 +  scan: resilvered 31,9G in 0h2m with 0 errors on Mon Nov  5 17:02:53 2018
 +config:
 +
 +        NAME        STATE     READ WRITE CKSUM
 +        rpool       ONLINE               0
 +          mirror-0  ONLINE               0
 +            sda2    ONLINE               0
 +            sdb2    ONLINE               0
 +
 +errors: No known data errors
 +</code>
 +Danach noch Grub installieren und fertig. 
 +<code>
 +grub-install /dev/sdb
 +</code>
 +Nachdem wir dann später mal die EVO getauscht haben, wird der Pool automatisch auf die 240GB vergrößert. 
 +
  
 ===== Autoreplace ===== ===== Autoreplace =====
Zeile 556: Zeile 725:
 Nutzt man ZFS als Dateisystem ist es klug die "sharenfs" Funktion von ZFS direkt statt dem System Export zu verwenden. Da hier die zeitliche Abfolge beim Systemstart immer optimal ist. Um eine Freigabe zu erstellen inkl. eines Datasets zu erstellen bedient man sich folgendem Befehl: Nutzt man ZFS als Dateisystem ist es klug die "sharenfs" Funktion von ZFS direkt statt dem System Export zu verwenden. Da hier die zeitliche Abfolge beim Systemstart immer optimal ist. Um eine Freigabe zu erstellen inkl. eines Datasets zu erstellen bedient man sich folgendem Befehl:
 <code> <code>
-zfs create testpool/testnfs4_eins -o sharenfs="rw=@hostname1.local,rw=@192.168.1.3,no_root_squash,no_subtree_check,async"+zfs create testpool/testnfs -o sharenfs="rw=@hostname1.local,rw=@192.168.1.3,no_root_squash,no_subtree_check,async"
 </code> </code>
 Für IPV6 können als Source nur mehr FQDN verwendet werden. Für IPV6 können als Source nur mehr FQDN verwendet werden.
Zeile 562: Zeile 731:
 Bei einem bestehenden Dataset: Bei einem bestehenden Dataset:
 <code> <code>
-zfs set sharenfs="rw=@hostname1.local,rw=@192.168.1.3,no_root_squash,no_subtree_check,async" testpool/testnfs4_eins+zfs set sharenfs="rw=@hostname1.local,rw=@192.168.1.3,no_root_squash,no_subtree_check,async" testpool/testnfs 
 +</code> 
 +Für eine einfache Freigabe: 
 +<code> 
 +zfs set sharenfs=on testpool/testnfs 
 +</code> 
 +Um eine Freigabe zu beenden: 
 +<code> 
 +zfs set sharenfs=off testpool/testnfs 
 +</code> 
 +Das Dataset löschen, löscht natürlich auch die Freigabe. 
 +Um zu sehen welche Freigaben nun aktiv sind gibt es mehrere Möglichkeiten. Am Host selbst: 
 +<code> 
 +cat /etc/dfs/sharetab 
 +</code> 
 +<code> 
 +zfs get sharenfs # kann auch mit weiteren Optionen kombiniert werden 
 +</code> 
 +Von einem anderen Host: 
 +<code> 
 +showmount  -e hostname.local
 </code> </code>
  
 +===== Swap =====
 +Swap direkt auf ZFS erstellen. Empfohlen, genug RAM, oder Swap auf einem nicht ZFS-Filesystem. 
 +<code>
 +zfs create -V 8G -b $(getconf PAGESIZE) -o compression=zle -o logbias=throughput -o sync=always -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false v-machines/swap
 +</code>
  
 ===== Links ===== ===== Links =====