Страница 1 из 1

mount virtual

Добавлено: 21 фев 2022, 20:44
ya
https://hackware.ru/?p=14459

4. Доступ к содержимому дисков виртуальных машин и их изменение

Мы рассмотрели монтирование обычных дисков в файловую систему. Затем мы рассмотрели монтирование образов дисков в файловую систему. Теперь мы рассмотрим монтирование дисков виртуальных машин в файловую систему. На самом деле, последняя тема стоит особняком от уже рассмотренных вопросов — она не имеет отношения к команде mount (хотя поддержка файловых систем виртуальных дисков нужна чтобы можно было работать с ними).

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

Для работы с образами виртуальных машин необходим пакет 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

Данный пакет включает в себя большое количество утилит:

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
supermin — инструмент для создания supermin. Это крошечные устройства (похожие на виртуальные машины), обычно размером около 100 КБ, которые полностью создаются на лету за доли секунды, когда вам нужно загрузить одно из них.
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

Смотрите также «Анализ реестра Windows».

Просмотр свободного места

Программа 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
5. Файловая система в оперативной памяти

Файловая система tmpfs может найти повседневное применение в вашей деятельности, поскольку она невероятно быстрая и может помочь снизить нагрузку на ваше постоянное хранилище (особенно актуально тем, у кого Linux установлен на флешку или карту памяти).

tmpfs — это виртуальная файловая система, располагающаяся в оперативной памяти.

Средство tmpfs позволяет создавать файловые системы, содержимое которых находится в виртуальной памяти. Поскольку файлы в таких файловых системах обычно находятся в ОЗУ, доступ к файлам осуществляется очень быстро.

Файловая система создаётся автоматически при монтировании файловой системы с типом tmpfs с помощью следующей команды:
sudo mount -t tmpfs -o size=10M tmpfs /mnt/mytmpfs

Файловая система tmpfs имеет следующие свойства:

Файловая система может использовать пространство подкачки, когда этого требует физическая нагрузка на память.
Файловая система потребляет столько физической памяти и пространства подкачки, сколько требуется для хранения текущего содержимого файловой системы.
Во время операции повторного монтирования (mount -o remount) размер файловой системы может быть изменён (без потери существующего содержимого файловой системы).

Если файловая система tmpfs размонтирована, её содержимое теряется (удаляется).

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

Ещё одна цель использования — снизить износ постоянного хранилища. Это не особенно актуально для жёсткого диска или твердотельного диска — современные модели при любом типе домашнего использования переживут нас. Но это может быть актуально, если система установлена на карту памяти. Вы можете разместить в оперативную память приложение, которое постоянно использует хранилище (часто обращается к файлам или непрерывно сохраняет файлы), тем самым ускорится работа этого приложения, а также всей системы за счёт снижения нагрузки на карту памяти.

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

Рассмотрим пример копирования файлов — насколько быстрее это будет происходить в tmpfs по сравнению с дисками.

Создадим точку монтирования:
mkdir /tmp/mytmpfs

Создадим виртуальную файловую систему размером 20 Гигабайт в оперативной памяти:
sudo mount -t tmpfs -o size=20g tmpfs /tmp/mytmpfs

Скопируем туда файл размером в несколько Гигабайт:
cp /mnt/disk_d/Vuse/Space.Cop.2016.L2.BDRip.720p.mkv /tmp/mytmpfs

Проверим, сколько времени понадобится для создания копии этого файла в оперативной памяти:
time cp /tmp/mytmpfs/Space.Cop.2016.L2.BDRip.720p.mkv /tmp/mytmpfs/copy.mkv

Результат:
real 0m1,403s
user 0m0,020s
sys 0m1,381s

Понадобилось совсем немного времени — примерно полторы секунды.

А теперь сделаем копию этого же файла на жёстком диске:
time cp /mnt/disk_d/Vuse/Space.Cop.2016.L2.BDRip.720p.mkv /mnt/disk_d/Vuse/copy.mkv

Результат:
real 0m14,463s
user 0m0,065s
sys 0m4,041s

Понадобилось 14 секунд — в 10 раз больше времени.

Итак, используя tmpfs можно добиться максимальной скорости доступа к файлам.
Смотрите также Опции монтирования для tmpfs.
6. Автоматическое монтирование и его отключение
Включение и отключение автоматического монтирования на уровне графического окружения рабочего стола

