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

Для человека непосвящённого может показаться, что сам заголовок статьи содержит лишь бессмысленный набор слов, но для нас, админов, это если не таинство, то вполне так полезная информация. Как-то понадобилось мне скопировать с системного раздела винчестера в раздел виртуального диска нужные мне файлы, и стал я думать, как это сделать быстро и без хлопот. Запустить виртуальную машину и подключиться к хосту через 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
Запись опубликована в рубрике Debian, Hardware, Hardware, Linux, Linux, PC, Q&H, Software, Software с метками , , , , , , , , , , , , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *