→ Applies to: Hyperion 9.x and above
This article describes how to migrate an existing virtual machine from Microsoft Hyper-V to a Syneto Hyperion appliance. There are two methods: an automated import using the syneto-hyperv-import script, which can migrate the VM without powering it off, and a manual import based on exporting and converting the disks.
Import Via Script
The syneto-hyperv-import tool connects to the Hyper-V host, converts the VM’s disks and creates the VM on Hyperion automatically. The source VM can stay running during the import.
PREREQUISITES
- A local administrator account on the Hyper-V host (domain accounts are not supported).
- The Hyper-V host is reachable from Hyperion on WinRM (port 5985) and SMB (port 445).
- Hyperion has internet access to files.syneto.eu and pypi.org (needed to download and install the import tool).
- The source VM has no checkpoints. Delete them on the Hyper-V host before importing.
- The target storage pool has free space of about three times the used size of the VM’s disks.
Step 1. On the Hyper-V host, open PowerShell as administrator and allow SMB access
Enable-NetFirewallRule -DisplayGroup "File and Printer Sharing"
Set-NetFirewallRule -DisplayGroup "File and Printer Sharing" -Profile AnyNOTE
-Profile Anyis required when Hyperion is on a different subnet. Without it, port 445 stays blocked.
Step 2. Connect to Hyperion CLI ("How to Connect to SynetoOS 6 CLI")
Step 3. Download the import tool
wget --content-disposition -P /tmp "https://files.syneto.eu/s/yMXnaqFawsGKwkr/download?path=/&files=syneto-hyperv-import.tgz"wget --content-disposition -P /tmp "https://files.syneto.eu/s/yMXnaqFawsGKwkr/download?path=/&files=uv"
Step 4. Verify the downloaded files
sha256sum /tmp/syneto-hyperv-import.tgz /tmp/uvEXAMPLE OUTPUT
aa631c66806022226a462ad7219b1fd4f0e91a334630cf6bdfa85b49552199c4 /tmp/syneto-hyperv-import.tgz cd952ca51e2c730e848a45c4e0dfb58926d79d90550b6a5feb5543b43d3248b4 /tmp/uvIMPORTANT
If the values are different, do not continue. Download the files again or contact Syneto Support.
Step 5. Install uv (only if it is not already installed)
command -v uv || install -m 755 /tmp/uv /usr/local/bin/uv
Step 6. Install the import tool
tar xzf /tmp/syneto-hyperv-import.tgz -C /optUV_TOOL_BIN_DIR=/usr/local/bin uv tool install --from /opt/syneto-hyperv-import syneto-hyperv-importEXAMPLE OUTPUT
Resolved 14 packages in 720ms Built syneto-hyperv-import @ file:///opt/syneto-hyperv-import Prepared 14 packages in 1.56s Installed 14 packages in 26ms + certifi==2026.10.19 + cffi==2.0.0 + charset-normalizer==3.5.2 + cryptography==50.0.2 + idna==3.20 + pycparser==2.23 + pyspnego==0.12.4 + pywinrm==0.5.0 + requests==2.32.5 + requests-ntlm==1.3.0 + syneto-hyperv-import==0.1.0 (from file:///opt/syneto-hyperv-import) + typing-extensions==4.16.0 + urllib3==2.6.3 + xmltodict==1.0.4 Installed 1 executable: syneto-hyperv-importNOTE
This step downloads the tool’s dependencies from pypi.org. Package versions and timings may differ from the example. The last line must beInstalled 1 executable: syneto-hyperv-import.
Step 7. Check the installation
which syneto-hyperv-importEXAMPLE OUTPUT
/usr/local/bin/syneto-hyperv-import
Step 8. Remove the downloaded files
rm /tmp/syneto-hyperv-import.tgz /tmp/uvNOTE
Steps 3 to 8 are needed only once per Hyperion appliance. For further imports on the same appliance, start from Step 9.
Step 9. Run the preflight check (replace <hyperv-ip> with the IP of the Hyper-V host)
syneto-hyperv-import check <hyperv-ip>Enter the Hyper-V administrator password when prompted.
NOTE
If the administrator account is not called Administrator, add--user <username>to every command.
Step 10. List the VMs on the Hyper-V host (replace <hyperv-ip> with the IP of the Hyper-V host)
syneto-hyperv-import list <hyperv-ip>EXAMPLE OUTPUT
NAME STATE GEN CPU MEMORY GUEST_OS DISKS CHKPTS IMPORTABLE VM1 Running 2 2 4.0G Windows Server 2025 Stand… 2 0 yes — live, no downtime web-prod-01 Off 2 4 16.0G Windows? 1 2 no — 2 checkpoint(s)NOTE
Check that the VM shows yes in the IMPORTABLE column.
Step 11. Review the import plan (replace <hyperv-ip> with the IP of the Hyper-V host, <vm-name> with the name of the source VM and <pool-name> with the name of the storage pool)
syneto-hyperv-import <hyperv-ip> <vm-name> --pool <pool-name> --dry-runEXAMPLE
syneto-hyperv-import 192.168.60.20 m1-w2019 --pool hybrid --dry-runNOTE
The dry run shows the source, target, firmware, CPU, memory, disks and space needed, and changes nothing.
Step 12. Import the VM (replace <hyperv-ip>, <vm-name>, <pool-name> and <new-vm-name> with the correct information)
syneto-hyperv-import <hyperv-ip> <vm-name> --as <new-vm-name> --pool <pool-name>EXAMPLE
syneto-hyperv-import 192.168.60.20 m1-w2019 --as VM1-Hyper-V-Test --pool hybridConfirm the plan when prompted and wait for the import to complete.
NOTE
Optional parameters:
--memory <size>(for example8G) is required if the source VM uses dynamic memory.--final-state stoppedleaves the imported VM powered off.--consistency appimports only if an application-consistent copy is possible. Use it for databases.
Step 13. Check the consistency result
If the source VM was running, the tool ends with a banner saying whether the copy is application-consistent or crash-consistent.
IMPORTANT
A crash-consistent copy is equivalent to a power loss. Windows recovers normally, but databases and mail servers may lose in-flight transactions. For these, shut down the source VM and run the import again, or use the Manual Import procedure.
Step 14. Shut down the source VM on Hyper-V
IMPORTANT
The imported VM’s network is disconnected by default, because it has the same hostname and identity as the source. Connect it only after the source VM is shut down.
Step 15. Log in to the SynetoOS GUI (replace <your_ip_address_or_hostname> with the correct information)
https://<your_ip_address_or_hostname>
Step 16. Connect the VM’s network adapter and perform the necessary health checks
Manual Import
PREREQUISITES
- The source VM is powered off.
- Enough space is available on the target storage pool on Hyperion, and locally on the Hyper-V host, to temporarily hold the exported disks.
Step 1. Create a new VM (“How to Create a VM in SynetoOS 6”)
IMPORTANT
Do not power on the VM. Ensure the VM has the same compute configuration as the original, including:
- Same amount of RAM
- Same number of CPUs
- No attached storage disks
- Firmware: UEFI
- Secure Boot: Disabled
Step 2. Connect to Hyperion CLI ("How to Connect to SynetoOS 6 CLI")
Step 3. List the disks of the newly created VM (replace <new-vm-name> with the name of the new virtual machine)
virsh domblklist <new-vm-name>EXAMPLE OUTPUT
Target Source ----------------------------------------------- sda -
Step 4. Retrieve the volume UUID of the newly created VM (replace <pool-name> with the name of the storage pool and <new-vm-name> with the name of the new virtual machine)
find /<pool-name>/syn-volumes/ -name "*.xml" | xargs grep -l "<new-vm-name>" 2>/dev/null | awk -F'/' '{print $4}'EXAMPLE
find /hybrid/syn-volumes/ -name "*.xml" | xargs grep -l "VM1-Hyper-V-Test" 2>/dev/null | awk -F'/' '{print $4}' 4acf5b39-88cc-4e56-9fac-e9a88cc93837Note down the UUID as it will be needed in the Restore steps, in this case:
4acf5b39-88cc-4e56-9fac-e9a88cc93837
Step 5. Create the temporary staging folder in Hyperion (replace <pool-name> with the correct information)
mkdir -p /<pool-name>/migration-stagingEXAMPLE
mkdir -p /hybrid/migration-staging
Export and Transfer the VM from Hyper-V
Step 1. In the Hyper-V console, right-click on the source VM, then select Export

