Как смонтировать виртуальный диск виртуальной машины на гипервизоре KVM с помощью Libguestfs Tools
Некоторое время я управляю несколькими виртуальными машинами на гипервизоре Vanilla KVM. Предположим, у вас есть виртуальная машина, виртуальный диск которой вы хотите смонтировать на гипервизоре, как это сделать? — Например, для сброса пароля root, проверки некоторых файлов или, возможно, виртуальная машина была взломана, и вы хотите выполнить дополнительный анализ источника атаки, не переводя виртуальную машину в рабочий режим.
Как смонтировать виртуальный диск ВМ на гипервизор KVM
В моей настройке у меня есть сервер CentOS 7 с установленным KVM и запущенным несколькими виртуальными машинами. Чтобы смонтировать виртуальный диск виртуальной машины, вам необходимо установить Libguestfs.
libguestfs — это набор инструментов, используемых для доступа и изменения образов дисков виртуальных машин (ВМ). Вы можете использовать это для:
- просмотр и редактирование файлов внутри гостей
- изменение сценариев для виртуальных машин
- мониторинг используемого диска / бесплатная статистика
- создание гостей
- P2V
- V2V
- выполнение резервного копирования и т. д.
Установите libguestfs на CentOS:
Чтобы установить libguestfs на сервер CentOS, запустите:
sudo yum -y install libguestfs-tools
Установите libguestfs в Ubuntu / Debian
sudo apt-get -y install libguestfs-tools
Установите libguestfs в Arch Linux
Сначала включите AUR в /etc/pacman.conf
$ sudo vim /etc/pacman.conf
# Should have below lines
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
Затем обновите свои базы данных Pacman.
sudo pacman -Syy
Установите инструменты libguestfs с помощью помощника AUR.
sudo pacman -S yaourt yaourt -S --noconfirm --needed libguestfs
Монтирование виртуального диска на KVM с помощью libguestfs
Теперь, когда у вас установлены инструменты libguestfs, вы монтируете с ним виртуальный диск виртуальной машины. Перед установкой виртуальной машины рекомендуется выключить ее. Запись на диски работающей виртуальной машины может привести к повреждению диска. Рекомендуется либо использовать доступ только для чтения, либо, если гость запускает демон guestfsd , указать прямой доступ. В большинстве libguestfs инструментов эти варианты -ro или -live соответственно.
Сначала проверьте свои активные виртуальные машины:
sudo virsh list
Выключите рассматриваемую виртуальную машину:
sudo virsh shutdown <domain-name or ID>
Затем смонтируйте диск,
sudo guestmount -d <domain> -i /mnt/
Пример:
sudo guestmount -d centos7 -i /mnt/
Подтвердите, что монтирование прошло успешно:
# df -hT | egrep "/mnt" /dev/fuse fuse 20G 3.9G 16G 20% /mnt
Объяснение используемых опций
-d |–domain : добавить диски из libvirt guest
-i |–inspector : автоматически монтировать файловые системы
Ниже приведен полный список параметров, которые вы можете использовать с командой guestmount. Это доступно по адресу:
$ guestmount --help
Все варианты гостевой системы:
-a |--add image --> Add image
-c|--connect uri --> Specify libvirt URI for -d option
--dir-cache-timeout --> Set readdir cache timeout (default 5 sec)
-d |--domain --> Add disks from libvirt guest
--echo-keys --> Don't turn off echo for passphrases
--fd=FD --> Write to pipe FD when mountpoint is ready
--format[=raw|..] --> Force disk format for -a option
--fuse-help --> Display extra FUSE options
-i |--inspector --> Automatically mount filesystems
--help --> Display help message and exit
--keys-from-stdin --> Read passphrases from stdin
--live --> Connect to a live virtual machine
-m |--mount dev[:mnt[:opts[:fstype]] --> Mount dev on mnt (if omitted, /)
--no-fork --> Don't daemonize
-n |--no-sync --> Don't autosync
-o |--option --> opt Pass extra option to FUSE
--pid-file --> filename Write PID to filename
-r |--ro --> Mount read-only
--selinux --> For backwards compat only does nothing
-v |--verbose --> Verbose messages
-V |--version --> Display version and exit
-w |--rw --> Mount read-write
-x |--trace --> Trace guestfs API calls
Смонтировать виртуальный диск запущенной ВМ
Для работающей виртуальной машины я ранее говорил, что вы должны монтировать ее как — ro или используя флаг –live .
sudo guestmount --ro -d <domain> -i /mnt/
Пример сброса пароля root:
Я покажу вам, как можно сбросить пароль root, используя подключенный виртуальный диск. Мы будем использовать команду chroot, которая представляет собой инструмент, используемый для запуска команды или интерактивной оболочки со специальным корневым каталогом.
sudo chroot /mnt passwd
Установите пароль и отключите диск после завершения
sudo guestunmount /mnt
Запустите виртуальную машину и проверьте, можете ли вы пройти аутентификацию с установленным паролем.
sudo virsh start <domain>
Отключить виртуальный диск
Если вы закончили работу с смонтированным диском, отключите его, выполнив команды:
$ sudo guestunmount mountpoint Например $ sudo guestunmount /mnt