§ Структура

В прошлой статье я думал, что буду загружать с FAT32, но оказывается, можно еще загружать не только с FAT32, но и с FAT16 на всякий случай, поэтому надо бы предусмотреть и этот вариант.
Расскажу вкратце про то, как устроено тут все. Структура диска состоит из следующих разделов:
  • MBR - первый сектор. Содержит информацию о 4 разделах на диске, каждый раздел описывается 16-байтной записью. Всего на это тратится 64 байта. Полезной кодовой нагрузки в MBR лишь только 446 байт, так что это надо учесть.
  • Обычно идет пустое пространство после MBR размером 1 мегабайт. Думаю, оно нужно для различного рода загрузчиков.
  • Далее идет бутсектор с FAT, где есть запись BPB (bios parameter block), в котором описывается информация о структуре раздела, размер диска, кластера и прочие параметры
  • После бутсектора может либо идти пустое пространство (reserved block), либо сразу же таблицы с FAT как раз. Эти таблицы обычно 2 и они описывают то, как нужно собирать файлы по кластерам
  • Далее идут сами кластеры. Кластер - это единица данных, равная от 1 до N секторов. Размер кластера задается в таблице с параметрами FAT в первом секторе (не MBR!)

§ Создание диска

Здесь я вкратце повторю то, что было уже написано ранее
  • Первым делом, надо создать диск c.img размером 256Мб: dd if=/dev/zero of=c.img bs=1024 count=262144
  • Далее включить fdisk c.img
  • Сделать следующее:
1) n - новый диск,
2) p - primary;
3) 1 - номер раздела;
4) 2048 - количество резервированных секторов;
5) Размер диска - просто нажать enter, по умолчанию разметится весь диск;
6) t - сменить тип диска и ввести 0B;
7) w - записать новую структуру разделов
  • И теперь надо создать fs и подмонтировать диск:
1sudo losetup -o 1048576 /dev/loopX c.img
2sudo mkfs.fat -F32 /dev/loopX
3sudo losetup -d /dev/loopX
4mkdir disk
5sudo mount c.img -t vfat -o loop,rw,uid="`whoami`",sync,offset=$[1048576] disk/
Отмечено то, что надо сделать из под рута. Вместо loopX надо написать номер свободного девайса (проверить в df -h).
Скачать сжатый образ диска (дважды, чтобы компрессия была лучше).