libguestfs для работы с дисками виртуальных машин
Для работы с образами виртуальных машин необходим пакет libguestfs.
libguestfs — это набор инструментов для доступа и изменения образов дисков виртуальных машин (ВМ). Вы можете использовать его для просмотра и редактирования файлов внутри гостей, создания сценариев для изменений виртуальных машин, мониторинга статистики использования/свободного диска, создания гостей, P2V, V2V, выполнения резервного копирования, клонирования виртуальных машин, создания виртуальных машин, форматирования дисков, изменения размера дисков и многого другого.
libguestfs может получить доступ практически к любому образу диска, который только можно вообразить. Он может делать это безопасно — без необходимости root и с несколькими уровнями защиты от вредоносных образов дисков. Он может получить доступ к образам дисков на удалённых машинах или на компакт-дисках/USB-накопителях. Он может получить доступ к проприетарным системам, таким как VMware и Hyper-V.
Все эти функции доступны через оболочку с поддержкой сценариев под названием guestfish или интерактивную спасательную оболочку virt-rescue.
libguestfs — это библиотека C, которая может быть связана с программами управления C и C++ и имеет привязки примерно для десятка других языков программирования. Используя модуль FUSE, вы также можете монтировать гостевые файловые системы на хосте.
libguestfs — это способ создания, доступа и изменения образов дисков. Вы можете заглядывать внутрь образов дисков, изменять файлы, которые они содержат, создавать их с нуля, изменять их размер и многое другое. Это особенно полезно из сценариев и программ, а также из командной строки.
Для установки в Debian, Kali Linux, Linux Minut, Ubuntu и их производные выполните:
sudo apt install libguestfs-tools
Для установки в Arch Linux, Manjaro, BlackArch и их производные выполните:
sudo pacman -S libguestfs
Утилиты libguestfs
Данный пакет включает в себя большое количество утилит:
- guestfs — главная документация по API
- guestfish — интерактивный шелл
- guestmount — монтирует файловую систему гостевой машины в основную
- guestunmount — размонтирует гостевую файловую систему
- virt-alignment-scan — проверить выравнивание разделов виртуальной машины
- virt-builder — быстрый построитель образов
- virt-builder-repository — создаёт репозитории virt-builder
- virt-cat — показывает файл
- virt-copy-in — копирует файлы и директории в виртуальную машину
- virt-copy-out — копирует файлы и директории из виртуальной машины
- virt-customize — настраивает виртуальные машины
- virt-df — показывает свободное место на виртуальных дисках
- virt-dib — безопасный diskimage-builder
- virt-diff — показывает разницу между виртуальными дисками
- virt-edit — редактирует файл
- virt-filesystems — показывает информацию о файловых системах, устройствах, LVM
- virt-format — стирает и делает пустые диски
- virt-get-kernel — получает ядро с диска
- virt-inspector — инспектирует образы виртуальных машин
- virt-list-filesystems — выводит список файловых систем
- virt-list-partitions — выводит список разделов дисков
- virt-log — показывает файлы журналов
- virt-ls — показывает список файлов
- virt-make-fs — создаёт файловую систему
- virt-p2v — конвертирует физическую машину для запуска на KVM
- virt-p2v-make-disk — делает P2V ISO
- virt-p2v-make-kickstart — делает P2V kickstart
- virt-rescue — спасательный шелл
- virt-resize — изменяет размер виртуальных машин
- virt-sparsify — сделать виртуальные машины разреженными (с тонким предоставлением)
- virt-sysprep — отключает виртуальную машину перед клонированием
- virt-tail — показывает изменения в файле журнала
- virt-tar — архивирует и выгружает файлы
- virt-tar-in — архивирует и выгружает файлы
- virt-tar-out — архивирует и загружает файлы
- virt-v2v — конвертирует гостевую машину для запуска на KVM
- virt-win-reg — экспортирует и объединяет ключи реестра Window
- libguestfs-test-tool — тест libguestfs
- libguestfs-make-fixed-appliance — сделать libguestfs фиксированным устройством
- hivex — извлекает куст реестра Windows
- hivexregedit — объединяет и экспортирует изменения в реестре из файлов в формате regedit
- hivexsh — оболочка кустов реестра Windows
- hivexml — конвертирует куст реестра Windows в XML
- hivexget — извлекает данные из куста реестра Windows
- guestfsd — демон guestfs
Ключевыми являются программы:
- guestmount — монтирует файловую систему гостевой машины в основную
- guestunmount — размонтирует гостевую файловую систему
Программа guestfish (интерактивный шелл) требует глубокого изучения, но позволит вам работать с содержимым виртуальных дисков в интерактивном режиме, или писать скрипты для автоматической обработки последовательности действий.
Многие из перечисленных программ являются скриптами, автоматизирующими действия. То есть они выполняют монтирование образа виртуального диска, делают указанное действие и размонтируют.
Монтирование дисков виртуальных машин
Типичная команда монтирования виртуального диска:
guestmount -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' -i --ro /ТОЧКА/МОНТИРОВАНИЯ
После опции -a нужно указать виртуальный диск для монтирования.
Рассмотрим ещё несколько опций:
Опция -i (--inspector) означает использовать код virt-inspector для проверки дисков в поисках операционной системы и монтирование файловых систем, как если бы они были смонтированы на реальной виртуальной машине.
Опция --live позволяет подключиться к работающей виртуальной машине, эта опция является экспериментальной.
Опция -r (--ro) добавляет устройство и монтирует всё только для чтения. Также запрещает запись и делает диск доступным только для чтения для FUSE. Это настоятельно рекомендуется, если вы не собираетесь редактировать гостевой диск. Если гость работает, а эта опция не указана, существует высокий риск повреждения диска в гостевой системе.
Опция -w (--rw) изменяет параметры -a, -d и -m, так что диски добавляются, а монтирование выполняется для чтения-записи.
Итак, смонтируем диск виртуальной машины Windows Server 2019.vdi.
Создадим точку монтирования:
mkdir /tmp/guest
Монтируем диск /mnt/disk_d/Виртуальные машины/Windows Server 2019.vdi в папку /tmp/guest:
guestmount -a '/mnt/disk_d/Виртуальные машины/Windows Server 2019.vdi' -i --ro /tmp/guest
Смотрим содержимое смонтированного диска:
ls -l /tmp/guest
Теперь посмотрим содержимое папки C:/Users/Администратор/Downloads/:
ls -l /tmp/guest/Users/Администратор/Downloads/
Для размонтирования используется команда вида:
guestunmount /ТОЧКА/МОНТИРОВАНИЯ
Например:
guestunmount /tmp/guest
Извлечение кустов реестра Windows из диска виртуальной машины
С помощью virt-win-reg можно извлекать кусты реестра Windows, в том числе те, которые доступны только для учётной записи System.
Общий вид команды:
virt-win-reg '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' 'ИМЯ\КУСТА'
По умолчанию содержимое будет выведено на экран, поэтому для сохранения данных в файл нужно воспользоваться перенаправлением вывода.
Например, команда для извлечения куста HKEY_LOCAL_MACHINE\SYSTEM из операционной системы Windows, чей виртуальный диск расположен в /mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi и сохранение полученных данных в файл SYSTEM.reg:
virt-win-reg '/mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi' 'HKEY_LOCAL_MACHINE\SYSTEM' > SYSTEM.reg
Ещё один пример, извлечение куста реестра HKEY_LOCAL_MACHINE\SAM из образа диска /mnt/disk_d/Виртуальные машины/Windows Server 2019.vdi и сохранение данных в файл SAM.reg:
virt-win-reg '/mnt/disk_d/Виртуальные машины/Windows Server 2019.vdi' 'HKEY_LOCAL_MACHINE\SAM' > SAM.reg
Просмотр свободного места диска виртуальной машины
Программа virt-df покажет разделы дисков и количество свободного места на них.
Общий вид команды:
virt-df '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА'
Пример команды:
virt-df '/mnt/disk_d/Виртуальные машины/Linux LMDE.vdi'
Пример вывода для ОС Linux:
Файловая система Блоки 1К Использовано Доступно Использование, % Linux LMDE.vdi:/dev/sda1 292272 5220 287052 2% Linux LMDE.vdi:/dev/sda3 96241020 6280016 85029116 7%
Ещё один пример команды:
virt-df '/mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi'
Пример вывода для ОС Windows:
Файловая система Блоки 1К Использовано Доступно Использование, % Windows 10 (en).vdi:/dev/sda1 541692 436548 105144 81% Windows 10 (en).vdi:/dev/sda2 97280 27139 70141 28% Windows 10 (en).vdi:/dev/sda4 156624892 26634932 129989960 18%
Обратите внимание, что разделы в Windows названы по аналогии с разделами Linux.
Анализ дисков виртуальной машины
Команда virt-inspector проведёт анализ файловых систем и покажет установленные программы, а также некоторую другую информацию об операционных системах.
Общий вид команды:
virt-inspector -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА'
Примеры команд:
virt-inspector -a '/mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi' virt-inspector -a '/mnt/disk_d/Виртуальные машины/Linux LMDE.vdi'
Вывод списка файлов диска виртуальной машины
Вы можете посмотреть содержимое любой папки на виртуальном диске с помощью virt-ls.
Общий вид команды:
virt-ls -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' '/ПАПКА'
Обратите внимание, что даже в Windows путь начинается с / (обозначение корневой папки).
Следующая команда покажет содержимое корня диска C: для виртуального диска /mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi:
virt-ls -a '/mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi' '/'
Пример вывода:
$Recycle.Bin $WinREAgent Documents and Settings DumpStack.log.tmp PerfLogs Program Files Program Files (x86) ProgramData Recovery System Volume Information Users Windows pagefile.sys swapfile.sys
Просмотр содержимого файла на диске виртуальной машины
Программа virt-cat покажет содержимое любого файла. Файл будет выведен прямо на экран (в стандартный вывод), поэтому если это бинарный файл, то используйте перенаправление вывода для его сохранения.
Общий вид команды:
virt-cat -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' '/ПАПКА/ФАЙЛ'
Обратите внимание, что даже в Windows путь начинается с / (обозначение корневой папки).
Следующая команда покажет содержимое файла C:\DumpStack.log.tmp из виртуального диска /mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi:
virt-cat -a '/mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi' '/DumpStack.log.tmp'
Просмотр разделов дисков виртуальной машины
Программа virt-filesystems просто покажет количество разделов дисков и их номера.
Общий вид команды:
virt-filesystems -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА'
Пример команды и вывода для Windows:
virt-filesystems -a '/mnt/disk_d/Виртуальные машины/Windows 10 (en).vdi' /dev/sda1 /dev/sda2 /dev/sda4
Пример команды и вывода для Linux:
virt-filesystems -a '/mnt/disk_d/Виртуальные машины/Linux LMDE.vdi' /dev/sda1 /dev/sda3
Смотрите также «Всё о монтировании: от системного администрирования до IT криминалистики».
Связанные статьи:
- Как перенести виртуальные машины VirtualBox на другой диск или другой компьютер (78.2%)
- Как ускорить работу виртуальной машины VirtualBox (78.2%)
- Решение ошибки VERR_VD_IMAGE_READ_ONLY (50%)
- Не работает буфер обмена с гостевой ОС Linux (33.2%)
- Как установить гостевые дополнения VirtualBox (Guest Additions) для Ubuntu (33.2%)
- Как узнать, какой процесс изменяет файл (RANDOM - 16.9%)