server_und_serverdienste:linux_zfs
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
server_und_serverdienste:linux_zfs [2019/07/20 11:47] – [Memorylimit setzen] boospy | server_und_serverdienste:linux_zfs [2025/05/27 12:13] (aktuell) – loma | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | {{datei: | + | {{datei: |
- | ====== 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! 🙏 \\ | ||
+ | [[https:// | ||
+ | \\ | ||
+ | Zum frei verfügbaren [[: | ||
+ | \\ | ||
+ | GITLAB: [[https:// | ||
+ | \\ | ||
+ | \\ | ||
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 10: | Zeile 18: | ||
* Kernel: 3.10.0-10-pve / 4.2.3-2-pve / 4.10.17-4-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. |
Zeile 46: | Zeile 54: | ||
arc_summary | arc_summary | ||
- | Wenn man möchte kann man ZFS ein Memorylimit setzten. | + | Wenn man möchte, kann man ZFS ein Memorylimit setzten. |
| | ||
nano / | nano / | ||
Zeile 56: | Zeile 64: | ||
Danach noch die initram updaten und rebooten. | Danach noch die initram updaten und rebooten. | ||
| | ||
- | update-initramfs -u | + | update-initramfs -u -k all |
Zeile 71: | Zeile 79: | ||
zpool create -f -o ashift=12 v-machines mirror ata-WDC_WD2001FFSX-68JNUN0_WD-WMC5C0D0KRWP ata-WDC_WD20EARX-00ZUDB0_WD-WCC1H0343538 mirror ata-WDC_WD2001FFSX-68JNUN0_WD-WMC5C0D688XW ata-WDC_WD2001FFSX-68JNUN0_WD-WMC5C0D63WM0 | zpool create -f -o ashift=12 v-machines mirror ata-WDC_WD2001FFSX-68JNUN0_WD-WMC5C0D0KRWP ata-WDC_WD20EARX-00ZUDB0_WD-WCC1H0343538 mirror ata-WDC_WD2001FFSX-68JNUN0_WD-WMC5C0D688XW ata-WDC_WD2001FFSX-68JNUN0_WD-WMC5C0D63WM0 | ||
- | Wichtig ist immer die ID' | + | Wichtig ist immer die IDs zu benutzen. Würde man z.B. sda oder sdb nehmen, wird es vorkommen das sich die Reihenfolge beim Booten |
| | ||
ls / | ls / | ||
Zeile 84: | Zeile 92: | ||
lrwxrwxrwx 1 root root 10 May 23 11:50 wwn-0x50014ee003f548a4-part9 -> ../../sdb9 | lrwxrwxrwx 1 root root 10 May 23 11:50 wwn-0x50014ee003f548a4-part9 -> ../../sdb9 | ||
- | Wenn man eine Festplatte einsteckt, werden auch im Syslog alle wichtigen | + | Wenn man eine Festplatte einsteckt, werden auch im Syslog alle wichtigen |
| | ||
zpool add -o ashift=12 v-machines mirror ata-WDC_WD20EARX-00ZUDB0_WD-WCC1H0381420 ata-WDC_WD20EURS-63S48Y0_WD-WMAZA9381012 | zpool add -o ashift=12 v-machines mirror ata-WDC_WD20EARX-00ZUDB0_WD-WCC1H0381420 ata-WDC_WD20EURS-63S48Y0_WD-WMAZA9381012 | ||
Zeile 114: | Zeile 122: | ||
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. | 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 | + | **Wichtig ist auch zu erwähnen, dass 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 Add-on kann man noch eine spare disk hinzfügen, die man in Falle eines Ausfalls der produktiven Disks verwenden kann: | ||
+ | |||
+ | zpool add < | ||
Zeile 168: | Zeile 180: | ||
Nachdem dies ein Rpool ist, danach nicht vergessen Grub auf allen hinzugefügten Platten zu installieren. | Nachdem dies ein Rpool ist, danach nicht vergessen Grub auf allen hinzugefügten Platten zu installieren. | ||
+ | |||
+ | ===== Hinzufüge eines Special Device ===== | ||
+ | |||
+ | Ein " | ||
+ | |||
+ | Die Redundanz des speziellen Geräts sollte mit der des Pools übereinstimmen, | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | Das Hinzufügen eines speziellen Geräts zu einem Pool kann nicht rückgängig gemacht werden! | ||
+ | </ | ||
+ | |||
+ | |||
+ | Im folgenden Beispiel werden 2 Mirrors für das Special Devices verwendet. | ||
+ | |||
+ | zpool add < | ||
+ | |||
===== Korrupte Daten ===== | ===== Korrupte Daten ===== | ||
Zeile 190: | Zeile 218: | ||
- | Um eine defekte Fesplatte zu ersetzen geht man folgender Maßen | + | Um eine defekte Fesplatte zu ersetzen, geht man folgendermaßen |
| | ||
zpool replace < | zpool replace < | ||
Zeile 200: | Zeile 228: | ||
- | Im Rpool ist etwas mehr zu tun, da Linux nicht von ZFS booten kann. Wir gehen hier davon aus wir die Platte im gleichen Festplattenslot tauschen, was bei einen Rpool auf z.B. SSD nicht ungewöhnlich ist. Zuerst übernehmen wir mal den Partiontable einer anderen Platte im Pool. Hier ein RaidZ-1. | + | Im Rpool ist etwas mehr zu tun, da Linux nicht von ZFS booten kann. Wir gehen hier davon aus wir die Platte im gleichen Festplattenslot tauschen, was bei einem Rpool auf z.B. SSD nicht ungewöhnlich ist. Zuerst übernehmen wir mal den Partiontable einer anderen Platte im Pool. Hier ein RaidZ-1. |
SDB ist die neue Platte und war gleichzeitig auch die defekte. SDA ist eine andere Platte im Rpool. | SDB ist die neue Platte und war gleichzeitig auch die defekte. SDA ist eine andere Platte im Rpool. | ||
Zeile 210: | Zeile 238: | ||
sgdisk -G /dev/sdb | sgdisk -G /dev/sdb | ||
- | Nun den Resilverprozess anstoßen. | + | Nun den Resilverprozess |
| | ||
zpool replace -f rpool sdb2 sdb2 | zpool replace -f rpool sdb2 sdb2 | ||
Make sure to wait until resilver is done before rebooting. | Make sure to wait until resilver is done before rebooting. | ||
- | Da wir ja den gleichen Festplattenslot verwenden ersetzen wir die Platte mit sich selbst. Zum Besseren | + | Da wir ja den gleichen Festplattenslot verwenden ersetzen wir die Platte mit sich selbst. Zum besseren |
- | Es es wirklich die gleiche Platte, also nicht nur der gleiche Anschluss, genügt ein | + | das dies wirklich die gleiche Platte |
| | ||
zpool online rpool sdb2 | zpool online rpool sdb2 | ||
Zeile 267: | Zeile 295: | ||
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 '' | ||
+ | < | ||
+ | pve-efiboot-tool format <new disk's ESP> | ||
+ | pve-efiboot-tool init <new disk's ESP> | ||
+ | </ | ||
===== Die wichtigsten ZFS-Befehle auf einen Blick ===== | ===== Die wichtigsten ZFS-Befehle auf einen Blick ===== | ||
Zeile 276: | Zeile 308: | ||
| 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 < | | zfs set compression=lz4 < | ||
| zpool upgrade < | | zpool upgrade < | ||
Zeile 290: | Zeile 322: | ||
| zpool import -d / | | zpool import -d / | ||
| 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, | | zfs list -r -t snapshot -o name, | ||
- | | zfs get volsize v-machines/ | + | | zfs get volsize v-machines/ |
| zfs set volsize=32g v-machines/ | | zfs set volsize=32g v-machines/ | ||
| 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/ | | zfs set quota=50g tank/ | ||
| zfs rename -p rpool/test rpool/ | | zfs rename -p rpool/test rpool/ | ||
+ | | 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/ | | mount -t zfs -o ro v-machines/ | ||
Zeile 324: | Zeile 358: | ||
rpool/ | rpool/ | ||
- | Hier sieht man der Rpool aus den Datasets pve-1,swap und home besteht. Die Einträge mit dem " | + | Hier sieht man der Rpool aus den Datasets pve-1,swap und home besteht. Die Einträge mit dem " |
| | ||
zfs rollback rpool/ | zfs rollback rpool/ | ||
Zeile 333: | Zeile 367: | ||
Sind neuere Snapshots vorhanden muss man die vorher löschen. Man kann das aber auch gleich im obigen Befehle mit der Option " | Sind neuere Snapshots vorhanden muss man die vorher löschen. Man kann das aber auch gleich im obigen Befehle mit der Option " | ||
- | Natürlich kommt es Rootfilesystem auf die Änderungen an. Wenn man z.B. den Teil vernichtet der für die Snapshots zuständig ist, geht das dann natürlich nicht mehr. Deswegen sollte man ich immer den Rpool nur für das nackte System verwenden und eigene Pools mit eigenen Datasets generieren um solchen Dingen zu entgehen. Wann Snapshots erstellt wurden kann mit folgenden Befehl gut sehen: Hier mit dem Rpool. | + | Natürlich kommt es Rootfilesystem auf die Änderungen an. Wenn man z.B. den Teil vernichtet, der für die Snapshots zuständig ist, geht das dann natürlich nicht mehr. Deswegen sollte man ich immer den Rpool nur für das nackte System verwenden und eigene Pools mit eigenen Datasets generieren um solchen Dingen zu entgehen. Wann Snapshots erstellt wurden kann mit folgenden Befehl gut sehen: Hier mit dem Rpool. |
| | ||
zfs list -r -t snapshot -o name, | zfs list -r -t snapshot -o name, | ||
Zeile 345: | Zeile 379: | ||
==== 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. |
| | ||
zpool list backup | zpool list backup | ||
Zeile 393: | Zeile 427: | ||
zfs umount backup/home | zfs umount backup/home | ||
- | Möchte man nun das Backup | + | Möchte man nun das Backup |
| | ||
zfs send -v backup/ | zfs send -v backup/ | ||
Zeile 438: | Zeile 472: | ||
zfs destroy rpool/ | zfs destroy rpool/ | ||
- | Um nun das Snapshot von unserem zweiten Beispiel von /backup wieder | + | Um nun das Snapshot von unserem zweiten Beispiel von /backup wieder |
| | ||
pigz -d -c / | pigz -d -c / | ||
Zeile 489: | Zeile 523: | ||
Ist " | Ist " | ||
- | Um für alle Pools abzugragen ob die Funktion aktiv ist gibt man folgendes Befehl ein: | + | Um für alle Pools abzugragen, ob die Funktion aktiv ist gibt man folgendes Befehl ein: |
| | ||
zpool get autoexpand | zpool get autoexpand | ||
Zeile 505: | Zeile 539: | ||
==== 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 -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-install /dev/sdf | + | partx -s /dev/sdf (hier sieht man die Partionierung) |
+ | zpool replace rpool 10714300945297318711 sdf2 | ||
+ | grub-install /dev/sdf | ||
+ | </ | ||
Das natürlich mit jeder Platte wiederholen. | Das natürlich mit jeder Platte wiederholen. | ||
Zeile 522: | Zeile 559: | ||
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) | ||
+ | < | ||
+ | sgdisk -Z / | ||
+ | sgdisk -Z -o / | ||
+ | sgdisk -a1 -n1:34:2047 -t1:EF02 -n2: | ||
+ | partx -s / | ||
+ | zpool replace rpool 10714300945297318711 ata-ST8000VN004-3CP101_XXXXXX-part3 | ||
+ | proxmox-boot-tool format / | ||
+ | proxmox-boot-tool init / | ||
+ | </ | ||
+ | ==== Autoexpand of an Raidz2 Pool ==== | ||
+ | For example: | ||
+ | < | ||
+ | zpool status | ||
+ | pool: backup_pool_1 | ||
+ | | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | backup_pool_1 | ||
+ | raidz2-0 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi3 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 | ||
+ | </ | ||
+ | |||
+ | Switch drive offline: | ||
+ | zpool offline backup_pool_1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 | ||
+ | |||
+ | < | ||
+ | pool: backup_pool_1 | ||
+ | | ||
+ | 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' | ||
+ | 'zpool replace' | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | backup_pool_1 | ||
+ | raidz2-0 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi3 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 | ||
+ | </ | ||
+ | Remove your old drive (or not if you have enouth bay's) and replace it with your new bigger one '' | ||
+ | zpool replace backup_pool_1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 scsi-0QEMU_QEMU_HARDDISK_drive-scsi5 | ||
+ | |||
+ | < | ||
+ | pool: backup_pool_1 | ||
+ | | ||
+ | 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 | ||
+ | raidz2-0 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi3 | ||
+ | scsi-0QEMU_QEMU_HARDDISK_drive-scsi5 | ||
+ | </ | ||
+ | Then the next drive. | ||
==== Umwandeln eines Rpool Singledisk in einen Mirror inkl. Autoexpand ==== | ==== Umwandeln eines Rpool Singledisk in einen Mirror inkl. Autoexpand ==== | ||
Zeile 587: | Zeile 692: | ||
===== Proxmox spezifisches ===== | ===== Proxmox spezifisches ===== | ||
- | Unter Proxmox wird LVM defaultmäßing mitinstalliert, | + | Unter Proxmox wird LVM defaultmäßing mitinstalliert, |
| | ||
nano / | nano / | ||
Zeile 638: | Zeile 743: | ||
</ | </ | ||
Das Dataset löschen, löscht natürlich auch die Freigabe. | 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: | + | Um zu sehen, welche Freigaben nun aktiv sind, gibt es mehrere Möglichkeiten. Am Host selbst: |
< | < | ||
cat / | cat / |
server_und_serverdienste/linux_zfs.1563623264.txt.gz · Zuletzt geändert: von boospy