Я пытаюсь создать файл с минимально достаточным размером для файловой системы FAT32, которая, в свою очередь, отражает содержимое каталога (структура ESP). Это необходимо для создания загрузочного образа UEFI ISO.

Мне удалось создать файл успешно (загружается ISO-образ), но мне пришлось создать его с фиксированным размером, а не с реальным размером его содержимого.

Вот что я сделал, чтобы добиться этого:

BOOT_IMG_DATA=$(mktemp -d)
BOOT_IMG=$ISO_DIR/boot/efi.img

mkdir -p $(dirname $BOOT_IMG)

truncate -s 4M $BOOT_IMG
mkfs.vfat $BOOT_IMG
mount $BOOT_IMG $BOOT_IMG_DATA
mkdir -p $BOOT_IMG_DATA/efi/boot

grub-mkimage \
    -C xz \
    -O x86_64-efi \
    -p /boot/grub \
    -o $BOOT_IMG_DATA/efi/boot/bootx64.efi \
    boot linux search normal configfile \
    part_gpt btrfs fat iso9660 loopback \
    test keystatus gfxmenu regexp probe \
    efi_gop efi_uga all_video gfxterm font \
    echo read ls cat png jpeg halt reboot

umount $BOOT_IMG_DATA

Этот код является частью сценария, который генерирует загрузочный UEFI-образ ISO. Весь сценарий находится здесь: https://github.com/Nitrux/mkiso/blob/master/mkiso#L79-L100.

Мне нужен способ создать файл, который будет содержать структуру ESP с точным размером для хранения как данных ESP (каталогов и файлов), так и метадады FAT32. Как мне этого добиться?

1 ответ1

0

Правильный инструмент для этой задачи - du .

mkfs.vfat -C $BOOT_IMG \
    $(( ($(du -b $BOOT_IMG_DATA | tail -n 1 | awk '{ print $1 }') / 1024 + 511) / 1024 ))

Эта команда создаст файл $BOOT_IMG , размер которого будет достаточен для хранения содержимого $BOOT_IMG_DATA .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .