среда, 24 сентября 2014 г.

Создание образа загрузочного USB-flash (USB-HDD и USB-ZIP) без использования USB-flash

Наткнулся на интересную статью http://ant0.ru/usb-flash.html


Как создать образ USB-flash (USB-HDD и USB-ZIP) без использование USB-flash. С помощью dd, fdisk, losetup /dev/loop, syslinux и прочих команд coreutils.
Существует несколько вариантов загрузки с USB-flash (USB-HDD, USB-ZIP, USB-FDD и тд).
Здесь рассмотренны два: USB-ZIP и USB-HDD - или тот или другой обязательно поддерживается любой материнской платой для загрузки (если у нее конечно есть USB).

Загрузочный образ USB-HDD

USB-HDD мало чем отличается от обычного HDD, кроме физического подключения.
Образ делается так:
  1. Создаем файл размером на 5-10% меньше от предполагаемого размера диска (для защиты от недобросовестных производителей дисков):
    dd if=/dev/zero of=disk.img  bs=1k count=61k
    ,здесь размер предполагаемого диска равен примерно 64Мбайта
  2. Привязываем /dev/loop0 к данному файлу как есть:
    losetup /dev/loop0 disk.img
  3. Создаем разметку на "диске" (натравливаем fdisk на образ для создания разметки):
    fdisk /dev/loop0 <<EOF
    n
    p
    1
     
     
     
    a
    1
    t
    c
    w
    EOF
    ,здесь тип создаваемой партиции "c" - т.е. Win95 FAT32 (LBA)
  4. Привязываем /dev/loop1 к данному файлу со смещением, в котором должна начинаться партиция:
    losetup -o 16384 /dev/loop0 disk.img
    ,здесь смещение 16384 получено по формуле: смещение = число секторов на дорожке * размер сектора * начальная дорожка раздела (32 * 512 * 1 = 16384). Или можно вычислить опытным путем (обычную флешку забить нулями, создать разметку, на первую партицию натравить yes, посмотреть откуда начинается y.y.y.y. с помощью hexcurse)
  5. Создаем файловую систему vfat на созданной партиции:
    mkfs.vfat -F 32 /dev/loop1
  6. Натравливаем загрузчик syslinux на /dev/loop1:
    syslinux /dev/loop1
  7. Все! Можно монтировать /dev/loop1 и забивать необходимыми файлами!
  8. После всех операций освобождаем занятые loop-ы:
    losetup -d /dev/loop0
    losetup -d /dev/loop1

Полученный образ просто копируется на флешку:
cat disk.img > /dev/FLASH
или:
dd if=disk.img of=/dev/FLASH
,здесь вместо FLASH подставить устройство usb-flash

Загрузочный образ USB-ZIP

USB-ZIP от USB-HDD отличается немного в 3-м пункте:
  1. Создаем разметку на "диске" (натравливаем fdisk на образ для создания разметки):
    fdisk -H64 -S32 /dev/loop0 <<EOF
    n
    p
    4
     
     
     
    a
    4
    t
    c
    w
    EOF
    ,здесь строго необходимо указать количество головок 64 (-H64), количество секторов 32 (-S32) и партиция должна быть одна и 4й.
Больше отличий у USB-ZIP от USB-HDD нет.