[SOLVED] Auf Installation Disks das Filesystem ändern BTRFS nach ZFS

mabox

Member
Feb 26, 2024
33
1
8
Hallo Zusammen,
ich habe das Ganze schonmal ganz kurz in einem anderen Beitrag im Forum angesprochen bei @LnxBil (vielleicht meldet er sich ja auch nochmal :)) aber da es dort thematisch nicht reinpasst mach ich jetzt mal ein eigenes Thema dafür auf.

Es geht um folgendes, ich habe meine Proxmox Installaiton vor langer Zeit auf 2x SSD RAID1 und BTRFS durchgeführt. Mittlerweile habe ich für die weiteren Platten die mit der Zeit dazu kamen ZFS verwendete.
Ich hätte jetzt eigentlich auch ganz gerne meine Bootplatten auf ZFS laufen.
Um eine Neuinstallation komm ich da vermutlich nicht rum was denkt ihr? @LnxBil hatte angedeutet das mit einem gewißen Aufwand es wohl auch ohne Neuinstallation ginge. Könnte mir da jemand Starthilfe geben wie ich da vorgehen müsste?

VG
 
Um eine Neuinstallation komm ich da vermutlich nicht rum was denkt ihr? @LnxBil hatte angedeutet das mit einem gewißen Aufwand es wohl auch ohne Neuinstallation ginge. Könnte mir da jemand Starthilfe geben wie ich da vorgehen müsste?
Wenn du deine Gäste auf anderen Disks hast und ein PVE nicht all zu sehr individualisiert wurde, dann ist es vermutlich nicht den Aufwand wert, dass krampfhaft versuchen von btrfs nach ZFS zu bringen. Wüsste jetzt auch nicht genau, wie das am besten gehen würde, aber es wird sehr umständlich und anfällig für Nutzerfehler sein. Vermutlich einfacher da PVE mit ZFS neu zu installieren und einzurichten.

Du musst mal auf Github und Co gucken. Da gibt es ein paar Skripte um deine PVE Konfig zu sichern und später wieder zu importieren.
PVE hat da ja noch kein Feature für eingebaut. Einzige offizielle wäre die Anleitung wie man die config.db wiederverwendet: https://pve.proxmox.com/wiki/Proxmox_Cluster_File_System_(pmxcfs)#_recovery
 
  • Like
Reactions: mabox
OK vermutlich hast Du da Recht. Vor allem weil ich tatsächlich nicht viel individualisiert habe. Hab halt echt Bammel davor das nach einer Neuinstallation meine VMs nicht mehr funktionieren bzw. Ich nicht mehr zugreifen kann aber ja, das kann natürlich auch passieren wenn ich den Wechsel nicht hinbekomme.
Danke für die Hinweise, das ist auf jedenfall ein Weg den ich Mal nachgehen werde.
 
Ich nicht mehr zugreifen kann aber ja, das kann natürlich auch passieren wenn ich den Wechsel nicht hinbekomme.
Jup, genau. Backups solltest du eh haben. Und nicht nur die VMs/LXCs, sondern auch dein "/etc" Ordner mit den Konfigs sowie "/var/lib/vz" mit deinen ISOs und Co und ggf. noch die oben genannte config.db.
 
  • Like
Reactions: mabox
Und beim Reinstall nicht vergessen den identischen Hostname zu wählen, wenn du Konfigs so wenig wie möglich umbenennen willst.
 
  • Like
Reactions: mabox
Ok ich glaube ich muss mich schneller als gedacht um einen Neuinstallation kümmern.
Schau mal was ich jetzt plötzlich habe und zwar schlägt bei einer VM jetzt immer das Backup fehl, auch verschieben auf eine andere Platte lässt sich diese VM nicht mehr. Aktuel ist diese noch auf der OS Installationsplatte, eben dem BTRFS :) unter /var/lib/vz.
Das Log meldet folgendes:

