Proxmox - rpool von RAIDZ1 auf RAID10 umstellen

  • Nabend in die Runde,

    ich mache dann mal den Anfang in diesem Forenbereich.


    Ich habe einen Server hier zuhause laufen - darauf läuft ein Proxmox mit einem rpool im RAIDZ1 (ZFS pendant zu RAID5) aus drei 240GB Intel DC SSDs. Dazu gibt es noch ein Mirror (RAID1) mit zwei HDDs, das ist aber im wesentlichen nur ein Datengrab.


    Der rpool soll nun auf ein RAID10 umgestellt werden. Das RAID10 soll am Ende aus zwei der Intel SSDs und zwei Seagate Nytro SSDs selbiger Größe bestehen. Letztere beiden sind vorhanden und ggf. auch noch zwei Seagate Nytro mit 480GB, die ich als "Puffer" nutzen könnte.


    Die VMs würde ich vom rpool in den o.g. Mirror aus HDDs verschieben und abschalten, sodass ich afaik nur das OS migrieren muss. Backups lege ich dann selbstverständlich an.


    So wie ich es am sinnvollsten erachte/verstehe, hätte ich dann zwei Päärchen aus Intel und Seagate SSD, über die ich dann stripe.


    Die Frage ist - wie mache ich das am elegantesten? Ich habe ein bisschen von send und receive Magie gelesen, aber so 100% sicher bin ich mir in der Sache noch nicht.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

    Einmal editiert, zuletzt von whoami0501 ()

  • Wie viel hast Du denn am Host an PVE vorbei geändert? Wäre es eventuell eine Option für Dich, Proxmox einfach neu zu installieren und danach ein Backup der Konfiguration einzuspielen?

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Wie viel hast Du denn am Host an PVE vorbei geändert? Wäre es eventuell eine Option für Dich, Proxmox einfach neu zu installieren und danach ein Backup der Konfiguration einzuspielen?

    Das ist schon ein bisschen was - eigentlich wollte ich genau das vermeiden.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Das rüber kopieren mit zfs send|recv sehe ich nicht als großes Problem. Das kann man z.B. mit einer beliebigen Live-CD erledigen, die ZFS versteht und möglichst eine identische Version verwendet. (Debugmodus der PVE-ISO, Ubuntu-Live-ISO, …)


    Die größere Herausforderung ist, dass Die Partitionen auf den neuen SSDs korrekt erstellt werden und der Bootloader auf mindestens einer Disk weiterhin vorhanden ist. Dazu habe ich jetzt ad hoc auch keine vollständige Anleitung parat.


    Der Rest ist dann (unter einer Live-CD) wahrscheinlich grob gesagt:

    • Alten Pool unter einem anderen Namen importieren: zfs import rpool oldrpool
    • Dritte SSD aus dem RAID-Z1 offline nehmen: zpool offline oldrpool … (Wenn Du sonst nicht genügend SSDs zur Verfügung hast.)
    • Neuen Pool mit einer Intel und einer Seagate SSD als Stripe erstellen: zpool create rpool … (Richtige Partitionen angeben!)
    • Snapshot erstellen: zfs snapshot -r oldrpool/ROOT@migrate
    • Alles rüber kopieren: zfs send -Rwv oldrpool/ROOT@migrate | zfs recv -Fusd rpool/ROOT
    • Beide Pools aushängen und die Daumen drücken. Zum Booten eine SSD auswählen, auf der der Bootloader vorhanden ist!
    • Ab jetzt geht es in PVE weiter, hoffentlich gebootet vom neuen Pool: Zu jeder der beiden SSDs im Pool eine Mirror-Disk aus dem alten Pool hinzufügen.
    • Bootloader auf den neuen SSDs installieren. (Siehe verlinkter Wiki-Artikel.)

    Das würde ich vorher aber alles mehrfach in einer VM mit virtuellen Speichergeräten durchprobieren. ;)



    Edit: Wahrscheinlich würdest Du im offiziellen Proxmox-Forum bessere Antworten bekommen. Dort sitzen die Profis, wenn es um dieses Produkt geht. :)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    6 Mal editiert, zuletzt von KB19 ()

  • Danke für den Input. Ich hatte zwischenzeitlich folgende Anleitung gefunden, nach der das tatsächlich alles online zu gehen scheint.


    Theoretisch gibt es für mich dadurch folgende Schritte:

    • Alle VMs auf HDD umziehen, sodass rpool/data leer ist, den Autostart aller VMs deaktivieren
    • Beide Seagate Nytro SSDs anschließen, darauf dann das selbe Partitionslayout wie auf den Intel SSDs erstellen
    • Die zweite Partition der Seagate SSDs mit dem proxmox-boot-tool bootbar machen (format und init)
    • Auf der dritten Partition einen neuen Pool erstellen, den ich syspool nenne (damit es nicht zu Namenskollisionen kommt) -> striped, zpool create -o ashift=12 /dev/disk/by-id/XXX /dev/disk/by-id/YYY
    • Snapshot erstellen: zfs snapshot -r rpool/ROOT@migrate
    • Alles rüber kopieren: zfs send -Rwv --props rpool/ROOT@migrate | zfs recv -Fusd syspool/ROOT
    • Cache file aktualisieren: zpool set cachefile=/etc/zfs/zpool.cache syspool
    • Den Boot-Pool in /etc/kernel/cmdline anpassen
    • proxmox-boot-tool refresh ausführen, damit die Anpassung geschrieben wird
    • System rebooten, das System sollte nun den neuen Pool nutzen
    • zpool destroy rpool und so wie oben partitionieren, sowie mittels zpool attach aus dem RAID 0 ein RAID 10 machen
    • Wenn das RAID resilvered ist, die VMs zurück ziehen und den Autostart reaktivieren
    • Dritte Intel SSD ausbauen


    Grundsätzlich sollte ich das ganze vermutlich auf jeden Fall mal testen, ja, das ist richtig und wichtig. Aber in der Theorie sollte die Vorgehensweise doch klappen, oder?

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

    2 Mal editiert, zuletzt von whoami0501 ()

    Gefällt mir 1
  • Ich habe es geschafft, mit ein bisschen Testerei in einer VM vorher hat es dann problemlos geklappt und das RAID10 läuft wie ein Traum.


    Ich schreibe dann später noch etwas zum "Wie" :)

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

    Gefällt mir 1
  • Also: Vorher ein Backup machen und vorsichtig sein ist zu empfehlen. Nur weil das bei mir geklappt hat, muss es nicht woanders klappen.


    Ausgangssituation: Proxmox Server mit 3x 240GB Intel SSD im RAIDZ1 als rpool. Auf dem rpool liegen das OS und die VMs. Der Server nutzt eine legacy BIOS Installation mit Grub. Alles andere lassen wir außen vor, das ist insoweit unwichtig. Wichtig ist lediglich, dass noch zwei 240GB Seagate SSDs da sind und wie oben bereits erwähnt, diese zusammen mit zwei der Intel SSDs ein RAID10 bilden sollen (zwei Mirror und darüber stripen).


    Ganz theoretisch könnten die VMs durchgehend laufen, aber ich habe sie der Vorsicht halber vorher heruntergefahren und den Autostart deaktiviert.


    1. Die Seagate SSDs werden parallel zu den Intel SSDs ans System angeschlossen
    2. Disk IDs herausfinden: ls -al /dev/disk/by-id/ata-*
      Wir gehen jetzt von ata-Intel_aaa, ata-Intel_bbb, ata-Intel_ccc, ata-Seagate_ddd und ata-Seagate_eee aus.
    3. Das Partitionsschema von einer der RAIDZ1 SSDs anzeigen lassen: gdisk -l /dev/disk/by-id/ata-Intel_aaa
    4. Mit gdisk auf beiden(!) Seagate SSDs das selbe Partitionsschema anlegen. Ihr werdet Probleme bei den Sektorgrößen bekommen - die Lösung ist, die automatische Sektorgröße von gdisk vor dem Anlegen der Partitionen auf 1 zu setzen:
      1. x
      2. l
      3. 1
      4. m
    5. Die neuen SSDs werden jetzt mit dem Bootloader bestückt:
      1. proxmox-boot-tool format /dev/disk/by-id/ata-Seagate_ddd-part2
      2. proxmox-boot-tool format /dev/disk/by-id/ata-Seagate_eee-part2
      3. proxmox-boot-tool init /dev/disk/by-id/ata-Seagate_ddd-part2
      4. proxmox-boot-tool init /dev/disk/by-id/ata-Seagate_eee-part2
      5. proxmox-boot-tool status
    6. Der neue zpool wird nun als einfaches RAID0 namens syspool angelegt. Wie perryflynn bereits erwähnte - passt auf, dass der ashift Wert bei euch stimmt oder passt ihn ggf. an:
      1. zpool create -o ashift=12 -O compression=off -O xattr=sa -O acltype=posixacl syspool /dev/disk/by-id/ata-Seagate_ddd-part3 /dev/disk/by-id/ata-Seagate_eee-part3
      2. zpool status
    7. In folgenden Configs muss das Wörtchen rpool gegen syspool getauscht werden:
      1. /etc/kernel/cmdline
      2. /etc/default/grub.d/zfs.cfg
    8. Den neuen syspool dem Cachefile hinzufügen:
      1. zpool set cachefile=/etc/zfs/zpool.cache syspool
    9. Das automatische mounten des Root Filesystem vom alten rpool ausschalten (sonst hat man beim Reboot race conditions, doppelte Mounts und alles was keinen Spaß macht):
      1. zfs set canmount=noauto rpool/ROOT/pve-1
    10. Nochmal das initramfs und den Bootloader neu schreiben lassen:
      1. update-initramfs -u -k all
      2. proxmox-boot-tool refresh
    11. Snapshot des alten Root Filesystem machen und an den neuen syspool senden, danach kurz nochmal schauen ob alles sauber geklappt hat, Bootloader nochmal sicherheitshalber neu schreiben lassen und rebooten
      1. zfs snapshot -r rpool/ROOT@migrate
      2. zfs send -Rwv --props rpool/ROOT@migrate | zfs recv -Fusd syspool
      3. zfs list
      4. proxmox-boot-tool refresh
      5. proxmox-boot-tool status
      6. reboot
    12. Das System sollte jetzt einmal sauber durchbooten und auf dem neuen syspool laufen. Ab jetzt ist die Redundanz erstmal temporär weg.
    13. Sicherheitshalber wird der Mountpoint des alten Root FS woanders hingebogen, um bei einem versehentlichen Mount o.g. Probleme vorzubeugen.
      1. zfs set mountpoint=/oldroot rpool/ROOT/pve-1
    14. Nun müssen die VMs alle auf den neuen syspool migriert werden. Legt euch dafür ggf. wieder eure Datasets an und pflegt diese in der /etc/pve/storage.cfg ein. Die Migration erfolgt normal über die Weboberfläche (Disk-Aktion -> Speicher verschieben) oder die Konsole.
    15. Noch einmal prüfen, ob alle Datasets vom alten rpool runter sind und diesen, wenn alles gut ist, zerstören:
      1. zfs list
      2. zpool status
      3. zpool destroy rpool
      4. zpool status
    16. Nun wird das RAID0 zum RAID10 gemacht - den beiden Seagate SSDs geben wir einen Partner zum resilvern:
      1. zpool attach syspool ata-Seagate_ddd ata-Intel_aaa
      2. zpool status syspool
      3. zpool attach syspool ata-Seagate_eee ata-Intel_bbb
      4. zpool status syspool
      5. Der Resilverprozess läuft jetzt und dauert je nach SSD und Speicherbelegung etwas an. Wenn der Resilvervorgang abgeschlossen wurde, ist die Redundanz wieder da. Nun können auch die VMs ggf. wieder gestartet und der Autostart reaktiviert werden.
    17. Nun entfernen wir die dritte, nicht mehr benötigte Intel SSD aus dem System
      1. proxmox-boot-tool status
      2. gdisk /dev/disk/by-id/ata-Intel_ccc
        1. p
        2. o
        3. Y
        4. w
        5. Y
      3. proxmox-boot-tool clean --dry-run
      4. proxmox-boot-tool clean
      5. proxmox-boot-tool status
      6. proxmox-boot-tool refresh
      7. SSD ausbauen


    Uuuund geschafft. War ganz einfach. 8)

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

    3 Mal editiert, zuletzt von whoami0501 ()

    Gefällt mir 1