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