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