В прошлой статье я думал, что буду загружать с FAT32, но оказывается, можно еще загружать не только с FAT32, но и с FAT16 на всякий случай, поэтому надо бы предусмотреть и этот вариант.
Расскажу вкратце про то, как устроено тут все. Структура диска состоит из следующих разделов:
MBR – первый сектор. Содержит информацию о 4 разделах на диске, каждый раздел описывается 16-байтной записью. Всего на это тратится 64 байта. Полезной кодовой нагрузки в MBR лишь только 446 байт, так что это надо учесть.
Обычно идет пустое пространство после MBR размером 1 мегабайт. Думаю, оно нужно для различного рода загрузчиков.
Далее идет бутсектор с FAT, где есть запись BPB https://ru.wikipedia.org/wiki/Блок_параметров_BIOS 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 и подмонтировать диск:
sudo losetup -o 1048576 /dev/loopX c.img
sudo mkfs.fat -F32 /dev/loopX
sudo losetup -d /dev/loopX
mkdir disk
sudo mount c.img -t vfat -o loop,rw,uid="`whoami`",sync,offset=$[1048576] disk/
Отмечено то, что надо сделать из под рута. Вместо loopX надо написать номер свободного девайса (проверить в df -h).