§ Структура
В прошлой статье я думал, что буду загружать с 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
).Скачать сжатый образ диска (дважды, чтобы компрессия была лучше).