MyTetra Share
Делитесь знаниями!
Как смонтировать динамический VDI-образ HDD диска VirtualBox в отдельную директорию
Время создания: 14.11.2022 13:54
Автор: xintrea
Текстовые метки: linux, virtualbox, виртуальный, монтирование, mount, vdi, образ, жесткий, диск, директория
Раздел: Компьютер - Linux - Виртуализация и эмуляция - VirtualBox
Запись: xintrea/mytetra_syncro/master/base/16684232947mza2uy76a/text.html на raw.github.com

В системе виртуализации VirtualBox существует формат виртуального диска VDI, который очень часто используется по умолчанию. Данный формат может содержать как диск фиксированного размера, так и динамически расширяемый.





Перед тем как монтировать образ диска, хорошо бы уметь определять формат диска с помощью консоли, тем более что VDI-файл не всегда находится под контролем VirtualBox, например когда файл образа принесли с другого компьютера и еще не настраивали виртуалку.


Чтобы узнать вариант формата VDI, можно воспользоваться командой:



# VBoxManage showhdinfo путь_к_файлу_образа_диска.vdi

UUID: 9bbd8dbe-d0c7-4db7-9717-85313fe8e721

Parent UUID: base

State: created

Type: normal (base)

Location: путь_к_файлу_образа_диска.vdi

Storage format: VDI

Format variant: dynamic default

Capacity: 16384 MBytes

Size on disk: 6330 MBytes

Encryption: disabled



Для файла фиксированного размера значение параметра Format variant будет fixed default. Для динамически расширяемого образа - dynamic default.


Внимание! Все ниже описанные действия можно производить только при выключенной виртуальной машине.



Монтирование образа фиксированного размера


Если образ содержит диск фиксированного размера, то его можно смонтировать просто командой mount, указав в опциях смещение в файле образа, начиная с которого идут данные диска.


Скрипт, который примонтирует фиксированный образ выглядит так:



#!/bin/bash


# Настройка файла образа и каталога монтирования

VDIfile=путь_к_файлу_образа_диска.vdi

mountingpoint=/media/vdi


# Поиск смещения

offData=$( VBoxManage internalcommands dumphdinfo "$VDIfile" |grep offData | sed 's:.*offData=\([0-9]*\).*:\1:' )

offset=$(( $offData + 32256 ))


# Монтирование

mount -t ext4 -o rw,noatime,noexec,loop,offset="$offset" "$VDIfile" "$mountingpoint"



Монтирование динамически расширяемого образа


Если же образ представляет собой динамически расширяемый файл VDI, то просто так примонтировать его не получится. Вопрос: как же "заглянуть" внутрь динамического диска? Хитрость в том, что монтирование такого динамического образа диска делается в два этапа.



1. Создается файл блочного устройства через утилиту qemu-nbd из состава пакета qemu. (Опытные пользователи знают, что VirtualBox - это всего лишь графическая надстройка над системой виртуализации qemu). Для этого используется следующая команда:



qemu-nbd -c /dev/nbd0 "путь_к_файлу_образа_диска.vdi"



Эта команда создаст файл устройства /dev/nbd0, который по своей сути, представляет такой же файл устройства диска, как и всем привычный /dev/sda и ему подобные. Опция -c обозначает connect. То есть эта команда как бы связывает файл образа диска с файлом блочного устройства.



2. Партиция (раздел) устройства /dev/nbd0 монтируется в обычный каталог на диске следующей командой (каталог обязательно должен существовать на момент монтирования):



mount -o noatime,noexec /dev/nbd0p1 /media/vdi



Здесь можно увидеть, что для доступа к разделу VDI-файла используется файл устройства /dev/nbd0p1, которое обеспечивает доступ к разделу (так же как это происходит и с /dev/sda0, /dev/sda1 и т. д.). Если на устройстве несколько разделов, то доступ к ним производится путем изменения номера p1 на необходимый (счет идет с единицы).


Внимание! Все действия внутри примонтированного каталога - добавление, изменение, удаление файлов и директорий, изменение прав доступа, изменение времени доступа и т. д. будут влиять на содержимое файла образа виртуальной машины.



Размонтирование и отключение динамически расширяемого образа


После того, как были произведены какие-то работы в каталоге, представляющем содержимое жесткого диска виртуальной машины, данный каталог надо размонтировать. Размонтирование образа диска виртуальной машины происходит так же как и обычное размонтирование:



umount /dev/nbd0p1



После размонтирования надо так же отключить блочное устройство:



qemu-nbd -d /dev/nbd0



Здесь опция -d обозначает disconnect.


После совершения всех вышеперечисленных действий можно включать виртуальную машину.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования