Skip to content

Instantly share code, notes, and snippets.

Last active July 7, 2024 11:34
Show Gist options
  • Save allenyllee/0a4c02952bf695470860b27369bbb60d to your computer and use it in GitHub Desktop.
Save allenyllee/0a4c02952bf695470860b27369bbb60d to your computer and use it in GitHub Desktop.
mount vhdx in linux
# install qemu utils
sudo apt install qemu-utils
# install nbd client
sudo apt install nbd-client
# [ubuntu] How do you mount a VHD image
# Load the nbd kernel module.
sudo rmmod nbd;sudo modprobe nbd max_part=16
# mount block device
sudo qemu-nbd -c /dev/nbd0 "$VHDX_IMG"
# reload partition table
sudo partprobe /dev/nbd0
# mount partition
sudo mount -o rw,nouser /dev/nbd0p1 "$MOUNT_POINT"
#unmount & remove nbd module
sudo umount "$MOUNT_POINT" && sudo qemu-nbd -d /dev/nbd0 && sudo rmmod nbd
Copy link

This has just saved me. Thank you!

Copy link

On Arch and Manjaro, you will need the following packages:

  • qemu-headless
  • nbd

To install them:

sudo pacman -S qemu-headless nbd

Copy link

ghost commented Apr 28, 2021

Thank you very much, worked perfectly on artix.
If you are mounting a win10 backup, be sure to select the good file and partiton (often nbd0p2), multiple vhdx are generated.

Copy link

stewSquared commented Oct 4, 2021

Thank you. This allowed me to mount WSL2 partitions from native linux after running into errors with libguestfs.

Copy link

Simmilar to @stewSquared I mounted a WSL2 partion aswell. The only thing I had to change was the last command of the mount script, because in my case there were no partitions just /dev/nbd0 so I my command was:
sudo mount -o rw,nouser /dev/nbd0 "$MOUNT_POINT" (notice the missing p1)

Copy link

Thank you very much! @allenyllee ! Is it also possible with VHDX configured with Bitlocker encryption?

Copy link

Anyway to resize the image please @allenyllee

Copy link

opty77 commented Jun 18, 2023

On 64-bit Slackware 15.0 I didn't have to specify max_part=16 (default). Using qemu-nbd -r both *.vhd and *.vhdx works without partprobe and I didn't even need nbd-client from the nbd package and I didn't have to reload the nbd kernel module after each try. BTW, I run modprobe -r nbd instead of rmmod nbd for the final cleanup.

Copy link

Ty! Awesome script 👌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment