1. Интро
В данной статье я хочу обобщить найденный мной материал, в котором описывается процесс создания образа жесткого диска, записи на него загрузчика GRUB, преобразования формата образа для различных систем виртуализации и настройка систем виртуализации для работы с этим образом. Все примеры приведены для ОС Linux со стандартным набором системных программ.2. Создание образа диска
Для начала создадим образ диска размером 128 Мб. Для этого воспользуемся программой dd.~# dd if=/dev/zero of=disk.img count=262080
Размер образа указан в "блоках" (blocks), имеющих фиксированный размер в 512 байт.Сконфигурируем образ для дальнейшей работы при помощи программы fdisk:
~# fdisk disk.img
Перейдем в режим эксперта 'x', затем выставим количество секторов в цилиндре S=63, количество головок H=16. Вычислим количество циллиндров при помощи формулы:C*H*S = 262080 C = 260
Затем вернемся в основное меню 'r' и создадим раздел на диске.
Device Boot Start End Blocks Id System disk.img 1 2048 262079 130016 83 LinuxЗапомним адрес начала раздела: 2048 блоков или 2048*512=1048576 байт.
Теперь осталось только создать на нашем диске файловую систему. Для этого привяжем к нашему файлу образа так называемый loop device:
~# losetup -o 1048576 /dev/loop0 disk.img
/dev/loop0 является блочным устройством. Отформатируем это устройство:~# mkfs.ext2 /dev/loop0
После этого отсоединим блочное устройство.~# losetup -d /dev/loop0
На этом создание образа диска завершено. На данном этапе мы имеем отформатированный и готовый для использования файл образа диска размером около 128 Мб.3. Установка загрузчика
Установим загрузчик GRUB на образ нашего жесткого диска. Смонтируем образ нашего жесткого диска:~# mkdir /mnt/disk_img ~# mount -o loop,offset=1048576 disk.img /mnt/disk_img
Чтобы установить загрузчик на образ нашего диска мы должны скопировать stage1
и stage2 загрузчика из нашего дистрибутива в папку /boot/grub на образе disk.img:
~# mkdir -p /mnt/disk_img/boot/grub ~# cp /lib/grub/i386-pc/stage1 /mnt/disk_img/boot/grub ~# cp /lib/grub/i386-pc/stage2 /mnt/disk_img/boot/grubЭти файлы находятся либо в /lib/grub, как в моем случае, либо в /usr/lib. Это можно выяснить при помощи команды find.
После этого можно отмонтировать образ.
~# umount /mnt/disk_img
Теперь для настройки grub выполним:
~# grub --device-map=/dev/null
перед нами появится стандартный интерпретатор команд загрузчика.Последовательно введем следующие команды:
grub> device (hd0) disk.img grub> geometry (hd0) 262080 16 63 grub> root (hd0,0) grub> setup (hd0) grub> quit
Если все прошло без ошибок, то теперь у нас есть образ диска с установленным и сконфигурированным загрузчиком.
4. Использование образа
Мы можем смонтировать образ как уже было показано ранее:~# mount -o loop,offset=1048576 disk.img /mnt/disk_img
Пример использование в Qemu:
~$ qemu -hda disk.img -m 256
Для использования с VirtualBox необходимо преобразовать формат образа. Это легко сделать при помощи следующей команды:
~$ VBoxManage convertfromraw -format VDI disk.img disk.vdiЗатем этот образ можно использовать.
Ссылки:
Installing grub on virtual hard disks
Работа с VirtualBox из командной строки
Вместо losetup -o 1048576 /dev/loop0 disk.img очень удобна команда kpartx -a disk.img создающая устройства /dev/mapper/loopXpY для всех разделов найденных на disk.img
ОтветитьУдалитьХочу добавить, что если разработка ОС ведется только на виртуальной машине и не требуется запускать на реальном железе, в свежей версии qemu есть возможность грузить multiboot-совместимое или bzImage ядро напрямую вот так:
ОтветитьУдалитьqemu-system-i386 -kernel kernel.bin