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, как я сейчас и сделаю, т.к. не хочу ничего стирать со своей флешки :) )

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

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

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

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

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

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

- копирует с DVD или установочного CD образы, необходимые для для работы флешки.
- вызывает команду syslinux c нужными параметрами.
- при необходимости создаёт образ, который монтируется как /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, то скрипт не создаст его и выдаст ошибку. Т.е. скрипт умеет создавать только пустой образ /home и копировать имеющиеся образы.

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

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