Code:
Mar 31 21:58:51 pve pvedaemon[46138]: INFO: starting new backup job: vzdump 103 --mailnotification failure --node pve --mode snapshot --notes-template '{{guestname}}' --prune-backups 'keep-daily=30,keep-last=1,keep-monthly=12,keep-weekly=4,keep-yearly=3' --mailto mabox@mabox.org --compress zstd --storage pbs --all 0
Mar 31 21:58:51 pve pvedaemon[46138]: INFO: Starting Backup of VM 103 (qemu)
Mar 31 22:00:18 pve systemd[1]: Started snapper-timeline.service - Timeline of Snapper Snapshots.
Mar 31 22:00:18 pve dbus-daemon[1266]: [system] Activating via systemd: service name='org.opensuse.Snapper' unit='snapperd.service' requested by ':1.555' (uid=0 pid=46884 comm="/usr/lib/snapper/systemd-helper --timeline" label="unconfined")
Mar 31 22:00:18 pve systemd[1]: Starting snapperd.service - DBus interface for snapper...
Mar 31 22:00:18 pve dbus-daemon[1266]: [system] Successfully activated service 'org.opensuse.Snapper'
Mar 31 22:00:18 pve systemd[1]: Started snapperd.service - DBus interface for snapper.
Mar 31 22:00:18 pve systemd[1]: snapper-timeline.service: Deactivated successfully.
Mar 31 22:01:11 pve kernel: btrfs_print_data_csum_error: 90 callbacks suppressed
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528527872 csum 0xa241373e expected csum 0xd6ec2f02 mirror 1
Mar 31 22:01:11 pve kernel: btrfs_dev_stat_inc_and_print: 90 callbacks suppressed
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 623, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528531968 csum 0x1e8a56c0 expected csum 0x9f3ea748 mirror 1
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 624, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528536064 csum 0x5c70a006 expected csum 0x3d8beea4 mirror 1
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 625, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528540160 csum 0x36728994 expected csum 0x5bb3d6a9 mirror 1
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 626, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528544256 csum 0x1c7b4567 expected csum 0xbaca2577 mirror 1
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 627, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528527872 csum 0xa241373e expected csum 0xd6ec2f02 mirror 2
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sda3 errs: wr 0, rd 0, flush 0, corrupt 354, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528548352 csum 0x6cfa075a expected csum 0x1249c5d1 mirror 1
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 628, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528531968 csum 0x1e8a56c0 expected csum 0x9f3ea748 mirror 2
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sda3 errs: wr 0, rd 0, flush 0, corrupt 355, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528552448 csum 0x1f81a51a expected csum 0x67fa437e mirror 1
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sdb3 errs: wr 0, rd 0, flush 0, corrupt 629, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): csum failed root 5 ino 503129 off 27528540160 csum 0x36728994 expected csum 0x5bb3d6a9 mirror 2
Mar 31 22:01:11 pve kernel: BTRFS error (device sda3): bdev /dev/sda3 errs: wr 0, rd 0, flush 0, corrupt 356, gen 0
Mar 31 22:01:11 pve kernel: BTRFS warning (device sda3): direct IO failed ino 503129 op 0x0 offset 0x668d40000 len 1048576 err no 10
Mar 31 22:01:12 pve pvedaemon[46138]: ERROR: Backup of VM 103 failed - job failed with err -5 - Input/output error
Mar 31 22:01:12 pve pvedaemon[46138]: INFO: Backup job finished with errors
Mar 31 22:01:12 pve pvedaemon[46138]: job errors

Meine OS Installation befindet sich ja auf 2x SSD mit BTRFS RAID. Ich kann mir jetzt kaum vorstellen das beide SSDs jetzt plötzlich kaputt sein sollen oder sich beginnen zu verabschieden. Ich denke das BTRFS hat irgendein Problem bekommen was denkst Du? Versuche mit BTRFS scrub haben bisher nichts gebracht, es werden auch Uncorrectable Erros angezeigt... ...... Also bevor ich jetzt lange versuche das BTRFS zu reparieren ziehe ich die Neuinstallation wie oben besprochen durch dachte ich jetzt.
Dazu nochmal, könnte ich nicht einfach neu installieren, dann den kompletten /etc/ Ordner zurückkopieren und anchließend per zfs import die beiden ZFS Pools von meiner weiteren SSD und der HDD importieren? Das müsste doch die Vorgehensweiße sein oder?
1. Neuinstallation
2. /etc zurückkopieren
3. ZFS Pool SSD und HDD importieren.

Hab zwar von all meinen VM Backup usw. aber irgendwie grad noch voll Bammel vor der Aktion :p
 
dann den kompletten /etc/ Ordner zurückkopieren
Nein. Nur gewisse Dateien aus dem und teils auch nur einzelne Zeilen aus Dateien in andere übernehmen.

zfs import die beiden ZFS Pools von meiner weiteren SSD und der HDD importieren?
Ja, Pools kann man dann importieren und die dann uch benutzen, sofern man Storages korrekt in der storage.cfg anlegt.
 
  • Like
Reactions: mabox
Ok, da ich nicht viel individuell eingestellt hab könnte ich auch zur Not alles nochmal manuell einstellen......
Jedenfalls hoffe ich halt das dass mit dem ZFS import meines SSD und HDD Pools klappt. Wenn ich das alles vom Backup zurückspielen müsste wird es ewig dauern......
 
Hallo @Dunuin,
Ok ich hab jetzt sogar auf zwei ganz neuen SSDs Proxmox neu installiert mit ZFS RAID 1 und hab meine Config nicht zurückgespielt sondern einfach alles komplett neu manuell eingestellt, wie gesagt ist es auch einfach nicht viel was ich mache, ging eigentlich alles recht schnell.
Es hat soweit alles funktioniert, alle meine VMs laufen wieder, top!
Nun ist aber eines noch komische was ich nicht verstehe und tatsächlich hätte ich das noch gerne geändert bzgl. Import meiner vorhandenen ZFS Pools.....

Das nackte System, also gleich nach der Installation hatte jetzt als Storage "local" (Type: Directory) und "local-zfs" (Type: ZFS). Bis dahin hab ich noch nichts konfiguriert, ich weiß nicht ob das wichtig ist deshalb erwähne ich es mal.....

Hier was ich nicht verstehe und gerne ändern möchte:.

Ich hatte bisher zwei ZFS Pool wie folgt konfiguriert:
- Poolname: ssd, gemounted unter /ssd
- Poolname: local-zfs, gemounted unter /zfs

Mein Ziel war jetzt folgendes in der Neuinstallation:
- Poolname "ssd" wird zu "spool" und gemountet unter /spool
- Poolname "local-zfs" wird zu "hpool" und gemounted unter /hpool

Ok, also was funkktioniert hat ist das der "spool" tatsächlich jetzt unter /spool direkt gemounted ist (auf den Rename der Pools zu spool und hpool gehe ich jetzt nicht ein da ich dort kein Problem habe, das hat also geklappt).

Die gleiche Vorgehensweiße habe ich dann also mit dem Pool "hpool" gemacht.
Ich führe folgenden Befehl aus:
Code:
zpool import -R /hpool hpool
Dieser Pool mounted sich dann aber wie folgt:
Code:
df -h
Filesystem        Size  Used Avail Use% Mounted on
hpool              11T  4.9T  6.0T  46% /hpool/zfs
Also eine Ebene tiefer unter "zfs" und das verstehe ich nicht. "zfs" war in meinem alten System tatsächlich von mir angelegt in dem "alten" Pool local-zfs. Meine Struktur sa dort so aus das /zfs/vm mein Directory war wo die VMs lagen.
Ich hätte gerne das der hpool gleich aussieht wie der spool. Also eine Ebene höher der "hpool" gemounted ist.
Wie kann ich das genau machen? Ich versteh halt auch einfach nicht warum das jetzt so ist wie es ist. Weil ich importiere ja den Pool eigentlich nach /hpool und nicht nach /hpool/zfs.

Kannst Du oder jemand mir die Vorgehensweiße schildern?
 
Last edited:
Folgendes:

Code:
[root@pve ~]# zfs get mountpoint | grep hpool
hpool             mountpoint  /hpool//zfs  local

