Создание раздела
Чтобы создать таблицу разделов, вы можете использовать обычные инструменты непосредственно в файле, а не на устройстве. Большинство стандартных инструментов должны поддерживать это использование, например, fdisk
и parted
. parted
отлично подходит для интеграции в скрипт, так как он может принимать команды в качестве аргумента.
parted -s testing.img mklabel gpt
parted -s -a none testing.img mkpart ESP fat32 0 4M
parted -s -a none testing.img mkpart linux ext4 4M 10M
Создание файловой системы
У меня нет чистого решения для монтирования или создания файловой системы в виртуальном разделе. Правильнее всего было бы иметь драйвер fuse
(Файловая система в Userspace) для таблиц разделов. Но я не нашел ни одного в данный момент.
Однако mke2fs
может использовать опцию -E offset=1234
для построения файловой системы ext2
, ext3
или ext4
с произвольным смещением в файле. Вы можете дать ему смещение вашего раздела. Однако не забудьте также указать ему размер файловой системы, поскольку поведение по умолчанию выглядит некорректно, и по умолчанию записывайте файловую систему с размером виртуального диска, расширяя файл при необходимости.
mke2fs -E offset=4000256 testing.img 6316k
К сожалению, не у всех mkfs
есть такая опция. mkfs.vfat
нет. Таким образом, другое решение может состоять в том, чтобы создать отдельный файл размером с раздел, использовать на нем mkfs
а затем использовать dd
для копирования содержимого на полный виртуальный диск.
dd if=testing.img of=testing.fat32.img bs=512 skip=34 count=7779
mkfs -t vfat testing.fat32.img
dd if=testing.fat32.img of=testing.img bs=512 seek=34 count=7779 conv=notrunc
Не самое чистое и быстрое решение, но оно работает, оно довольно универсально и не требует привилегий root. Опция преобразования sparse
также может быть использована, чтобы немного ускорить процесс, не записывая длинные последовательности нулей.
Монтирование файловых систем
Вы можете смонтировать файловую систему в разделе с помощью fuse
если он поддерживает вашу файловую систему. Существует стандартная поддержка файловых систем ext
под именем fuse-ext2
и одна для FAT
под названием fusefat
. К сожалению, в данный момент они не принимают offset
. Так что я думаю, что вы обязаны либо использовать mount
либо использовать тот же трюк с dd
что и раньше.
Стандартный метод с partx
или kpartx
(или опцией -o offset
для mount
) требует привилегий root. Решение dd
медленное, сложное и с ошибкой.