{"id":1836,"date":"2026-09-15T10:19:53","date_gmt":"2026-09-15T10:19:53","guid":{"rendered":"https:\/\/www.blackrack.pl\/?p=1836"},"modified":"2026-09-15T12:49:14","modified_gmt":"2026-09-15T12:49:14","slug":"new-version-of-hv2pve-1-0-3","status":"publish","type":"post","link":"https:\/\/www.blackrack.eu\/en\/new-version-of-hv2pve-1-0-3\/","title":{"rendered":"New version of hv2pve &#8211; 1.0.3"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In older versions of <code>hv2pve<\/code>, migration required the virtual machine to be shut down on the Hyper-V side before the process could begin. The result? Every migration involved system downtime, which made the process difficult to use in production environments. The length of the downtime depended on the size of the virtual machine&#8217;s disks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The biggest new feature in the current version<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks to the AVHDX Migrate Chain technology (<code>hd2raw<\/code>) , it is now possible to migrate a virtual machine without shutting it down, significantly reducing service downtime. The entire process takes place online, while the final synchronization of the last snapshot and starting the system on the destination side takes from a few to several dozen seconds in our tests, depending on the current VM workload. The <code>hd2raw<\/code> tool enables direct synchronization of <code>AVHDX<\/code> files to the <code>raw<\/code> format and streams them directly to a disk in the Proxmox environment. This eliminates the need to merge the <code>AVHDX<\/code> chain beforehand on the Windows side, simplifying the entire migration process and reducing the overall operation time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What it looks like without our tool<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Without using our tool, the migration process from Hyper-V to Proxmox is performed entirely manually. The administrator must first export the <code>VHDX<\/code>\/<code>AVHDX<\/code> disks and merge the snapshot chain on the Hyper-V side. The disks then need to be converted to a format supported by Proxmox &#8211; most commonly <code>raw<\/code> or <code>qcow2<\/code>. The next step is to manually create a virtual machine in the Proxmox environment, attach the converted disks, and recreate the hardware configuration (CPU, RAM, network, controllers).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each of these steps is a separate operation that requires attention and time. As the number of virtual machines being migrated increases, so does the risk of configuration errors. More importantly, the downtime covers the entire time required to copy and convert the data, which in practice can mean several hours of downtime for larger disk volumes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How it works under the hood (in brief)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The migration process was designed to be predictable, repeatable, and safe &#8211; especially when using AVHDX Migrate Chain (AMC). Below is a simplified description of how it works, based on one key assumption: we work with exactly three snapshots.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The migration starts with an inventory on the Hyper-V side. The tool verifies whether the machine meets the migration requirements and whether its state matches the selected mode. In standard mode, the VM must be shut down, while in AMC (AVHDX Migrate Chain) mode it can remain running. The tool also checks whether sufficient storage space is available on Proxmox and whether a machine with the given ID has already been migrated. This helps prevent simple migration errors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the Proxmox VE side, a complete virtual machine definition is created, including the disks and their correct attachment to the configuration. The machine is then started and immediately paused, which makes it possible to minimize the subsequent downtime during the actual switchover. This preparation is crucial because the actual import is performed on an already prepared structure. At this stage, the <code>init<\/code> tag is also assigned, allowing the process to be safely resumed if it is interrupted (e.g. due to network errors).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In AVHDX Migrate Chain (AMC) mode, the actual migration takes place in three snapshot stages:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Snapshot 1<\/strong> &#8211; once it is created, migration of the base <code>VHDX<\/code>\/<code>VHD<\/code> file begins. The snapshot captures all changes made while the large base disk is being copied, allowing the machine to continue operating normally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Snapshot 2<\/strong> &#8211; created after the base transfer has completed. It contains the changes generated during the migration of the first layer. The first differencing file is then migrated and merged on both sides &#8211; on Hyper-V using the native mechanism and on Proxmox using <code>hd2raw<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Only after the second snapshot has been migrated and merged does the virtual machine shutdown process begin. At this point, the migrator executes the following PowerShell command on the Microsoft Hyper-V host:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Stop-VM -VMName {vmid}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is the point at which the process enters a short, controlled downtime phase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Snapshot 3<\/strong> &#8211; created immediately before the VM is shut down and containing the system&#8217;s final changes. Once the machine is powered off, the third differencing file is migrated, followed by a merge on both sides &#8211; Hyper-V and Proxmox. The machine is then started in the destination environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This approach means that most of the data is transferred while the VM is running, with downtime limited to migrating and merging the third snapshot and restarting the system. At the same time, data integrity on the Hyper-V side is preserved, allowing for a quick rollback to the source environment if necessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the end of the process, the machine is assigned the <code>imported<\/code> tag, clearly confirming that the migration completed successfully and preventing it from being selected again by the <code>hv2pve<\/code> migrator.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are the benefits of using AVHDX Migrate Chain?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The biggest benefit of using AVHDX Migrate Chain (AMC) is a dramatic reduction in perceived downtime and better control over migration time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, the difference is clear when migrating a 100 GB virtual machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Without AVHDX Migrate Chain<\/strong> &#8211; the entire process is performed in the traditional way, meaning that the VM must be shut down while the entire disk is copied and converted. As a result, the downtime spans practically the entire duration of the data transfer:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6af5ce166eb3d&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6af5ce166eb3d\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"464\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.blackrack.pl\/wp-content\/uploads\/2026\/03\/grafana02-1024x464.png\" alt=\"\" class=\"wp-image-1533\" srcset=\"https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana02-1024x464.png 1024w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana02-300x136.png 300w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana02-768x348.png 768w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana02-1536x697.png 1536w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana02-2048x929.png 2048w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana02-265x120.png 265w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Start: 2026-03-03 10:02:04 &#8211; End: 2026-03-03 10:23:06<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The migration takes from a few to several dozen minutes, and the downtime covers almost the entire period.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>With AVHDX Migrate Chain<\/strong> &#8211; most of the data (the base disk and the first two snapshots) is transferred while the machine is running. The VM is shut down only before the third, final snapshot is migrated. The synchronization of the final changes and starting the system in the Proxmox environment usually takes several dozen seconds, depending on the workload:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6af5ce166ef9e&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6af5ce166ef9e\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"464\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.blackrack.pl\/wp-content\/uploads\/2026\/03\/grafana01-1024x464.png\" alt=\"\" class=\"wp-image-1534\" srcset=\"https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana01-1024x464.png 1024w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana01-300x136.png 300w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana01-768x348.png 768w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana01-1536x697.png 1536w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana01-2048x929.png 2048w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/grafana01-265x120.png 265w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Start: 2026-03-03 09:24:08 &#8211; End: 2026-03-03 09:55:55<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Although the total operation time may be similar or even longer, the key difference is that downtime is limited exclusively to the final synchronization phase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Grafana charts clearly show the shorter service outage when using AVHDX Migrate Chain &#8211; the workload is spread over time, and end users experience only a short, controlled restart instead of a long service interruption.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How we tested it<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The testing process for the <code>hv2pve<\/code> migrator was designed to verify not only the correctness of the operation itself, but above all the integrity of the data after migration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We implemented an additional module in the tool responsible for generating checksum files together with the checksum (<code>sha1sum<\/code>) recorded in the registry. After the migration was completed, the calculated values were compared with the checksums of files already present in the destination location. This approach allowed us to unambiguously confirm that the data had been transferred completely and had not been corrupted during the transfer or the snapshot synchronization process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The entire testing process was fully automated using Jenkins. The pipelines ran various migration scenarios &#8211; both in standard mode and in AVHDX Migrate Chain (AMC) mode &#8211; allowing the tool to be tested repeatedly, consistently, and deterministically. This allowed us to verify both typical migration scenarios and edge cases in a controlled manner, ensuring that <code>hv2pve<\/code> and <code>hd2raw<\/code> operate correctly and safely.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6af5ce166f36f&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6af5ce166f36f\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"532\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.blackrack.pl\/wp-content\/uploads\/2026\/03\/jenkins-1024x532.png\" alt=\"\" class=\"wp-image-1535\" srcset=\"https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/jenkins-1024x532.png 1024w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/jenkins-300x156.png 300w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/jenkins-768x399.png 768w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/jenkins-1536x797.png 1536w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/jenkins-2048x1063.png 2048w, https:\/\/www.blackrack.eu\/wp-content\/uploads\/2026\/03\/jenkins-231x120.png 231w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What to do if the migration is interrupted<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">During the migration of a virtual machine to Proxmox VE, situations may occur in which the process does not complete successfully. These issues most commonly concern the state of the machine on the destination side and the snapshots created during the migration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the migration is interrupted after all disks have been initialized, the machine on the Proxmox side will receive the <code>init<\/code> status. This means that the VM structure was created correctly and all disks exist. In this situation, the migration can be safely retried.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, if the process ends before the disks are fully initialized, the migrator will not assign the <code>init<\/code> tag and the machine will be marked as <code>corrupted<\/code>. This status blocks another migration attempt. In practice, this means that the virtual machine and its disks must be manually removed from the Proxmox side, after which the migration needs to be started again from scratch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A separate case occurs when snapshots are created during migration and the process is interrupted after they have already been created. In such a scenario, the snapshots remain in the environment and prevent another migration attempt &#8211; the VM receives the <code>snapshot<\/code> status. At the moment, removing or &#8220;cleaning up&#8221; these snapshots remains the user&#8217;s responsibility. Migration can only be restarted after the snapshots have been manually removed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Next steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Development of the migrator is currently focused on improving its resilience to errors. The key goal is to reduce situations in which the administrator has to manually clean up the environment after an interrupted migration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We plan to improve exception handling and introduce mechanisms for automatically cleaning up snapshots on the Microsoft Hyper-V side &#8211; both during migration (if the state of the process allows it) and when restarting a migration. This will allow the source environment to remain in a consistent state even after an unsuccessful import attempt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the same time, we are working on the ability to resume an import after an error without having to manually remove the machine on the Proxmox VE side. This will be complemented by automatic cleanup of the VM and storage resources after a failed import.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The roadmap also includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>refactoring the project and separation of a dedicated Service Layer<\/li>\n\n\n\n<li>dynamic number of checkpoints during AMC migration<\/li>\n\n\n\n<li>automatic selection of the appropriate datastore for the VM in Proxmox<\/li>\n\n\n\n<li>migration of block devices and iSCSI<\/li>\n\n\n\n<li>migration from a Microsoft Hyper-V cluster to a PVE cluster with automatic virtual machine placement<\/li>\n\n\n\n<li>support for migrating multiple machines in parallel<\/li>\n\n\n\n<li>disk transfer via NFS and SSH<\/li>\n\n\n\n<li>generic EFI support<\/li>\n\n\n\n<li>web GUI for migration management (progress monitoring, configuration, and error handling)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Tutorial: How to migrate a VM<\/h2>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><a href=\"https:\/\/github.com\/blackrack\/hv2pve\" data-type=\"link\" data-id=\"https:\/\/github.com\/blackrack\/hv2pve\">hv2pve repository<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first step is to prepare the environment on the Hyper-V side and the source virtual machine. Run the appropriate script from the <code>prep_script<\/code> directory to prepare the VM for migration. If you plan to use AVHDX Migrate Chain (AMC), set the <code>HYPERV_CREATE_CHECKPOINT<\/code> variable during environment configuration (see the <code>env.json<\/code> file section for details).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, select the virtual machine import mode. By default, the program will report <code>skip<\/code> due to <code>CheckVMState<\/code> &#8211; the VM must be shut down. To use AVHDX Migrate Chain mode, you need to enable the <code>nbd<\/code> module on the Proxmox side and download the separate <code>hd2raw<\/code> binary, which enables synchronization of <code>AVHDX<\/code> files to the <code>raw<\/code> format.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a virtual environment (<code>venv<\/code>): <code>python3 -m venv .\/venv<\/code><\/li>\n\n\n\n<li>Activate the virtual environment: <code>source .\/venv\/bin\/activate<\/code><\/li>\n\n\n\n<li>Install the dependencies: <code>pip install -r req.txt<\/code><\/li>\n\n\n\n<li>Configure the Hyper-V\/Proxmox connection in <code>env.json<\/code>. To use AVHDX Migrate Chain mode, set <code>HYPERV_CREATE_CHECKPOINT<\/code> to <code>true<\/code>: <code>{ \"HYPERV_IP\": \"a.b.c.d\", \"HYPERV_USER\": \"administrator\", \"HYPERV_PASS\": \"changeme\", \"HYPERV_CREATE_CHECKPOINT\": true, ... }<\/code><\/li>\n\n\n\n<li>Run the initial verification: <code>make dryrun<\/code><\/li>\n\n\n\n<li>Start the migration: <code>make run<\/code><\/li>\n\n\n\n<li>Run the migration in debug mode (optional): <code>make debug<\/code><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>In older versions of hv2pve, migration required the virtual machine to be shut down on the Hyper-V side before the process could begin. The result? Every migration involved system downtime, which made the process difficult to use in production environments. The length of the downtime depended on the size of the virtual machine&#8217;s disks. The [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1536,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[108],"tags":[],"class_list":["post-1836","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-virtualization-and-proxmox-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/posts\/1836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/comments?post=1836"}],"version-history":[{"count":4,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/posts\/1836\/revisions"}],"predecessor-version":[{"id":1842,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/posts\/1836\/revisions\/1842"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/media\/1536"}],"wp:attachment":[{"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/media?parent=1836"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/categories?post=1836"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackrack.eu\/en\/wp-json\/wp\/v2\/tags?post=1836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}