Google Analytics

четверг, 17 февраля 2011 г.

Создание multiboot флешки своими руками.

Задумал я сделать себе свою флешку загрузочной. Но столкнулся с некоторыми проблемами. При её изготовлении. Итак, начнём по порядку.

При записи hybrid iso диска через dd мы теряем оставшуюся емкость диска, а я на флешке часто ношу файлы знакомым. А у них стоит оффтоп, недостойный упоминания в этой статье. Значит, я должен разбить свою флешку, создав первый основной раздел в формате FAT32. А для линукса создать дополнительный раздел, с Ext4 в качестве ФС. Возможен вариант с Ext2/3 или любой другой ФС. Но не FAT и не NTFS, а то на флешки и карты памяти с несколькими разделами оффтоп реагирует по разному, иногда неадекватно.

Первым дистром на флешке должна быть Ubuntu. Стандартный установщик Ubuntu не подходит, он видно использует метод с dd, удаляя всё с многострадальной шлешки, и делая ей не годной для хронения файлов.

Есть для этого дела ещё и Unetbootin. Отличный продукт, устанавливает на стандартный FAT раздел загрузчик syslinux и один из целого списка дистрибутивов, при этом может сам качать их с оффсайтов и их зеркал. Но можно пользоваться только одним дистрибутивом, и его файлы и каталоги, изъятые из ISO образа, лежат вперемешку с вашими файлами.

Проект multisystem сам качает и устанавливает все что нужно для создания multiboot флешки, при этом он модифицирует initramfs тех дистрибутивов, которые не поддерживают загрузки из iso образов, лежащих в корне флешки. Опять проблемма, скрипт сам затачивает флешку под себя, форматируя её как ему угодно. А мне надо, что-бы из оффтопа даже не видели разделов, хранящих Live CD образа.

Ну, приступаем к делу.

Для начала вам понадобится cfdisk и mc. Первая программа есть в системе, а вторую лучше установить. Впринципе можно использовать PCManFM, или любой другой файловый менеджер. И ещё вам нужен Grub2 и Vim. Вместо Vim можно использовать nano,ed,medit или gedit на выбор. Мне нравится vim за его реактивно быструю загрузку/работу. Он не морочит голову свистелками и наворочеными плагинами/диалогами и менюшками, он просто работает.

Форматирование флешки.

Логинимся как root в консоли. Для этого вводим su, жмём Enter и вводим пароль. Теперь ищем свой флэш-диск. Вводим fdisk -l, и ищем наш флэш-диск. Смотрим на размер диска. У меня это:

Disk /dev/sdc: 3 GB, 3997486080 bytes
255 heads, 63 sectors/track, 486 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Теперь мы знаем что флэшка у нас пердставлена как /dev/sdc. Запускаем cfdisk:

cfdisk /dev/sdc

Нажимаем на [ New ], затем указываем тип раздела. [ Primary ] - основной или [ Logical ] - логический. И указываем откуда откусить кусок, с начала или конца неразмеченной области. Выбираем пункт [ Begining ]. Затем вводим размер этого раздела. У меня первый раздел в FAT32, его размер 1.2 GB. Расширеный раздел на всё оставшееся место. В нём создаём раздел для Grub, ФС типа ext4 и размером 400Mb. Создаём затем раздел для образов, назовём его isoStorage,LiveCDiso или как вашей душе угодно. Записываем изменения в таблицу разделов, нажав на [ Commit ], затем на [ Yes ]. Нажимаем любую кнопку, затем [ Quit ] для выхода. Форматируем наши разделы командой:

mkfs -L <Метка(Label) раздела>  -t <тип ФС> /dev/устройство

В моём случае я использовал команды:

mkfs -L Flaska -t vfat /dev/sdc1
mkfs -L Boot -t ext4 /dev/sdc5
mkfs -L isoStorage -t ext4 /dev/sdc6

Монтируем каталоги.

Теперь мы должны создать в каталоге /mnt каталоги Boot и isoStorage.

cd /mnt
mkdir Flashka
cd Flashka
mkdir Boot
mkdir isoStorage

Теперь монтируем их:

mount /dev/sdc2 /mnt/Flashka/Boot
mount /dev/sdc5 /mnt/Flashka/isoStorage

Установка GRUB2 на флешку.

Так устанавливаем Grub2 на флешку:

grub-install --root-directory /mnt/Flashka/Boot /dev/sdc

У этой команды параметр --root-directory <путь к смонтированному разделу> отвечает за указание каталога, в который Grub устанавливает свои файлы. А /dev/sdc указывает на устройство, на которое ставим Grub запишет свой boot-сектор в MBR.

Редактируем grub.cfg

Выполняем команду:

vim /mnt/Flashka/Boot/boot/grub/grub.cfg

Можете использовать вместо vim nano или gedit. Если вы выбрали vim, то нажмите на латинскую клавишу "a" для перехода в ражим редактирования, затем введите:

#Указываем задержку перед автоматической загрузкой.
set timeout=5
#Номер пункта, который грузится по прошествии задержки из предыдущего пункта.
#Отсчёт  начинаем с 0 пункта.
set default=0

### модули поддержки iso9660 и msdos разделов
insmod iso9660
insmod part_msdos

# удерживаешь кнопку шифт - показываем менюшку(расскоментируйте, если надо.)
#if keystatus --shift ; then set timeout="-1" ; fi
### разрешение
set gfxmode=800x600x32,800x600x24,800x600

### Загрузка шрифта и включение графического меню
loadfont /boot/grub/unicode.pf2
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else terminal gfxterm; fi

### настройка цветов
set color_normal=white/black
set menu_color_normal=green/black
set menu_color_highlight=light-blue/black

#Пункт меню "Перезагрузка"
menuentry "Reboot" {
  reboot
}

#Пункт меню "Выключение"
menuentry "Halt" {
  halt
}

Сохраняем всё нажав на Esc и ":", затем "w" и Enter. Опять ":" и "q" для выхода.

Проверка GRUB2 на работоспособность.

Используем замечательную виртулаьную машину от Oracle.Будьте внимательны, эти команды вы должны вводить от своего пользователя, или использовать usermod -a -G /dev/sdc в обязательном порядке.

sudo VBoxManage internalcommands createrawvmdk -filename /tmp/bootflash.vmdk -rawdisk /dev/sdc
sudo chmod a+rw /tmp/bootflash.vmd

Это потенциально опасная операция, поэтому вместо этого вы можете использовать запуск VirtualBox от sudo. Или запретить после изготовления флешки доступ вашего пользователя к работе с /dev/sdc в raw-режиме.

sudo usermod -a -G /dev/sdc 

Теперь создаём в VirtualBox новую виртуальную машину. И добавляем наш файл /tmp/bootflash.vmdk в коллекцию с образами дисков. Загружаем нашу флешку в виртуалке, и радуемся правильной работе загрузчика.

Завтра я опишу, как добавить на флешку Ubuntu и другие Live-системы.

Комментариев нет: