База знаний по Open Source
Авторизация
Поиск по базе знаний

Достаточно часто возникает необходимость посмотреть или подправить что нибудь в образе диска виртуальной машины KVM, не запуская саму виртуальную машину. Существует несколько способов подмонтировать диск образа виртуальной машины.

Самый простейший – использовать механизм NBD (Network Block Device) –  протокол работы с блочным устройством по сети. В состав пакета виртуализации KVM уже входит qemu-nbd (или, как еще называют kvm-nbd), который позволяет используя протокол NBD расшаривать образ диска по сети. В Debian-подобных системах qemu-nbd входит в состав qemu-utils.

В Ubuntu (да и в большинстве других Linux-подобных системах) драйвер Network Block Device должен быть загружен вручную:

$ sudo modprobe nbd

qemu-nbd будет использовать драйвер nbd для создания блочных устройств и осуществления ввода/вывода при работе с ними. Теперь можно приконнектить образ диска:

sudo qemu-nbd -c /dev/nbd0 path/to/image/file

Здесь вместо nbd0 может быть и nbd1, nbd2, то-есть любое свободное блочное устройство. Если устройство уже занято, то выдается ошибка, что-то типа:

/build/qemu-Ee59aw/qemu-2.0.0+dfsg/nbd.c:nbd_init():L504: Failed to set NBD socket
/build/qemu-Ee59aw/qemu-2.0.0+dfsg/nbd.c:nbd_receive_request():L638: read failed

При успешном подключении qemu-nbd завершается и осталяет работать демон, который позволяет осуществлять с /dev/nbd0 стандартный набор функций присущих любому блочному устройству: mount, fdisk, fsck и так далее.

Перед монтированием нужно посмотреть разделы на блочном устройстве nsd0:

$ sudo fdisk -l /dev/nbd0
Диск /dev/nbd0: 8589 МБ, 8589934592 байт
255 головок, 63 секторов/треков, 1044 цилиндров, всего 16777216 секторов
Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes
Идентификатор диска: 0x0004c910
Устр-во Загр Начало Конец Блоки Id Система
/dev/nbd0p1 * 2048 15960063 7979008 83 Linux
/dev/nbd0p2 15962110 16775167 406529 5 Расширенный
/dev/nbd0p5 15962112 16775167 406528 82 Linux своп / Solaris

Теперь можно монтировать и работать с nbd0p1 как с обычным примонтированным диском:

$ sudo mount /dev/nbd0p1 /mnt/qemu-img

Проверяем:

$ dir /mnt/qemu-img
bin dev home initrd.img.old lib64 media opt root sbin sys usr vmlinuz
boot etc initrd.img lib lost+found mnt proc run srv tmp var vmlinuz.old

После завершения работы с образом диска KVM отмонтируем  его:

sudo umount /dev/nbd0p1

и отконнектимся:

sudo qemu-nbd -d /dev/nbd0

Если при попытке коннекта выдается невразумительная ошибка:

Failed to open /dev/nbd0: No such file or directory/build/qemu-Ee59aw/qemu-2.0.0+dfsg/nbd.c:nbd_receive_request():L638: read failed

значит не загружен драйвер nbd. После всех манипуляций можно выгрузить nbd:

$ sudo modprobe -r nbd

ВАЖНО!!! Нельзя проводить все эти действия при запущенной виртуальной машине!!! Данные на ней будут безвозвратно потеряны!!!

Файл образа виртуальной машины может быть любого формата, поддерживаемого QEMU: raw, qcow2, qed, vdi, vmdk, vpc, и т.д.