Работа с raw образами виртуального сервера libvirt

Ноя 6th, 2014 | Posted by | Filed under Debian, Hardware, Hardware, Linux, Linux, PC, Q&H, Software, Software

Для человека непосвящённого может показаться, что сам заголовок статьи содержит лишь бессмысленный набор слов, но для нас, админов, это если не таинство, то вполне так полезная информация. Как-то понадобилось мне скопировать с системного раздела винчестера в раздел виртуального диска нужные мне файлы, и стал я думать, как это сделать быстро и без хлопот. Запустить виртуальную машину и подключиться к хосту через ssh? Можно, но системы на виртуальной машине нет. Загрузиться с live-cd? А зачем дополнительная прослойка, если файловую систему изнутри образа диска можно смонтировать? Итак, работаем с raw образами виртуального сервера!

Создавать образы можно с помощью virt-manager, с помощью dd, а можно и «срезать» с готового винчестера командой:

sudo cat /dev/sdd>sdd.img

При этом cat должна выполняться с правами root, а копирование в файл — не обязательно.

Образы можно выгружать на реальные винчестеры командой:

sudo cp ./sdd.img /dev/sdd

Можно просматривать таблицу разделов виртуального винчестера командой:

sudo fdisk -l ./sdd.img

Можно монтировать файловые системы разделов изнутри образа в реальную систему, для этого надо просмотреть таблицу разделов

sudo fdisk -l ./sdd.img

Выводит:

Disk ./sdd.img: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x95929592

Device Boot      Start         End      Blocks   Id  System
./sdd1          *          63   167766794    83883366    7  HPFS/NTFS/exFAT

Здесь мы видим один основной раздел с файловой системой ntfs. Посмотрим, как его надо монтировать. Раздел начинается с 63 «юнита», один «юнит» соответствует 1 сектору и равен 512 байт (см выше жирным шифтом). Умножаем одно на другое 🙂 63*512=32256

sudo mount -t ntfs-3g -o loop,offset=32256 ./sdd.img /mnt

Вуаля! Можно обмениваться информацией с файловой системой внутри образа или даже чрутиться в нее (если архитектура вашей ОС соответствует виртуальной).

Отключение файловой системы:

sudo umount ./sdd.img

Ещё одну замечательную возможность работы с образами дисков даёт обращение к ним как к loop-устройствам:

sudo losetup -f -v ./sdd.img

Ответ: Loop device is /dev/loop0

Появляется устройство /dev/loop0. Аналогично работе с файлом, можно посмотреть или создать на нём разделы командами:

sudo fdisk -l ./sdd.img
sudo fdisk ./sdd.img

Но можно пойти дальше и установить kpartx:

sudo aptitude install kpartx

Запускаем:

sudo kpartx -av /dev/loop0
ls /dev/mapper

и видим:
control loop0p1

Теперь с устройством /dev/mapper/loop0p1 запросто можно работать, как с разделом на диске, например, создать там файловую систему:

sudo mkfs.ext4 /dev/mapper/loop0p1 -L /
sudo fdisk -l ./sdd.img

Видим:

Disk /dev/loop0: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x95929592

Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1          *          63   167766794    83883366    83  Linux

На /dev/loop0 можно установить grub; /dev/mapper/loop0p1 можно куда-нибудь смонтировать, установить туда Linux, чрутнуться в него, сделать нужные настройки и т.д.

Закончили работу с разделами виртуального диска? Командуем:

sudo kpartx -d /dev/loop0
sudo losetup -d /dev/loop0
No comments yet.