4

В системе Linux, возможно ли использовать только инструменты пользовательского пространства для создания и управления образами разделов (на которых, вероятно, будут только файловые системы ext2), а затем использовать эти образы разделов для создания образа дисков?

Я могу использовать genext2fs для создания образа файловой системы ext2 в пользовательском пространстве, но я не могу найти какой-либо инструмент, который может манипулировать образами дисков (например, создавать таблицы разделов или создавать образ диска из существующих образов разделов и т.д.) Без необходимости root доступ. В настоящее время я использую kpartx для монтирования разделов в образе диска, но поскольку для этого требуется root, это не делает его подходящим для скриптинга, и если в скрипте сборки есть ошибка, которая не перехватывается, mapper устройства остаются в использовании.

По сути, у меня есть три каталога, и я хочу, чтобы каждый каталог стал разделом на образе диска, но я хочу написать этот сценарий, и я действительно не хочу использовать какие-либо инструменты, требующие доступа с правами root (кажется, что в этом нет ничего процесс, который абсолютно должен иметь root-доступ).

1 ответ1

4

Создание раздела

Чтобы создать таблицу разделов, вы можете использовать обычные инструменты непосредственно в файле, а не на устройстве. Большинство стандартных инструментов должны поддерживать это использование, например, 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 медленное, сложное и с ошибкой.

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