Сервер в кармане, или просто о сложном!

главная - Статьи - Виртуализация

Получение доступа к файловой системе гостевой виртуальной машины KVM

Теги: kvm Linux Виртуальные машины

Как подключить содержимое виртуальной машины KVM в файловую систему хоста? Для этого существует специальная команда guestmount и парная ей guestunmount. Guestmount позволяет монтировать файловые системы гостевой vm в файловую систему хоста, при этом можно указывать или само имя сущесвующей vm или же указать только ее диск. Останавливать саму vm при этом не обязательно, но при этом обязательно подключать ее диски в режиме "только для чтения", чтобы не получить сбой работы vm.

Для чего это может быть нужно? Да для чего угодно. Например, есть диск от старой виртуалки, в которой были какие-то данные, которые вы должны получить. Или vm не запускается/недоступна по сети, и вам надо подправить ее конфиг. В общем, применений - миллион.

Краткое содержание статьи:

man guestmount
man guestunmount
man virt-filesystems

Проверим все это на работающей vm5 (CentOS 7, зашифрован LUKS) и на диске от старой vm4 (тоже CentOS 7, но диск не шифрован).

# guestmount -d vm5 -i --ro /mnt/vm/
  • -d vm5 - подключить виртуальную машину libvirt с именем vm5;
  • -i - позволить libguestfs автоматически определить точки монтирования;
  • --ro - read only. Если vm запущена, лучше всегда указывать эту опцию.

Потребуется ввести пароль LUKS. После подкючения к vm5, изменения в файлах этой vm не отобразятся в /mnt/vm/. Например, если вы подключили vm5 в /mnt/vm, потом на работающей vm5 изменили какой-то файл, то эти изменения не будут видны через /mnt/vm. Т.е. мы видим состояние vm на момент подключения к ней.

Узнать, какие файловые системы есть в гостевой vm5:

# virt-filesystems -d vm5 -l
Name       Type        VFS  Label  Size       Parent
/dev/sda1  filesystem  xfs  -      524288000  -
  • опция '-l' выводит дополнительные (и в общем-то, полезные сведения);
  • вместо опции '-d vm5' можно указать путь до диска виртуальной машины опцией '-a /data/vms/vm4.img'. Результат будет тот же.

Вообще, virt-filesystems позволяет узнать очень много всего. UUID, pvs, lvs, еще множество полезной информации.

Попробуем подключить содержимое диска /dev/sda1 от vm5:

# guestmount -d vm5 -m /dev/sda1 --ro /mnt/vm/

Будет подключен только /boot ('ls -l /mnt/vm/'). Но кроме /boot, в моей vm5 есть корневой раздел с файлами. Но это потому, что корневой раздел в vm5 зашифрован LUKS. Это видно по листингу 'lsblk' из самой vm5.

Для сравнения приведу список файловых систем диска старой vm4, которая не была зашифрована, от которой остался только диск, а сама vm4 уже удалена:

# virt-filesystems -a /data/vms/vm4.img -l
Name              Type        VFS  Label  Size         Parent
/dev/sda1         filesystem  xfs  -      524288000    -
/dev/centos/root  filesystem  xfs  -      18756927488  -

# guestmount -a /data/vms/vm4.img -m /dev/centos/root --ro /mnt/vm/

Все ок. Обратите внимание, что хоть директория /boot есть, она пустая:

# ls -al /mnt/vm/boot/
total 4
drwxr-xr-x.  2 root root    6 Apr 27  2016 .
dr-xr-xr-x. 17 root root 4096 Apr 27  2016 ..

Это нормально, ведь мы указали опцией '-m', что хотим подключить конкретный диск из существовавшей когда-то виртуальной машины vm4.

После работы с данными отмонтируем подключенный ресурс:

# guestunmount /mnt/vm/

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?