docs: initiale Anleitung für Custom Windows Image Migration inkl. Bilder und CLI-Befehlen
BIN
.DS_Store
vendored
Normal file
266
README.md
Normal file
|
|
@ -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
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2) Auf “Weiter” klicken
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
3) Name und Pfad angeben: Name der neuen VM eintragen und ggf. abweichenden Speicherort → Weiter
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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\!**
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
6) Netzwerk konfigurieren: Verbindung → Nicht verbunden
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
7) Virtuelle Festplatte verbinden: Name, Pfad und Größe definieren
|
||||||
|
|
||||||
|

|
||||||
|
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
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
9) Abschließen des Assistenten für neue virtuelle Computer: Fertig stellen
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
10) Hyper-V-Manager nach Erstellung der neuen VM
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
11) Die bereits heruntergeladenen virtio-Treiber via ISO anbinden:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
12) Mit neuer VM „Verbinden“
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
13) Neue VM zum ersten Mal starten und OS-Installation durchführen
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
14) Windows Server Setup durchführen (Screenshots basieren auf Windows Server 2022):
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
15)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
16)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
17)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
18) Die Auswahl “Load Driver” verwenden
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
19) Es ist nun die Installation von **drei** virtio Treibern notwendig, damit das Image auf den STACKIT Hypervisor verwenden werden kann
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**NetKVM Treiber**
|
||||||
|

|
||||||
|
|
||||||
|
****
|
||||||
|
|
||||||
|
**Viostor**
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Vioscsi**
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
20)
|
||||||
|

|
||||||
|
|
||||||
|
21)
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
22)
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
23) Anzeigekonfiguration
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
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 <nr>` | 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
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
29) Lizenzvereinbarung zustimmen
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
30) Setup-Typ bestätigen
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
31) Konfigurationsoptionen festlegen
|
||||||
|
|
||||||
|
****
|
||||||
|
|
||||||
|
|
||||||
|
32) Installation starten
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
33) Installation abschließen und Sysprep ausführen
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
34) Sysprep-Generalisierung läuft
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# 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 <Pfad_zu_vhdx> <Pfad_zur_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 <win2025virtio> --disk-format=qcow2 --local-file-path="<path2qcow2>" -p <projectID>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 39. Status-Check
|
||||||
|
Überprüfen Sie den Upload-Fortschritt und Details:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stackit image list -p <projectID>
|
||||||
|
stackit image describe <imageID> -p <projectID>
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Wichtig:** Entnehmen Sie dem Output die generierte `imageID`. Diese ID müssen Sie im nächsten Schritt als `<image_id>` 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 <AZ> \
|
||||||
|
--name <volumename> --source-id <image_id> \
|
||||||
|
--source-type image --size <GB> -p <projectID>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 2: Server instanziieren**
|
||||||
|
```bash
|
||||||
|
stackit server create -n <servername> \
|
||||||
|
--availability-zone <AZ> --machine-type <machineType> \
|
||||||
|
--network-id <networkID> --boot-volume-source-id <volumeID> \
|
||||||
|
--boot-volume-source-type volume -p <projectID>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 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": ["<ID1>", "<ID2>"]}' \
|
||||||
|
[https://iaas.api.eu01.stackit.cloud/v1/projects/](https://iaas.api.eu01.stackit.cloud/v1/projects/)<PROJECT_ID>/images/<IMAGE_ID>/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.
|
||||||
|

|
||||||
|
|
||||||
|
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)
|
||||||
BIN
images/.DS_Store
vendored
Normal file
BIN
images/image1.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/image10.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
images/image11.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
images/image12.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
images/image13.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/image14.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
images/image15.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
images/image16.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/image17.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
images/image18##.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
images/image18.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
images/image19.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
images/image2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
images/image20.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
images/image21.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
images/image22.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
images/image23.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
images/image24.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
images/image25.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
images/image26.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
images/image27.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/image28.png
Normal file
|
After Width: | Height: | Size: 717 KiB |
BIN
images/image29.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
images/image3.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/image30.png
Normal file
|
After Width: | Height: | Size: 642 KiB |
BIN
images/image31.png
Normal file
|
After Width: | Height: | Size: 282 KiB |
BIN
images/image32.png
Normal file
|
After Width: | Height: | Size: 462 KiB |
BIN
images/image33.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
images/image34.png
Normal file
|
After Width: | Height: | Size: 379 KiB |
BIN
images/image35.png
Normal file
|
After Width: | Height: | Size: 246 KiB |
BIN
images/image36.png
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
images/image37.png
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
images/image4.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
images/image41.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
images/image5.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
images/image6.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
images/image7.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
images/image8.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
images/image9.png
Normal file
|
After Width: | Height: | Size: 20 KiB |