Создание образа диска и копирование в него файлов

Создание образа диска и копирование в него файлов

Прежде чем задать вопрос здесь, я пытался искать на SU/SE и в Google, но безуспешно.Это самое близкое, что я нашел.

В общем, я пытаюсь сделать следующее:
- создать образ диска размером около 128 МБ;
- создать GPT;
- создать раздел FAT32 в первых 32 МБ (назову его UEFI);
- создать раздел FAT32 в оставшихся байтах (назову его SYSTEM);
- создать следующий подкаталог в разделе UEFI: /EFI/BOOT/;
- скопировать файл в подкаталог;
- скопировать другой файл в раздел SYSTEM.


Вот что я делал до сих пор:

dd if=/dev/zero of=disk.img bs=1M count=128

parted disk.img
(parted) mktable gpt
(parted) mkpart primary fat32 2048 с 65535 с
(parted) mkpart primary fat32 65536 с 100%
(parted) align-check optimize 1
(parted) align-check optimize 2
(parted) имя 1 UEFI
(parted) имя 2 СИСТЕМА

Вот мой вывод:

Диск disk.img: 134 МБ  
Размер сектора (логический/физический): 512Б/512Б  
Таблица разделов: gpt  
Флаги диска:  

Номер Начало Конец Размер Файловая система Имя Флаги  
 1 1049 КБ 33,6 МБ 32,5 МБ UEFI msftdata
 2 33,6 МБ 134 МБ 101 МБ СИСТЕМА msftdata



Альтернативный способ — создать два разных раздела и затем объединить их:

dd if=/dev/zero of=uefi.img bs=1M count=32
mformat -i uefi.img -v UEFI -f 1440 -c 1 ::
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT
dd if=/dev/zero of=system.img bs=1M count=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



В первом случае я не могу понять, почему столбец "Файловая система" пуст (должно быть fat32) и как создать подкаталоги и скопировать файлы.
Во втором случае я не могу создать правильную файловую систему FAT32 для двух образов, если я добавляю -F к mformat, я получаю

Слишком мало кластеров для этого размера fat. Выберите 16-битный fat в файле /etc/mtoolsrc или .mtoolsrc

Если бы мне это удалось, я бы все равно не знал, как настроить GPT и объединить два изображения в один файл.

Как мне этого добиться? Любая помощь или подсказка будет оценена по достоинству.

решение1

После пары часов мучений я решил ее сам. На всякий случай выложу решение здесь:

# Создает пустой образ диска размером 256 МБ, создает его GPT, а затем делает
# два раздела: первый размером около 60 МБ, второй заполняет
# оставшиеся байты. Оба раздела выровнены.
dd if=/dev/zero of=disk.img bs=1M count=256
разделил disk.img
mktable gpt
mkpart первичный fat32 2048s 131071s
mkpart первичный fat32 131072s 100%
выравнивание-проверка оптимальное 1
выравнивание-проверка оптимальное 2
имя 1 UEFI
имя 2 СИСТЕМА
покидать

# Создает пустой образ диска размером 33 МБ.
dd if=/dev/zero of=uefi.img bs=1M count=33
# Форматирует образ диска как FAT32
mkfs.vfat uefi.img -F 32
# Создает запрошенные подкаталоги.
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# Копирует загрузочный файл.
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# Создает пустой образ диска размером 100 МБ.
dd if=/dev/zero of=system.img bs=1M count=100
# Форматирует образ диска как FAT32
mkfs.vfat system.img -F 32
# Копирует файл ОС.
mcopy -i system.img СИСТЕМА.EFI ::

# Включаем модуль ядра, запрошенный kpartx, на всякий случай.
sudo modprobe dm-mod
# Отображает и монтирует два раздела в disk.img в /dev/mapper/loop0p1 и
# /dev/mapper/loop0p2
sudo kpartx -av disk.img
# Копирует раздел UEFI в образ диска.
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# Копирует раздел SYSTEM в образ диска.
sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M
# Размонтирует два раздела
sudo kpartx -dv disk.img

Связанный контент