Если подключить к компьютеру с Linux флешку или внешний USB диск, то система его автоматически смонтирует и откроет окно файлового менеджера. Причём окно будет открыто даже если у вам это не нужно и даже если у вас уже открыто окно файлового менеджера. Это довольно раздражительно.

Отключение автоматического открытия файлового менеджера после монтирования

Чтобы это отключить, установите пакет dconf-editor.

Для установки в Debian, Linux Mint, Ubuntu, Kali Linux и их производные:
sudo apt install dconf-editor

Для установки в Arch Linux и производные:
sudo pacman -S dconf-editor

После установки запустите в консоли:
dconf-editor

Для Cinnamon перейдите в пункты: org -> cinnamon -> desktop -> media-handling. И отключите automount-open:
Для GNOME перейдите в пункты: org -> gnome -> desktop -> media-handling. И отключите automount-open.
Для Xfce4 перейдите в пункты: org -> gnome -> desktop -> media-handling. И отключите automount-open.

Обратите внимание на то, что программа dconf-editor запускается без sudo. Если вы запустите её с sudo, то сделанная настройка будто бы не сработает. На самом деле, эта настройка будет установлена на пользователя root, а не для вашего пользователя.

Также можно отключить автоматический запуск файлового менеджера после монтирования из командной строки.

Для Cinnamon:
gsettings set org.cinnamon.desktop.media-handling automount-open false

Для GNOME:
gsettings set org.gnome.desktop.media-handling automount-open false

Для Xfce4:
gsettings set org.gnome.desktop.media-handling automount-open false

Как отключить автоматическое монтирование дисков
Чтобы это сделать с помощью dconf-editor, для Cinnamon перейдите в пункты: org -> cinnamon -> desktop -> media-handling. И отключите automount.

Для GNOME перейдите в пункты: org -> gnome -> desktop -> media-handling и отключите automount.
Для Xfce4 перейдите в пункты: org -> gnome -> desktop -> media-handling и отключите automount.

Отключение в командной строке.

Для Cinnamon:
gsettings set org.cinnamon.desktop.media-handling automount false

Для GNOME:
gsettings set org.gnome.desktop.media-handling automount false

Для Xfce4:
gsettings set org.gnome.desktop.media-handling automount false
Включение и отключение автоматического монтирования на уровне udev

7. Монтирование сетевых файловых систем

Примеры монтирования сетевых файловых систем вы найдёте по следующим ссылкам:

Как смонтировать общую папку Windows/Samba в Linux
Настройка автоматического монтирования сетевой папки в Linux
Сетевая файловая система SSHFS
Монтирование в VirtualBox

Помните об опции монтирования _netdev, которую можно указать в файле /etc/fstab, эта опция означает, что файловая система находится на устройстве, которому требуется доступ к сети (используется для предотвращения попыток системы смонтировать эти файловые системы до тех пор, пока в системе не будет включена сеть).
8. Опции команды mount и опции монтирования
Опции команды mount

Полный набор опций монтирования, используемых при вызове монтирования, определяется сначала извлечением опций монтирования для файловой системы из таблицы fstab, затем применением любых опций, указанных аргументом -o, и, наконец, применением опции -r или -w, если они присутствуют.

Параметры командной строки, доступные для команды mount:

-a, --all

Смонтировать все файловые системы (указанных типов), упомянутые в fstab (кроме тех, чья строка содержит ключевое слово noauto). Файловые системы монтируются в соответствии с их порядком в fstab. Команда mount сравнивает источник файловой системы, цель (и корень fs для bind mount или btrfs) для обнаружения уже смонтированных файловых систем. Таблица ядра с уже смонтированными файловыми системами кэшируется во время монтирования --all. Это означает, что все повторяющиеся записи fstab будут смонтированы.

Параметр --all также можно использовать для операции повторного монтирования. В этом случае все фильтры (-t и -O) применяются к таблице уже смонтированных файловых систем.

Начиная с версии 2.35, можно использовать параметр командной строки -o для изменения параметров монтирования из fstab (см. также --options-mode).

Обратите внимание, что использование mount -a для проверки fstab — плохая практика. Рекомендуемое решение:
findmnt --verify

-B, --bind

Перемонтировать поддерево в другом месте (чтобы его содержимое было доступно в обоих местах). Смотрите выше раздел «Операция привязки bind».

-c, --no-canonicalize