главная - Статьи - Виртуализация
Получение доступа к файловой системе гостевой виртуальной машины 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/
Авторизуйтесь для добавления комментариев!