commit f112b401838898b0f6f7e60c3cf83a66784ffc55 Author: Gurwinder Singh Date: Mon Dec 29 15:12:44 2025 +0100 docs: initiale Anleitung für Custom Windows Image Migration inkl. Bilder und CLI-Befehlen diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..083a66a Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..d898644 --- /dev/null +++ b/README.md @@ -0,0 +1,266 @@ +## **Anleitung: BYOL-Migration zu STACKIT** + +Dieses Dokument bietet einen Migrationspfad für Ihre selbst erstellte Windows Server VM (Bring Your Own License) von einer lokalen Virtualisierungsumgebung (z.B. Hyper-V / VirtualBox) auf der STACKIT Cloud-Plattform. + +Der detaillierte Prozess erlaubt die technische Kompatibilität durch die Integration der VirtIO-Treiber und die Konvertierung der Festplatten-Images. Die Durchführung dieser Schritte ermöglicht Ihnen, Ihre eigenen Windows-Lizenzen in der STACKIT Cloud zu nutzen. + +### **Voraussetzungen** + +Um diesen Workflow erfolgreich durchzuführen, benötigen Sie Zugriff auf die folgenden Tools und Ressourcen: + +- STACKIT Windows VM (empfohlenes Sizing) + * Flavor G2i.8 + * Disk OS Perf6 \- 64GB + * Data/Image Disk Perf10: 100GB + +- Hyper-V (Als Virtualisierungsplattform über die Windows-Rolle/Funktion installieren): z.B. über Server Manager + +- Qemu-img installieren: [https://www.qemu.org/download/\#windows](https://www.qemu.org/download/#windows) + +- STACKIT cli installieren: [https://github.com/stackitcloud/stackit-cli/releases](https://github.com/stackitcloud/stackit-cli/releases) + +- Virtio Treiber: [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D) + +- Cloud-base Init: [https://github.com/cloudbase/cloudbase-init/releases](https://github.com/cloudbase/cloudbase-init/releases) + +1) Neue VM einrichten: Aktion → Neu → Virtueller Computer + +![Schritt 1](images/image1.png) + +2) Auf “Weiter” klicken + +![Schritt 2](images/image2.png) + +3) Name und Pfad angeben: Name der neuen VM eintragen und ggf. abweichenden Speicherort → Weiter + +![Bild 3](images/image3.png) + +4) Generation 2 auswählen + +**Generation 2: Beim Starten der VM muss manuell „Any Key“ gedrückt werden damit der Bootvorgang vom ISO-Image aus durchgeführt wird. Sollte man den Zeitpunkt verpassen, startet die Installationsroutine nicht\!** + +![Bild 4](images/image4.png) + +5) Speicher zuweisen: Arbeitsspeicher beim Start → Wert nach Bedarf eintragen (z. B. 4096 MB) + +Dynamischen Arbeitsspeicher für diesen virtuellen Computer verwenden → Kontrollkästchen deaktivieren + +![Bild 5](images/image5.png) + +6) Netzwerk konfigurieren: Verbindung → Nicht verbunden + +![Bild 6](images/image6.png) + +7) Virtuelle Festplatte verbinden: Name, Pfad und Größe definieren + +![Bild 7](images/image7.png) +Die konfigurierte Größe entspricht der Mindestgröße des Volumes des zukünftigen Servers in STACKIT + +8) Installationsoptionen: Betriebssystem von einer startbaren CD/DVD-ROM installieren → Abbilddatei (ISO) auswählen und via Durchsuchen das erforderliche ISO-Image auswählen + +![Bild 8](images/image8.png) + +9) Abschließen des Assistenten für neue virtuelle Computer: Fertig stellen + +![Bild 9](images/image9.png) + +10) Hyper-V-Manager nach Erstellung der neuen VM + +![Bild 10](images/image10.png) + +11) Die bereits heruntergeladenen virtio-Treiber via ISO anbinden: + +![Bild 11](images/image11.png) + +12) Mit neuer VM „Verbinden“ + +![Bild 12](images/image12.png) + +![Bild 13](images/image13.png) + +13) Neue VM zum ersten Mal starten und OS-Installation durchführen + +![Bild 14](images/image14.png) + +14) Windows Server Setup durchführen (Screenshots basieren auf Windows Server 2022): + +![Bild 15](images/image15.png) + +![Bild 16](images/image16.png) + +15) + +![Bild 17](images/image17.png) + +16) + +![Bild 18](images/image18.png) + +17) + +![Bild 19](images/image19.png) + +18) Die Auswahl “Load Driver” verwenden + +![Bild 20](images/image20.png) + +19) Es ist nun die Installation von **drei** virtio Treibern notwendig, damit das Image auf den STACKIT Hypervisor verwenden werden kann + +![Bild 21](images/image21.png) + +**NetKVM Treiber** +![Bild 22](images/image22.png) + +**![Bild 23](images/image23.png)** + +**Viostor** +![Bild 24](images/image24.png) + +![Bild 25](images/image41.png) + +**Vioscsi** +![Bild 24](images/image24.png) + +![Bild 24](images/image25.png) + +20) +![Bild 26](images/image26.png) + +21) +![Bild 27](images/image27.png) + + + +22) +![Bild 28](images/image28.png) + + + +23) Anzeigekonfiguration + +![Bild 29](images/image29.png) + + +24) Es sollten nun noch die zwei Virtio Packages (virtio-win-gt-x64.msi und virtio-win-guest-tools.exe) von der Virtio + +ISO Datei installiert werden. Es wird zudem empfohlen den Inhalt der Virtio ISO Datei auf das neue System zu +kopieren (z.B. C:\\temp\\virtio\\). Das hat den Vorteil, dass man später relativ einfach Treiber nachinstallieren kann + +25) Löschen der Windows Recovery Partition + +Dieser Schritt ist zwingend notwendig, damit das Volume des späteren Servers auf STACKIT flexibel erweitert werden kann. + +| Schritt | Befehl | Details / Hinweise | +| :--- | :--- | :--- | +| **1** | `diskpart` | Startet das Partitionierungsprogramm. | +| **2** | `select disk 0` | Wählt die Festplatte aus. **Prüfen Sie unbedingt**, ob Disk 0 korrekt ist! | +| **3** | `list partition` | Zeigt alle vorhandenen Partitionen an. | +| **4** | `select partition ` | Wählen Sie die Nummer der Recovery-Partition. Falls Partition 3 nicht korrekt ist, geben Sie die richtige Nummer ein. | +| **5** | `delete partition override` | Löscht die Partition erzwingend. | +| **6** | `list partition` | Kontrolle, ob die Partition erfolgreich entfernt wurde. | + + +26) Das Windows System kann nun mit individueller Software angepasst und für das spätere Image vorbereitet werden. + +27) Zum Abschluss noch das [**Cloudbase-init Tool**](https://cloudbase.it/cloudbase-init/) auf der Windows VM ausführen und Windows in die finale Ausgangsposition für den Move auf die STACKIT Cloud bringen\! + +28) Cloudbase-Init Setup starten + +![Bild 30](images/image30.png) + +29) Lizenzvereinbarung zustimmen + +![Bild 31](images/image31.png) + +30) Setup-Typ bestätigen + +![Bild 32](images/image32.png) + +31) Konfigurationsoptionen festlegen + + **![Bild 33](images/image33.png)** + + +32) Installation starten + + ![Bild 34](images/image34.png) + +33) Installation abschließen und Sysprep ausführen + + +![Bild 35](images/image35.png) + +34) Sysprep-Generalisierung läuft + +![Bild 36](images/image36.png) + +# 35. Image-Upload & VM Creation in STACKIT +Nachdem die lokale Vorbereitung abgeschlossen ist, wird das Image konvertiert und via STACKIT CLI übertragen. + +--- + +#### 36. Image-Konvertierung (qCow2) +Konvertieren Sie das lokale VHDX in das qcow2 Format: + +```bash +qemu-img convert -f vhdx -O qcow2 +``` + +#### 37. STACKIT CLI Login +Authentifizierung an der CLI: + +```bash +stackit auth login +``` + +#### 38. Image-Upload +Laden Sie das Image in Ihr STACKIT-Projekt hoch: + +```bash +stackit image create --name --disk-format=qcow2 --local-file-path="" -p +``` + +#### 39. Status-Check +Überprüfen Sie den Upload-Fortschritt und Details: + +```bash +stackit image list -p +stackit image describe -p +``` + +> **Wichtig:** Entnehmen Sie dem Output die generierte `imageID`. Diese ID müssen Sie im nächsten Schritt als `` angeben, um das Volume und die VM basierend auf diesem Image zu erstellen. + +#### 40. Provisionierung (Volume & Server) +Erstellen Sie zuerst das Volume und starten Sie dann die VM: + +**Step 1: Volume erstellen** +```bash +stackit volume create --availability-zone \ + --name --source-id \ + --source-type image --size -p +``` + +**Step 2: Server instanziieren** +```bash +stackit server create -n \ + --availability-zone --machine-type \ + --network-id --boot-volume-source-id \ + --boot-volume-source-type volume -p +``` + +#### 41. Image Sharing (Cross-Project) +Image für andere Projekt-IDs innerhalb der Organisation freigeben: + +```bash +stackit curl -X PATCH -H "Content-Type: application/json" \ + --data '{"projects": ["", ""]}' \ + [https://iaas.api.eu01.stackit.cloud/v1/projects/](https://iaas.api.eu01.stackit.cloud/v1/projects/)/images//share +``` + +#### 42. Abschluss +Überprüfen, ob alle Treiber im Betriebssystem korrekt geladen sind. +Nach dem Start der VM in STACKIT über den “Gerätemanager” prüfen, ob alle Treiber korrekt geladen wurden. +![Bild 39](images/image37.png) + +Referenzen: +[https://docs.stackit.cloud/stackit/en/create-a-windows-server-via-stackit-iaas-api-cli-98304598.html](https://docs.stackit.cloud/stackit/en/create-a-windows-server-via-stackit-iaas-api-cli-98304598.html) diff --git a/images/.DS_Store b/images/.DS_Store new file mode 100644 index 0000000..b7a8849 Binary files /dev/null and b/images/.DS_Store differ diff --git a/images/image1.png b/images/image1.png new file mode 100644 index 0000000..1aa5b84 Binary files /dev/null and b/images/image1.png differ diff --git a/images/image10.png b/images/image10.png new file mode 100644 index 0000000..0b90cea Binary files /dev/null and b/images/image10.png differ diff --git a/images/image11.png b/images/image11.png new file mode 100644 index 0000000..d84fcc2 Binary files /dev/null and b/images/image11.png differ diff --git a/images/image12.png b/images/image12.png new file mode 100644 index 0000000..0ad44c7 Binary files /dev/null and b/images/image12.png differ diff --git a/images/image13.png b/images/image13.png new file mode 100644 index 0000000..632ef40 Binary files /dev/null and b/images/image13.png differ diff --git a/images/image14.png b/images/image14.png new file mode 100644 index 0000000..0f5719f Binary files /dev/null and b/images/image14.png differ diff --git a/images/image15.png b/images/image15.png new file mode 100644 index 0000000..3ff202a Binary files /dev/null and b/images/image15.png differ diff --git a/images/image16.png b/images/image16.png new file mode 100644 index 0000000..463f278 Binary files /dev/null and b/images/image16.png differ diff --git a/images/image17.png b/images/image17.png new file mode 100644 index 0000000..097b8a0 Binary files /dev/null and b/images/image17.png differ diff --git a/images/image18##.png b/images/image18##.png new file mode 100644 index 0000000..b2782bb Binary files /dev/null and b/images/image18##.png differ diff --git a/images/image18.png b/images/image18.png new file mode 100644 index 0000000..0863066 Binary files /dev/null and b/images/image18.png differ diff --git a/images/image19.png b/images/image19.png new file mode 100644 index 0000000..cc8c3fd Binary files /dev/null and b/images/image19.png differ diff --git a/images/image2.png b/images/image2.png new file mode 100644 index 0000000..a385462 Binary files /dev/null and b/images/image2.png differ diff --git a/images/image20.png b/images/image20.png new file mode 100644 index 0000000..fd136f8 Binary files /dev/null and b/images/image20.png differ diff --git a/images/image21.png b/images/image21.png new file mode 100644 index 0000000..57855ff Binary files /dev/null and b/images/image21.png differ diff --git a/images/image22.png b/images/image22.png new file mode 100644 index 0000000..7ca756c Binary files /dev/null and b/images/image22.png differ diff --git a/images/image23.png b/images/image23.png new file mode 100644 index 0000000..2a5d4e8 Binary files /dev/null and b/images/image23.png differ diff --git a/images/image24.png b/images/image24.png new file mode 100644 index 0000000..35aa5dc Binary files /dev/null and b/images/image24.png differ diff --git a/images/image25.png b/images/image25.png new file mode 100644 index 0000000..8aa14ff Binary files /dev/null and b/images/image25.png differ diff --git a/images/image26.png b/images/image26.png new file mode 100644 index 0000000..a78dea8 Binary files /dev/null and b/images/image26.png differ diff --git a/images/image27.png b/images/image27.png new file mode 100644 index 0000000..62ae779 Binary files /dev/null and b/images/image27.png differ diff --git a/images/image28.png b/images/image28.png new file mode 100644 index 0000000..004e3ee Binary files /dev/null and b/images/image28.png differ diff --git a/images/image29.png b/images/image29.png new file mode 100644 index 0000000..2929bf6 Binary files /dev/null and b/images/image29.png differ diff --git a/images/image3.png b/images/image3.png new file mode 100644 index 0000000..7e8b0cd Binary files /dev/null and b/images/image3.png differ diff --git a/images/image30.png b/images/image30.png new file mode 100644 index 0000000..3da11cf Binary files /dev/null and b/images/image30.png differ diff --git a/images/image31.png b/images/image31.png new file mode 100644 index 0000000..50ab544 Binary files /dev/null and b/images/image31.png differ diff --git a/images/image32.png b/images/image32.png new file mode 100644 index 0000000..fc64f52 Binary files /dev/null and b/images/image32.png differ diff --git a/images/image33.png b/images/image33.png new file mode 100644 index 0000000..0b96d3c Binary files /dev/null and b/images/image33.png differ diff --git a/images/image34.png b/images/image34.png new file mode 100644 index 0000000..5dd8784 Binary files /dev/null and b/images/image34.png differ diff --git a/images/image35.png b/images/image35.png new file mode 100644 index 0000000..651a549 Binary files /dev/null and b/images/image35.png differ diff --git a/images/image36.png b/images/image36.png new file mode 100644 index 0000000..bcac5f3 Binary files /dev/null and b/images/image36.png differ diff --git a/images/image37.png b/images/image37.png new file mode 100644 index 0000000..75275dd Binary files /dev/null and b/images/image37.png differ diff --git a/images/image4.png b/images/image4.png new file mode 100644 index 0000000..2b984ef Binary files /dev/null and b/images/image4.png differ diff --git a/images/image41.png b/images/image41.png new file mode 100644 index 0000000..4b0299e Binary files /dev/null and b/images/image41.png differ diff --git a/images/image5.png b/images/image5.png new file mode 100644 index 0000000..af382d6 Binary files /dev/null and b/images/image5.png differ diff --git a/images/image6.png b/images/image6.png new file mode 100644 index 0000000..ec82e2b Binary files /dev/null and b/images/image6.png differ diff --git a/images/image7.png b/images/image7.png new file mode 100644 index 0000000..663d736 Binary files /dev/null and b/images/image7.png differ diff --git a/images/image8.png b/images/image8.png new file mode 100644 index 0000000..45a539e Binary files /dev/null and b/images/image8.png differ diff --git a/images/image9.png b/images/image9.png new file mode 100644 index 0000000..31b456c Binary files /dev/null and b/images/image9.png differ