Vollständigkeitshalber mal alles:
Code:
[root@pve ~]# zfs get mountpoint
NAME              PROPERTY    VALUE        SOURCE
hpool             mountpoint  /hpool//zfs  local
rpool             mountpoint  /rpool       default
rpool/ROOT        mountpoint  /rpool/ROOT  default
rpool/ROOT/pve-1  mountpoint  /            local
rpool/data        mountpoint  /rpool/data  default
rpool/var-lib-vz  mountpoint  /var/lib/vz  local
spool             mountpoint  /spool       default
 
Last edited:
Du willst außerdem vermutlich nicht mit altroot arbeiten. Wenn dein pool "hpool" heißt, dann würde dieser standardmäßig nach "/hpool" gemounet werden, außer du hast das "mountpoint" Attribut gezielt anders definiert. Du hast beim Import aber das altroot mit dem "-R /hpool" bestimmt. Eigentlich sollte dein Pool-Wurzelverzeichnis dann nach "/hpool/hpool" gemountet werden und nicht nach "/hpool/zfs".
Definierst du altroot sollte er das wie folgt mounten: "/<altroot>/<poolname>"
 
  • Like
Reactions: mabox
Oh, ich verstehe jetzt fast nichts :oops: "altroot"??
Ist der -R dann falsch gewesen? Hab den von hier https://deepdoc.at/dokuwiki/doku.php?id=server_und_serverdienste:linux_zfs
War vermutlich mein altes Root der ZFS Ordner dann? Meinst Du es so? Dann würde quasi -R Sinn machen weil daher dann wahrscheinlich das "zfs" kommt. Dann exportiere ich jetzt also nochmal und importiere ohne -R? Oder wie wäre die korrekt Vorgehenweiße? Kann man auch einfach den Mountpoint ändern?
 
Last edited:
  • Like
Reactions: mabox
Ok, also das klappt nicht.
Ohne -R:
Code:
[root@pve ~]# zpool import /hpool hpool
cannot import '/hpool': no such pool available

Beim inherit Befehl komm ich auch nicht klar. Egal was ich als Mountpoint angebe bekomme ich nur die Hilfe vorgeschlagen.

EDIT: Ok habs.... hatte immer als "mountpoint" den tatsächlichen Mountpoint angegeben :)
Nachdem ich den "inherit" Befehl exakt so wie Du geschrieben hast eingegeben habe und den hpool nochmal exportiert und ohne -R imporiter habe, ist dieser nun unter /hpool eingehängt:
Code:
[root@pve ~]# zfs get mountpoint
NAME              PROPERTY    VALUE        SOURCE
hpool             mountpoint  /hpool       default
rpool             mountpoint  /rpool       default
rpool/ROOT        mountpoint  /rpool/ROOT  default
rpool/ROOT/pve-1  mountpoint  /            local
rpool/data        mountpoint  /rpool/data  default
rpool/var-lib-vz  mountpoint  /var/lib/vz  local
spool             mountpoint  /spool       default

Perfekt und vielen vielen Dank für die Hilfe.
 
Last edited:
  • Like
Reactions: Dunuin
Last edited:
  • Like
Reactions: mabox
Habs hinbekommen...... alles bestens jetzt Fall abgeschlossen hätte ich fast gesagt :)
Nach der Neuinsallation hab ich jetzt also auch einen rpool :)
Hättest Du mir abschlleßend evtl. noch ein paar Infos was es mit den Pfaden aufsich hat? Also warum braucht es, nachdem es doch eigentlich /var/lib/vz/ gibt auch noch einen /rpool/data? Ich lese mich da noch mehr ein aber vielleicht hast mir einfach noch ein bißchen Starthilfe was sich dahinter verbirgt an der Aufteilung/partitionierung vom rpool....
 
/var/lib/vz/
Das ist das Verzeichnis wodrauf dein Directory Storage "local" zeigt und ein Ordner vom Dataset rpool/ROOT/pve-1"
/rpool/data
Da ist das Dataset gemountet, wo PVE dir als Kinder-Elemente weitere Datasets und Zvols anlegt, wenn du deinen ZFS Storage "local-zfs" für VMs/LXCs benutzt. Also der Mountpoint vom Dataset "rpool/data"
 
Last edited:
  • Like
Reactions: mabox

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!