Эта страница была перенесена на
altlinux.org. Текст на freesource.info заморожен.
это неоконченная статья.
Тестирование загрузки флешек в виртуальных машинах
При возне с загрузочными флешками (и прочими USB-дисками) частенько приходится их многократно тестировать. Если под рукой нет второго компьютера, неохота постоянно перезагружать свою рабочую станцию, или просто хочется экзотической конфигурации компьютера, то можно использовать виртуальные машины. Если удастся их загрузить с USB... Попробуем!
QEMU
Достоинства виртуальной машины QEMU:
- возможность работать как с реальными USB-устройствами, так и с их образами;
- USB-устройства продолжают оставаться смонтированными в хост-системе.
Недостатки:
- нет загрузки с USB;
- медленная работа с USB (эмулируется только UHCI-хост).
Итак, QEMU позволяет нам работать как с готовыми флешками, так и с их образами, что позволяет обойтись от постоянной заливки файлов на флешку, что, теоретически, продлит её жизнь :) Из-за того, что QEMU не поддерживает загрузку с USB-устройств, мы подсовываем ей флешку (имидж) дважды – как загрузочный жесткий диск, и как подключённый к системе USB-диск. Сначала BIOS/загрузчик гостевой системы начинает грузиться с жесткого диска, затем, после того, как модуль usb_storage обнаружит свои устройства, загрузка (stage2) продолжится уже с USB-диска. Загрузочный HDD будет виден в системе как hda, флешка – как sda.
Загрузка QEMU с реальной флешки
Здесь всё просто:
$ qemu -hda /dev/sdc -boot c -usb -usbdevice disk:/dev/sdc
Где /dev/sdc – устройство с флешкой в хост-системе. Прочие параметры запуска – по вкусу. Если нужно добавить в гостевую систему жёсткий диск, сделайте его имидж (man qemu-img или просто dd if=/dev/zero...), и
укажите параметр -hdb mydisk.img.
Загрузка QEMU с образа флешки
Благодаря тому, что параметам -hda и -usbdevice можно подсовывать не только устройства, но и любые файлы, мы можем в нашем тестировании обойтись вовсе без флешки.
Создание образа флешки:
- Создаём файл-контейнер достаточного размера. Соглашаясь с виртуальной геометрией устройства в 32 сектора на дорожку, по 512 байт каждый, 64 головки мы получаем размер цилиндра равным мегабайту, что очень удобно для рассчетов. Так, для создания контейнера для гигабайтной флешки, мы выполняем:
$ dd if=/dev/zero of=flash.img bs=$((512*32*64)) count=1K
- Прописываем в файл контейнера Partition Table:
$ /sbin/fdisk flash.img
- назначаем виртуальную геометрию:
- создаём раздел типа FAT32 (C) и делаем его активным:
- Записываем загрузчик MBR (если у вас в системе еще не стоит пакета syslinux – поставьте его!):
$ dd if=/usr/lib/syslinux/mbr.bin of=flash.img conv=notrunc
- Делаем контейнер для VFAT-раздела:
- выясняем размер:
$ echo -e «x\np\n» |/sbin/fdisk flash.img
Запоминаем цифры 32 в колонке Start и 2097120 в Size. Это смещение и размер нашего раздела в 512-байтных блоках.
- Делаем файловую систему (man mkfs.vfat). Здесь мы должны указать размер в 1K-блоках, поэтому
$ /sbin/mkfs.vfat -v -C flash1.vfat $((2097120/2))
- Создаём точку монтирования и монтируем туда свежесозданный контейнер раздела:
$ mkdir mybootflash
# mount -o loop,fmask=0111,dmask=0000,quiet flash1.vfat mybootflash
- Копируем всё, что нам надо, в смонтированный образ раздела флешки, не забывая про файлы syslinux'а.
- Отмонтируем контейнер раздела
- Записываем загрузчик syslinux:
$ syslinux flash1.vfat
Если у нас для хранения всех файлов syslinux'а выделена отдельная директория на флешке, то лучше и файл загрузчика ldlinux.sys прописать туда же, указав параметр -d (например, $ syslinux -d /syslinux flash1.vfat
- Теперь мы записываем готовый контейнер раздела внутрь контейнера устройства, по ранее запомненному смещению в 32 сектора:
$ dd if=flash1.vfat of=flash.img bs=512 seek=32 conv=notrunc
Всё, образ флешки готов! В дальнейшем, при изменении содержимого, и без необходимости увеличивать размер устройства, можно повторять операции, начиная с монтирования контейнера раздела, автоматизировав эту операцию по вкусу.
Загрузка с образа флешки
$ qemu -hda flash.img -boot c -usb -usbdevice disk:flash.img
Даже немного быстрее получится :)
VMWare
Достоинства виртуальной машины VMWare:
- высокая скорость работы с USB-устройствами;
Недостатки:
- нет загрузки с USB;
- невозможно работать с образом флешки.
С VMWare нам придётся использовать реальное USB-устройство, которое мы будем передавать гостевой системе, при этом из host-системы оно исчезнет. Кроме того, нам придётся делать образ загрузочного мини-диска для обхода невозможности грузиться с USB-устройств. Но высокая скорость работы с флешками перевешивает все эти неудобства.
Тестировалась VMWare шестой версии.
Итак, предположим, что у нас сконфигурирована виртуальная машина mytestvm, с SCSI-диском(ами), и есть готовая флешка.
Создание загрузочного диска
- Перейдём в директорию нашей виртуальной машины: $ cd ~/vmware/mytestvm
- Создадим контейнер устройства с помощью утилиты vmware-vdiskmanager (посмотрите вывод
help):-$ vmware-vdiskmanager -c -s 100Mb -a lsilogic -t 2 bootflash.vmdk
Здесь мы создаём диск минимально возможного размера в 100Мб, тип диска – SCSI с адаптером lsilogic (рекомендуется по умолчанию), тип 2 (всё место под файл диска распределено заранее).