Linux mount vhd image

Linux mount vhd image

For Debian and Ubuntu this is pretty easy

For Red Hat, Centos, Fedora

For Arch Linux (my distro of choice) you need to install 3 packages from the AUR

Once you have libguestfs as a normal user (not root / sudo) run guestmount

  • —add option is for the image you want to access
  • —ro sets to read only, alternatively you could use —rw for read / write
  • /mnt/vhd the path where you want to mount the drive
  • -m /dev/sda1 specify which partition within the .vhd file you want to mount.

My Rant

So I recently had to mount a backup of an old VM that was saved as a .vhd file and so I googled «How to mount a VHD on Linux» and the first result that came up was a Ubuntu forumns post where someone had asked the question and the top reply was someone else telling that person to go off and use a search engine. Followed by a link to Stack Overflow which didn’t actually answer the question.

Some support forums and Stack Overflow in particular can be quite toxic to new comers (and even toxic to experienced veterans) and it’s very infuriating when the top result on google is someone being told to just search google for the answer.

I know it can be annoying when simple questions come up over an over again but at the very least try to link to a useful article and if possible quote the relevant bit.

Anyway I hope my instructions saved someone the frustration that I went through.


Content on this site is licensed under a Creative Commons Attribution 4.0 International License.
Built using Pelican. Based on a theme by Giulio Fidente on github.

Источник

How to mount Virtual Hard disk (VHD) file in Ubuntu Linux?

Tutorial to mount a VHD image on Ubuntu or Debian using a tool Guestmount and then access the same via Command line or Graphical File manager.

Virtual Hard Disk- VHD is a common virtual drive format used on Windows systems. Generally, we use them to install Virtual Machine operating systems such as in VirtualBox or Hyper-V. However, we can also create and use VHDs just like a native drive partition on Windows 10 or 7 systems.

Furthermore, backup images also save in the.VHD format, thus to access them is really a need of the hours, in case you want some file resides in them. So, what would happen, if you need to extract some files from VHD on Linux; resides on the local or remote machine. And you don’t have a Windows system. Don’t worry we can mount them on Linux as well.

For carrying out the tutorial, we are using Ubuntu 20.04 LTS focal fossa, however, the steps given here are also applicable for Ubuntu 18.04/19.04/16.04; Linux Mint, Elementary OS, ZorinOS, Kali Linux, and other similar ones.

Here we are going to mount a VHD image on Ubuntu or Debian-based systems that have some information we need to extract; using a tool called guestmounts. Let’s see how to use it.

Step 1: The guestmounts tool comes in libguestfs package along with other tools, thus first we need to install the same. Here is the command to do that.

If you get any dependencies error then simply run:

After that again run the above installation command to get “guestmount” tool on your Ubuntu or Debian system.

Step 2: If the Virtual Hard disk.VHD is on your local system then we can mount it directly. However, on remote storage with SAMA/CISF shared protocol, we need to add its support to Ubuntu Linux first.

Step 3: Check the filesystem and available partitions on the Virtual Hard Disk image on Linux using “guestfish” command:

The guestfish is also a tool that comes along with the libguestfs-tools package.

Читайте также:  Virtualbox установка windows с диска

Note: replace the VHD-file-path with the actual path where your VHD image located. For example: Here we have h2s.vhd located on the Desktop of Ubuntu, thus the command is:

sudo guestfish – -ro -a h2s.vhd

Once you dropped in the GuestFish Shell, type:

This will give you the partition details of the VHD image and the file system in which it has been formatted. Note down that.

As you can see that in the following image, our Virtual Disk image is in NTFS format.

Step 4: Switch to the root user. It is because we tried but couldn’t use the “guestmount” without sudo access. Thus, once you mount the VHD using under sudo rights, the mounted file image will only be accessible by the user root or the one that has the same access.

Read more: If you haven’t set the root password yet then please do that, here is the enable ubuntu root password tutorial.

Step 5: Run the guestmount command to mount the remotely or locally available.VHD image files.

*Replace: /path-to-demo.vhd with your VHD file image name and location path.

/dev/sda1: It is a device or partition of the Virtual Hard disk file system which we found with the help of guestfish command above. Replace it with yours.

–ro – It means read-only.

/path-of-the-directory-to-mount-VHD-image: Path where you want to mount your VHD image file on the system