Step 2. Choose the local export location, then click on Export

Wait for completion.
Step 3. In File Explorer, navigate to the export location and open the VM folder

Step 4. Open the Virtual Hard Disks folder

Step 5. Save the full path of the export location and the disk names

If the VM has multiple disks, note down the name of each disk
Step 6. Open the CMD or PowerShell as administrator, then copy each disk to the Hyperion appliance (replace <path_to_disks> with the path from Step 5 in the Export and Transfer the VM from Hyper-V subsection, <disk_name> with the disk name from Step 5, <hyperion-ip> with the IP of Hyperion and <pool-name> with the correct information)
scp "<path_to_disks>\<disk_name>.vhdx" admin@<hyperion-ip>:/<pool-name>/migration-staging/EXAMPLE
scp "C:\Exports-VMs\m1-w2019\Virtual Hard Disks\m1-w2019.vhdx" admin@192.168.60.10:/hybrid/migration-staging/IMPORTANT
Run this command for each disk attached to the VM, and wait for every transfer to complete.
Hyperion admin credentials will be requested for each transfer.
Restore the VM Disk Images on Hyperion
Step 1. Connect to Hyperion CLI ("How to Connect to SynetoOS 6 CLI")
Step 2. Convert each copied disk (replace <disk_name> with the disk name from Step 5 in the Export and Transfer the VM from Hyper-V subsection, <pool-name> with the name of the storage pool, <vm-uuid> with the uuid from Step 4 in the Manual Import subsection and <new-vm-name> with the new vm name from Step 1 in the Manual Import subsection)
qemu-img convert -f vhdx -O raw -S 4k /<pool-name>/migration-staging/<disk_name>.vhdx /<pool-name>/syn-volumes/<vm-uuid>/<new-vm-name>_1.imgEXAMPLE
qemu-img convert -f vhdx -O raw -S 4k /hybrid/migration-staging/m1-w2019.vhdx /hybrid/syn-volumes/4acf5b39-88cc-4e56-9fac-e9a88cc93837/vm1-hyper-v-test_1.imgRepeat this command for each disk, incrementing the final number in order (_1.img, _2.img, etc.).
Step 3. Detach empty disk (replace <new-vm-name> with the new vm name from Step 1 in the Manual Import subsection)
virsh detach-disk <new-vm-name> sda --persistent
Step 4. Attach the converted disks to the new VM (replace <new-vm-name> with the new vm name from Step 1 in the Manual Import subsection, <pool-name> with the name of the storage pool and <vm-uuid> with the uuid from Step 4 in the Manual Import subsection)
virsh attach-disk <new-vm-name> /<pool-name>/syn-volumes/<vm-uuid>/<new-vm-name>_1.img sda --targetbus sata --persistentEXAMPLE
virsh attach-disk VM1-Hyper-V-Test /hybrid/syn-volumes/4acf5b39-88cc-4e56-9fac-e9a88cc93837/vm1-hyper-v-test_1.img sda --targetbus sata --persistentRepeat this command for each disk, incrementing the target identifier (sda, sdb, etc.).
Step 5. Verify the disk attachment (replace <new-vm-name> with the new vm name from Step 1 in the Manual Import subsection)
virsh domblklist <new-vm-name>EXAMPLE
virsh domblklist VM1-Hyper-V-Test Target Source ------------------------------------------------------------------------------------------ sda /hybrid/syn-volumes/4acf5b39-88cc-4e56-9fac-e9a88cc93837/vm1-hyper-v-test_1.img
Step 6. Log in to the SynetoOS GUI (replace <your_ip_address_or_hostname> with the correct information)
https://<your_ip_address_or_hostname>
Step 7. Power ON the VM and perform the necessary health checks
Remove Temporary Files After VM Health Checks
Step 1. Connect to Hyperion CLI ("How to Connect to SynetoOS 6 CLI")
Step 2. Delete the leftover temporary files (replace <pool-name> with the correct information)
rm -rf /<pool-name>/migration-stagingEXAMPLE
rm -rf /hybrid/migration-staging