Bootflash/mkbootflash

Материал из ALT Linux Wiki

Создание загрузочной флешки

Для создания загрузочной флеши, теоретически достаточно сделать две операции - поместить на неё необходимую информацию - файлы, образы и т.п. - сделать её загрузочной.

Теория её создания аналогична созданию LiveCD LiveCD/Howto. Проблема наполнения флешки легко решается, при наличии установочного дистрибутива или LivCD - надо просто скопировать содержимое дистрибутива, сконфигурировать файлы syslinux и инициировать его командой syslinux, как описано здесь : Bootflash/InstallFlash

Вкратце повторюсь : 1 Если у нас есть флешка с файловой системой fat, то всё нормально, если файловая система не fat, то делаем с помощью следующих команд:

Как определить на каком /dev видна флешка?

Переключаемся на 12-й экран <Ctrl>+<Alt>+<F12> Вставляем флешку.

Пробегают строчки :

Nov 18 21:52:06 Rostov kernel: [ 5268.564551] usb 1-9: new high speed USB device using ehci_hcd and address 5
Nov 18 21:52:06 Rostov kernel: [ 5268.707151] usb 1-9: configuration #1 chosen from 1 choice
Nov 18 21:52:06 Rostov kernel: [ 5268.710413] scsi7 : SCSI emulation for USB Mass Storage devices
Nov 18 21:52:11 Rostov kernel: [ 5273.709807] scsi 7:0:0:0: Direct-Access     Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 0 C
Nov 18 21:52:11 Rostov kernel: [ 5273.710031] sd 7:0:0:0: Attached scsi generic sg3 type 0
Nov 18 21:52:14 Rostov kernel: [ 5276.945898] sd 7:0:0:0: [sdd] 15646720 512-byte hardware sectors: (8.01 GB/7.46 GiB)
Nov 18 21:52:14 Rostov kernel: [ 5276.946536] sd 7:0:0:0: [sdd] Write Protect is off
Nov 18 21:52:14 Rostov kernel: [ 5276.946541] sd 7:0:0:0: [sdd] Assuming drive cache: write through
Nov 18 21:52:14 Rostov kernel: [ 5276.958800] sd 7:0:0:0: [sdd] Assuming drive cache: write through
Nov 18 21:52:14 Rostov kernel: [ 5276.958809]  sdd: sdd1
Nov 18 21:52:14 Rostov kernel: [ 5276.959590] sd 7:0:0:0: [sdd] Attached SCSI removable disk

Работа с fdisk

Из этого лога, мы сразу видим, что флешка у нас обнаружена, как  на /dev/sdd. Для более подробной информации о ней, мы выполняем команду fdisk -l /dev/sdd

Допустим, мы увидим :

[root]# fdisk -l /dev/sdd
Диск /dev/sdd: 8011 МБ, 8011120640 байт
255 heads, 63 sectors/track, 973 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00001d1d
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1   *           1         973     7815591    7  HPFS/NTFS

Т.е на флешке есть NTFS раздел. К сожалению, syslinux пока не поддерживает ntfs разделы. Бедим считать, что на флешке нет информации (если есть, то конечно сохраняем её где-то отдельно).

Удаляем раздел и создаём новый с помощью команды fdisk.

fdisk /dev/sdd
Команда (m для справки): m

Выведем список команд fdisk - нажмём букву m
Действие команды
   a   переключение флага загрузки
   b   редактирование метки диска bsd
   c   переключение флага dos-совместимости
   d   удаление раздела
   l   список известных типов файловых систем
   m   вывод этого меню
   n   добавление нового раздела
   o   создание новой пустой таблицы разделов DOS
   p   вывод таблицы разделов
   q   выход без сохранения изменений
   s   создание новой чистой метки диска Sun
   t   изменение id системы раздела
   u   изменение единиц измерения экрана/содержимого
   v   проверка таблицы разделов
   w   запись таблицы разделов на диск и выход
   x   дополнительная функциональность (только для экспертов)
Команда (m для справки):                  
Выведем список разделов флешки - нажмём букву p
Команда (m для справки): p
Диск /dev/sdd: 8011 МБ, 8011120640 байт
255 heads, 63 sectors/track, 973 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00001d1d
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1   *           1         973     7815591    7  HPFS/NTFS
Нажмём d:

Команда (m для справки): d
Выбранный раздел 1