You can see the below image for an idea:

Step 6: Now, as we have mounted the VHD under sudo rights, thus only the root user can access the same. So, without exit the root shell environment, navigate to the directory where you have mounted the Virtual Hard disk file image. Afterward, you can easily access all this file inside that particular image.

Step 7: Those who want to access the VHD images using the Graphical File manager of Ubuntu. They need to first access it under administrative rights. So, run nautilus as root:

This will ask for the root password.

Now, the Ubuntu file manager will open under user root rights, navigate to the directory where VHD has been mounted by you. Click to open it.

Optional step:

In cases later, you want to unmount the VHD image from Ubuntu, then use the below command:

Replace: /mounted-directory-path with the path of the folder where you have actually mounted the image file.

Источник

Как смонтировать файл .vhd?

Я только что перешел на вкладку «Тандерберд», «Настройки», «Дополнительно» и снял флажок «Включить глобальный поиск и индексирование».

Если окно поиска не отображается автоматически, , щелкните правой кнопкой мыши на пустое место на панели инструментов и включите «Quickfilter».

6 ответов

Используя Ubuntu 15.10 (также работает на Ubuntu 16.04), вы можете установить vhdimount и tsk (The Sleuth Kit) с помощью:

Затем вы можете действовать следующим образом:

Затем вам нужно будет рассчитать смещение от выхода mmls следующим образом:

Заменить [ f6] по вашему смещению. Вам также может потребоваться изменить fs-тип в соответствии с fs-типом, включенным в ваш файл vhd.

Я создал сценарий, поэтому мне не нужно вводить его каждый раз;)

При поиске в пространстве Launchpad Ubuntu появляется следующее:

virtualbox (бинарный «виртуальный бокс-плавкий предохранитель» является частью пакета виртуальных боксов)

Это означает, что они слились в основной пакет, и вам просто нужно установить виртуальный бокс из репозитория (это то, что раньше называлось virtualbox-ose, поэтому, если вам нужна лицензионная «полная» версия PUEL, это не поможет вам.) [!d3 ]

Обратите внимание, что вам могут понадобиться дополнительные опции для mount, чтобы установить разрешения по своему усмотрению.

Вы можете использовать VirtualBox.

VirtualBox — это бесплатное решение для виртуализации x86, позволяющее работать в системе Linux в широком диапазоне операционных систем x86, таких как Windows, DOS, BSD или Linux.

Чтобы установить VirtualBox под Ubuntu 13.04, просто нажмите Ctrl + Alt + T на клавиатуре, чтобы открыть терминал. Когда он откроется, запустите следующие команды:

Как только он завершит установку, продолжите работу и создайте новую виртуальную машину

Тип во имя. Убедитесь, что вы выбрали правильный тип и версию ОС, находящейся в VHD.

Выберите использование существующего файла виртуального жесткого диска, и найдите свой файл VHD, а затем нажмите кнопку create.

Источник

allenyllee / install_tools.sh

#! /bin/bash
# install qemu utils
sudo apt install qemu-utils
# install nbd client
sudo apt install nbd-client
#! /bin/bash
VHDX_IMG= » $1 «
MOUNT_POINT= » $2 «
# [ubuntu] How do you mount a VHD image
# https://ubuntuforums.org/showthread.php?t=2299701
#
# 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 «
Читайте также:  Внешняя папка как внешний диск mac os
#! /bin/bash
MOUNT_POINT= » $1 «
# unmount & remove nbd module
sudo umount » $MOUNT_POINT » && sudo qemu-nbd -d /dev/nbd0 && sudo rmmod nbd

This comment has been minimized.

Copy link Quote reply

balazsbotond commented Dec 7, 2020

This has just saved me. Thank you!

This comment has been minimized.

Copy link Quote reply

balazsbotond commented Dec 10, 2020

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

To install them:

This comment has been minimized.

Copy link Quote reply

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

This comment has been minimized.

Copy link Quote reply

stewSquared commented Oct 4, 2021 •

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

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

Загрузка Linux с VHD на компьютере с BIOS

Загрузка Linux с VHD может пригодиться в различных сценариях, например, когда на компьютере установлена Windows и есть необходимость в Linux, но WSL или виртуальной машины с Linux недостаточно, а разбивать диск на разделы нет желания. Microsoft позволяет грузить Windows с VHD «из коробки» начиная со старших редакций Windows 7. Но что делать, если возникла необходимость загрузить таким способом Linux?

На форумах часто можно встретить мнение, что загрузить Linux с VHD либо нельзя, либо очень сложно. Полезной информации в интернете на эту тему действительно мало. Базовая идея, как это осуществить, описана тут. Суть в следующем:

Необходимо убедиться в поддержке NTFS на всех этапах.

Необходимо убедиться в поддержке loop-устройств.

Добавить в загрузочные скрипты ОС команду монтирования loop-устройства.

Убедиться, что все необходимые утилиты добавлены в образ, обновить initramfs внутри VHD.

В случае legacy-зарузки (BIOS) и использования штатного загрузчика Windows добавить grub4dos в меню bootmgr, а в меню grub4dos добавить пункт для загрузки с VHD.

Практическое применение этой идеи для Arch Linux описано тут. В этой статье я проведу аналогичный эксперимент с Debian. Предполагается, что читатель имеет представление о работе с консолью в Windows и в Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п. — элементарные вещи подробно не расписаны.

Процесс загрузки будет выглядеть так: bootmgr -> grub4dos -> initramfs -> debian. Рассмотрим подготовку каждого этапа справа налево.

Установка Linux на VHD

Для начала необходимо создать пустой образ VHD с фиксированным размером. Если нужно минимизировать размер образа, то для экспериментов с CLI достаточно создать диск объемом

1,5 Гб. Для рабочей системы с GUI можно ограничиться объемом 10 Гб (с условием хранения пользовательских данных вне VHD).

Создадим VHD с помощью diskpart.exe:

Далее необходимо установить Debian на VHD. Я для этого воспользовался VirtualBox 6.1, устанавливал debian-10.8.0-amd64-netinst.iso. Параметры виртуальной машины — по умолчанию, новый диск создавать не надо, достаточно подключить ранее созданный debian.vhd.

Установка Debian стандартна, обращу внимание только на некоторые моменты.

При разметке диска я создал один загрузочный раздел ext4. Раздел подкачки на VHD я делать не стал, после установки можно разместить файл или раздел подкачки в удобном месте.

При выборе дополнительного ПО для установки я оставил только SSH-сервер и стандартные системные утилиты. Всё остальное можно поставить потом, по необходимости. GRUB установлен в MBR. Если при установке была выбрана русская локаль, то после установки можно добавить локаль en_US командой dpkg-reconfigure locales .

Подготовка Linux к загрузке с VHD

В установленную систему необходимо добавить поддержку NTFS и утилиту partprobe, которая позволяет сообщить ядру ОС о необходимости повторного чтения таблицы разделов жёсткого диска.

Затем надо подготовить скрипты для initramfs.

initramfs — это начальная файловая система в оперативной памяти, которая содержит утилиты и скрипты, требуемые для монтирования файловых систем перед вызовом init, располагающегося в корневой файловой системе.

Скрипты для initramfs созданы на основе документации. Наши дополнения для initramfs мы будем размещать в следующих каталогах.

/etc/initramfs-tools/hooks/ — здесь размещаются скрипты, которые запускаются при генерации initramfs-образа. Тут мы разместим скрипт для добавления в initramfs утилиты partprobe с необходимыми библиотеками.

Читайте также:  Аппаратное резервирование оперативной памяти windows 10

/etc/initramfs-tools/scripts/local-top/ — после выполнения этих скриптов загрузчик считает, что root-устройство смонтировано. Т.е. здесь будет скрипт для монтирования VHD.

Скрипт для добавления partprobe в initramfs возьмем из этой статьи с добавлением еще одной библиотеки. Надо создать файл partcopy и сделать его исполняемым:

Скрипт для монтирования VHD сделан на основе скрипта для Arch Linux с учетом особенностей выбранного дистрибутива Linux. Скрипт необходимо сохранить под именем loop_boot_vhd и сделать исполняемым:

Немного подробнее поясню логику работы скрипта. Обработка prereqs рекомендована в документации. В переменную cmdline попадает строка инициализации из grub4dos, например, root=/dev/loop0p1 loop_file_path=/debian.vhd loop_dev_path=/dev/sda2 . Далее идет разбор этой строки и из нее определяется номер партиции на loop-устройстве, а в переменные loop_dev_path и loop_file_path сохраняются путь к устройству, на котором хранится VHD-файл, и путь к VHD-файлу на устройстве. Если данные для этих переменных не переданы, то скрипт прекращает работу и система пытается загрузиться в обычном режиме. Если переменные определены, то загружается модуль ядра для подержки loop-устройств с указанием в параметрах максимального количества loop-устройств и максимального количества таблиц разделов на loop-устройстве. Затем командой blkid определяется тип файловой системы диска, на котором хранится VHD-файл. Если VHD лежит на NTFS, то монтирование производится с помощью команды ntfs-3g , иначе — командой mount . Монтирование производится в каталог /host (который при необходимости предварительно создается). После этого VHD подключается в систему командой losetup , а затем partprobe сообщает ядру о новом диске.

После размещения скриптов в нужные каталоги ( /etc/initramfs-tools/scripts/local-top/loop_boot_vhd и /etc/initramfs-tools/hooks/partcopy ) необходимо пересобрать initramfs командой:

Для дальнейшей настройки надо запомнить номер версии ядра: /boot/initrd.img-4.19.0-14-amd64 и /boot/vmlinuz-4.19.0-14-amd64.

На этом образ готов к запуску на реальном железе, можно выключать виртуальную машину и приступать к подготовке загрузчика. Готовый образ debian.vhd надо скопировать в корень диска C:, дальнейшие скрипты написаны исходя из предположения, что VHD находится в корне NTFS-раздела.

Настройка grub4dos

Для начала надо скачать актуальную версию grub4dos. Работа с этой утилитой в различных источниках описана достаточно подробно. Настройка сводится к следующему:

необходимо найти раздел, в корне которого лежит VHD-файл, и сделать его корневым для всех команд в текущем пункте меню (команда find —set-root );

затем загрузить образ жесткого диска (команды map . vhd и map —hook );

далее подключенный образ указать как корневое устройство (команда root );

и указать параметры запуска Linux ( kernel и initrd ).

Получается файл menu.lst с таким содержимым:

Тут надо обратить внимание на один момент: в команде kernel инициализируются переменные, которые передаются в initramfs и используются в ранее созданном скрипте loop_boot_vhd .

В моем примере переменные заполнены исходя из моей конфигурации компьютера: один диск с Windows, разбитый на два раздела (загрузочный «System Reserved» и основной NTFS), а внутри VHD — один раздел ext4.

Настройка загрузчика bootmgr

Обратите внимание: в зависимости от версии Windows и особенностей установки ОС возможны незначительные отличия.

Первое, что надо сделать, — подключить скрытый раздел с bootmgr, в примере ниже я подключаю скрытый раздел «System Reserved» в каталог C:\mnt (каталог должен быть предварительно создан). Команды выполняются в diskpart.exe:

После этого надо распаковать в каталог C:\mnt\ файлы из архива с grub4dos: grldr и grldr.mbr . В этот же каталог надо скопировать файл menu.lst , созданный на предыдущем шаге. После этого раздел можно отключить в diskpart.exe:

Чтобы настроить отображение пункта меню при загрузке Windows, надо сделать следующее:

В ответ будет сообщен GUID нового пункта меню. Полученный GUID используется в следующих командах:

Тут подробно не останавливаюсь, все команды очевидны и хорошо описаны в документации. Ну, и чтобы не переключаться лишний раз между графическим и текстовым режимами:

На этом всё: можно перезагрузить компьютер, выбрать в меню загрузки grub4dos, затем Debian, после чего должен загрузиться Linux.

Что делать, если не грузится?

В этом случае, скорее всего, неверно указаны параметры с путями к устройству, на котором находится VHD-файл, или раздел на loop-устройстве. Если загрузка останавливается на уровне grub4dos, то в консоли надо последовательно вводить команды, перечисленные в menu.lst , и смотреть на результаты, в зависимости от которых правильно указать параметры для загрузки Linux. Если загрузка останавливается в initramfs, то надо проверить доступность необходимых устройств на этом этапе. Проверить можно, последовательно вводя команды из скрипта loop_boot_vhd (основное: смонтировать нужные разделы, найти VHD, подключить его, проверить присвоенный номер партиции с Linux, в моем примере — loop0p1).

А как же UEFI?

Это немного другая история, надеюсь, позже найду время и проведу аналогичный эксперимент с UEFI.

Источник

Оцените статью