{"id":9540,"date":"2026-01-31T15:36:20","date_gmt":"2026-01-31T15:36:20","guid":{"rendered":"https:\/\/www.kevinmaschke.com\/?p=9540"},"modified":"2026-01-31T15:36:22","modified_gmt":"2026-01-31T15:36:22","slug":"importing-windows-vhdx-proxmox-vm","status":"publish","type":"post","link":"https:\/\/www.kevinmaschke.com\/en\/importing-windows-vhdx-proxmox-vm\/","title":{"rendered":"Proxmox VHDX import. Convert a physical Windows PC to a VM by creating a VHDX image"},"content":{"rendered":"\n<p>I recently had to set up a Proxmox Hypervisor and <strong>convert a physical Windows 10 machine into a virtual machine<\/strong> running on this server. It\u2019s not a very complicated process, but since it was my first time doing this on Proxmox, there were a few steps I didn\u2019t know beforehand and I wanted to document the process.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Create the Windows VHDX Image<\/strong><\/h2>\n\n\n\n<p>This guide won\u2019t go over the whole process to create the VHDX file, but you can do this by downloading <a href=\"https:\/\/learn.microsoft.com\/en-us\/sysinternals\/downloads\/disk2vhd\" target=\"_blank\" rel=\"noopener\">Disk2VHD<\/a>, and running it on the machine you want to migrate. Keep in mind that the file will be quite large (depending on your disk size), so make sure you have enough space for it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Transfer the VHDX to Your Proxmox Host<\/strong><\/h2>\n\n\n\n<p>We have to move the VHDX file to the Proxmox server to we can import it. There are a few ways you can do this.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Option 1: Copy the VHDX via SFTP (WinSCP)<\/strong><\/h3>\n\n\n\n<p>You can download and install <a href=\"https:\/\/winscp.net\/\" target=\"_blank\" rel=\"noopener\">WinSCP<\/a> on the same Windows machine, and copy the VHDX file to Proxmox through SFTP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Option 2: Use a USB Drive to Move the VHDX<\/strong><\/h3>\n\n\n\n<p>You can copy the VHDX file to a USB drive, then connect it to the Proxmox server and mount to access the files.<\/p>\n\n\n\n<p>First, <strong>make sure that the USB is connected correctly<\/strong>. The following command will show a list of all block devices connected to your system. Search for a device that matches the size and\/or label of your USB drive. It might appear as <code>\/dev\/sdb<\/code>, <code>\/dev\/sdc<\/code>, or similar.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">lsblk\n<\/pre>\n\n\n\n<p><strong>Create the folder<\/strong> where you\u2019ll mount the USB drive. You can choose any location and name, but <code>\/mnt<\/code> is a common place for this.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir \/mnt\/usb\n<\/pre>\n\n\n\n<p><strong>Mount the USB drive<\/strong> to make it accessible within the file system. Mount it to the mount point you created.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mount \/dev\/sdb1 \/mnt\/usb\n<\/pre>\n\n\n\n<p>Replace <code>sdb1<\/code> with the device name you identified earlier. Make sure you specify the partition (e.g <code>sdb1<\/code>) and not the device (eg <code>sdb<\/code>). <strong>If the USB drive is formatted with NTFS<\/strong> you need to specify this, and it might require installing the <code>ntfs-3g<\/code> package:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apt update\napt install ntfs-3g\nmount -t ntfs-3g \/dev\/sdb1 \/mnt\/usb\n<\/pre>\n\n\n\n<p>Once mounted, you can <strong>check the contents of the mount point<\/strong> with <code>ls -l \/mnt\/usb<\/code> and the mounted filesystem and disk usage with <code>df -h \/mnt\/usb<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Create <strong>the New Proxmox Windows VM<\/strong><\/h2>\n\n\n\n<p>Create a new VM in Proxmox. There are a few settings we need to set.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On the <strong>OS<\/strong> tab:\n<ul class=\"wp-block-list\">\n<li>Don\u2019t use any installation media.<\/li>\n\n\n\n<li>For <strong>Type<\/strong>, select <strong>Microsoft Windows<\/strong>.<\/li>\n\n\n\n<li>For <strong>Version<\/strong>, select the version that matches the VHDX.<\/li>\n\n\n\n<li>Select <strong>Add additional drive for VirtIO Drivers<\/strong>.<\/li>\n\n\n\n<li>Select the ISO image for your VirtIO drivers.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>On the <strong>System<\/strong> tab:\n<ul class=\"wp-block-list\">\n<li>For <strong>Machine<\/strong>, select <strong>q35<\/strong>.<\/li>\n\n\n\n<li>For <strong>SCSI Controller<\/strong>, select <strong>VirtIO SCSI<\/strong>.<\/li>\n\n\n\n<li>Select <strong>QEMU Agent<\/strong>.<\/li>\n\n\n\n<li>For <strong>BIOS<\/strong>, select <strong>OVMF (UEFI)<\/strong>.<\/li>\n\n\n\n<li>Select <strong>Add EFI Disk<\/strong>.<\/li>\n\n\n\n<li>For <strong>EFI Storage<\/strong>, select your storage location.<\/li>\n\n\n\n<li>\u26a0\ufe0f If you are converting a Windows 10\/11 machine, select <strong>Add TPM<\/strong>, set the <strong>TPM Storage<\/strong> volume, and for <strong>Version<\/strong>, select <strong>v2.0<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>On the <strong>Disks<\/strong> tab, remove the default disks.<\/li>\n\n\n\n<li>Set the CPU and memory as you see fit.<\/li>\n\n\n\n<li>On the <strong>Network<\/strong> tab, for <strong>Model<\/strong>, select <strong>VirtIO<\/strong>.<\/li>\n\n\n\n<li>Finish creating the VM. \u26a0\ufe0f&nbsp;<strong>Uncheck<\/strong> \u201cStart after created\u201d.<\/li>\n\n\n\n<li>\u26a0\ufe0f Note the <strong>VM ID<\/strong> for later use.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Add the Converted Disk to the VM<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Import the VHDX into Proxmox Storage&nbsp;<\/strong><\/h3>\n\n\n\n<p>Open the shell on the Proxmox node and run the following command:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">qm importdisk [vm_id] [vhdx_file] [storage]\n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Replace <code>[vm_id]<\/code> with the ID of the VM you created.<\/li>\n\n\n\n<li>Replace <code>[vhdx_file]<\/code> with the path and filename for the VHDX file, either on the USB drive or the path you copied it to using SFTP.<\/li>\n\n\n\n<li>Replace <code>[storage]<\/code> with your storage name.<\/li>\n<\/ul>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">qm importdisk 200 \/mnt\/usb\/WIN10.vhdx local_lvm\n<\/pre>\n\n\n\n<p>This process might take a while, depending on the size of the disk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Attach the imported disk and boot from it<\/h3>\n\n\n\n<p>We will do a few changes to the VM&#8217;s settings. On the <strong>Hardware<\/strong> tab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Look for the imported disk, usually shown as <em>Unused Disk 0<\/em>, double click on it and set the <strong>Bus\/Device<\/strong> to <strong>SATA.<\/strong><\/li>\n\n\n\n<li>Add a new 1GB VirtIO Block disk. This is just temporary to force Windows to load the VirtIO drivers.<\/li>\n<\/ul>\n\n\n\n<p>On the Options tab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select <strong>Boot Order<\/strong> and set the SATA disk as the first device and make sure <strong>Enabled<\/strong> is checked.<\/li>\n<\/ul>\n\n\n\n<p>Start the Virtual Machine, and open the Console. Let Windows boot and once inside the VM, install the VirtIO disk drivers. Once installed, open <strong>Disk Management<\/strong> and verify the VirtIO disk appears correctly. You may also need to install VirtIO network drivers so the VM\u2019s network adapter works correctly.<\/p>\n\n\n\n<p>If everything is fine, shutdown the VM.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"787\" src=\"https:\/\/cdn.kevinmaschke.com\/wp-content\/uploads\/2026\/01\/27002940\/Win10-virtio-driver-wizard-1024x787.webp\" alt=\"Windows 10 VirtIO driver wizard\" class=\"wp-image-9534\" srcset=\"https:\/\/cdn.kevinmaschke.com\/wp-content\/uploads\/2026\/01\/27002940\/Win10-virtio-driver-wizard-1024x787.webp 1024w, https:\/\/cdn.kevinmaschke.com\/wp-content\/uploads\/2026\/01\/27002940\/Win10-virtio-driver-wizard-400x307.webp 400w, https:\/\/cdn.kevinmaschke.com\/wp-content\/uploads\/2026\/01\/27002940\/Win10-virtio-driver-wizard-100x77.webp 100w, https:\/\/cdn.kevinmaschke.com\/wp-content\/uploads\/2026\/01\/27002940\/Win10-virtio-driver-wizard-1125x865.webp 1125w, https:\/\/cdn.kevinmaschke.com\/wp-content\/uploads\/2026\/01\/27002940\/Win10-virtio-driver-wizard.webp 1284w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now we will edit the VM&#8217;s settings again. On the <strong>Hardware<\/strong> tab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Detach both the 1GB VirtIO disk and the main disk you imported. Select each disk, and click Detach &gt; Yes.<\/li>\n\n\n\n<li>Re-attach the main disk, but this time as a <strong>VirtIO Block disk<\/strong>.<\/li>\n\n\n\n<li>Remove the 1GB VirtIO disk.<\/li>\n<\/ul>\n\n\n\n<p>On the <strong>Options<\/strong> tab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Update the <strong>Boot Order<\/strong> to use the VirtIO disk.<\/li>\n<\/ul>\n\n\n\n<p>Start the Virtual Machine and open the Console. <strong>Windows should boot up fine and the VM should run natively in Proxmox<\/strong> and with better performance than with the default SATA configuration.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently had to set up a Proxmox Hypervisor and convert a physical Windows 10 machine into a virtual machine running on this server. It\u2019s not a very complicated process, but since it was my &#8230;<\/p>\n","protected":false},"author":1,"featured_media":9537,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[410,207,219,412,414],"tags":[2815,2817,2816],"class_list":["post-9540","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides","category-linux-en","category-technology","category-virtualization","category-windows-en","tag-proxmox","tag-virtualization","tag-windows"],"acf":{"book_cover":null,"special_featured_image":null},"_links":{"self":[{"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/posts\/9540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/comments?post=9540"}],"version-history":[{"count":4,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/posts\/9540\/revisions"}],"predecessor-version":[{"id":9567,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/posts\/9540\/revisions\/9567"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/media\/9537"}],"wp:attachment":[{"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/media?parent=9540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/categories?post=9540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kevinmaschke.com\/en\/wp-json\/wp\/v2\/tags?post=9540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}