Теперь, если нажать p, мы увидем, что разделов на флешке не осталось 
Команда (m для справки):   p
Диск /dev/sdd: 8011 МБ, 8011120640 байт
255 heads, 63 sectors/track, 973 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00001d1d
Создаём  раздел :
Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)

Выбираем основной - нажимаем p

Номер раздела (1-4): 1
Первый цилиндр (1-973, по умолчанию 1):
Используется значение по умолчанию 1
Last цилиндр, +цилиндры or +size{K,M,G} (1-973, по умолчанию 973):
Используется значение по умолчанию 973

Теперь изменяем идентификатор (id) раздела

Команда (m для справки):   t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов):  
Если сейчас ввести букву L, то можно получить список всех возможных типов разделов, в том числе интересующих нас:
 1  FAT12  
 4  FAT16 <32M 
 6  FAT16     
 b  W95 FAT32 
 c  W95 FAT32 (LBA)  
 e  W95 FAT16 (LBA)
 Подробнее о разновидностях  разделов fat смотри  [здесь]
Выбираем тип раздела -с (W95 FAT32)
Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): c
Системный тип раздела 1 изменен на c (W95 FAT32 (LBA))

Теперь осталось выполнить все сделанные нами операции - нажать букву w (или выйти не сделав ничего - нажать букву q, как я сейчас и сделаю, т.к. не хочу ничего стирать со своей флешки :) )

Форматирование раздела

Убедитесь, что у вас есть mkfs.vfat: # apt-get install /sbin/mkfs.vfat

После этого осталось отформатировать раздел под vfat командой:

  • # mkfs.vfat /dev/sdd1

Кстати это не единственный вариант форматирования раздела fat. Можно, например использовать mkdosfs.

Ну а дальше наполняем флешку необходимым нам содержимым (которое можно например взять из имеющегося в наличии установочного или LiveCD) и выполнить команду syslinux -d /syslinux /dev/sdd1 или просто syslinux /dev/sdd1 (если все параметры идут по-умолчанию). Ключ d указывает, что файлы настройки лежат в нестандартном поддиректории.

Использование команды mkbootflash

Для облегчения создания установочных и загрузочных флешек в ALT Linux существует скрипт mkbootflash. Этот скрипт, в двух словах, делает следующие операции :

  1. копирует с DVD или установочного CD образы, необходимые для для работы флешки.
  2. вызывает команду syslinux c нужными параметрами.
  3. при необходимости создаёт образ, который монтируется как /home и в котором пользователь может хранить свои данные.

Т.е эти данные будут видны, если загрузились именно с флешки, а так они лежат внутри файла-образа.

Разберём его опции поподробнее. mkbootflash --help выдаёт вид этой команды :

mkbootflash [options] <path-to-device>
  • mkbootflash - это сама команда;
  • [option] - опции команды (квадратные скобки подсказывают, что опции не обязательны);
  • <path-to-device> - путь до устройства

т.е. для флешки, видимой как /dev/sdd1, команда в простейшем случае будет выглядеть так:

mkbootflash /dev/sdd1

Теперь разберём опции этой команды:

  • -i, --install - создание флешки с установочном образом
  • -r, --rescue - создание флешки с образом восстановления системы
  • -l, --live - создание флешки с live образом, т.е. создание liveflash
  • -m, --memtest - помещение на флешку теста памяти
  • -M, --MBR - запись загрузочной информации в MBR флешки
  • -s, --size - размер создаваемого раздела /home в блоках (по 512 байт)
  • -f, --force - принудительное создание образа /home
  • -b, --boot-only - создание только загрузочной записи (без копирования)
  • -p, --path - путь до дирентории, или точки монтирования, где лежат файлы из образа CD (по-умолчанию - /media/cdrom)
  • -v, --verbose - выдача подробной информации, что сейчас делает скрипт
  • -V, --version - выдача версии скрипта
  • -h, --help - выдача справки.

Таким образом, если у нас есть LiveCD, то мы можем создать из него LiveFlash c разделом /home в 200 Mb командой (для флешки /dev/sdd)

mkbootflash  -l -s 400000  /dev/sdd1

А установочную с образом rescue командой

mkbootflash  -ir  /dev/sdd1

Необходимо отметить, что если на имеющимся CD/DVD нет, например, образа rescue, то скрипт не создаст его и выдаст ошибку. Т.е. скрипт умеет только копировать имеющиеся образы.

Центр управления

На основе скрипта mkbootflash для центра управления был создан бакенд, который выполняет аналогичные функции.

Ссылка по теме

Вот хорошее руководство, дополняющая данную статью: