Как создать образ ext2 без прав суперпользователя?

1533
Equidamoid

Мне нужно сгенерировать несколько изображений ext2. Очевидный способ сделать это - создать образ, смонтировать его и скопировать содержимое. Но для этого требуются права суперпользователя дважды (чтобы разделить файлы и смонтировать образ). Также я нашел два инструмента для генерации изображений: e2fsimage и genext2fs.

  • Во время генерации genext2fs помещает изображение в оперативную память, но размер одного из моих изображений составляет ~ 30 ГБ.

  • Сбой e2fsimage с некоторыми значениями размера изображения.

Так как я могу генерировать мои изображения? Было бы неплохо, если бы инструмент сам рассчитал размер изображения.

5

3 ответа на вопрос

2
Equidamoid

Figured out why e2fsimage crashes. It is caused by int32 overflow when image size is greater than 4GiB. So the solution is to count required blocks & inodes, create loop file (truncate & mke2fs) and then use e2fsimage with -n argument (so it will not create the loopfile but use already created one)

Вы отправили отчет об ошибке и / или патч для этого? Toby Speight 6 лет назад 1
Я сомневаюсь, что сделал. Сожалею. Equidamoid 6 лет назад 0
1
مصطفی

Creating image does not need root privilege. Here is an example to create an ext2 image:

dd if=/dev/zero of=./MyDisk.ext2 bs=512 count=20480 mkfs.ext2 ./MyDisk.ext2 

but the root privilege is needed to mount the device:

mkdir MyDisk sudo mount ./MyDisk.ext2 MyDisk 
1
Ciro Santilli 新疆改造中心 六四事件 法轮功

mke2fs -d минимальный работоспособный пример без sudo

mke2fsявляется частью пакета e2fsprogs. Он написан известным разработчиком файловой системы ядра Linux Теодором Цо, который работает в Google с 2018 года, а исходный код находится по адресу kernel.org по адресу https://git.kernel.org/pub/scm/fs/ext2. / e2fsprogs Следовательно, этот репозиторий можно считать эталонной пользовательской реализацией операций файловой системы ext:

#!/usr/bin/env bash set -eu  root_dir=root img_file=img.ext2  # Create a test directory to convert to ext2. mkdir -p "$root_dir" echo asdf > "$/qwer"  # Create a 32M ext2 without sudo. # If 32M is not enough for the contents of the directory, # it will fail. rm -f "$img_file" mke2fs \ -L '' \ -N 0 \ -O ^64bit \ -d "$root_dir" \ -m 5 \ -r 1 \ -t ext2 \ "$img_file" \ 32M \ ;  # Test the ext2 by mounting it with sudo. # sudo is only used for testing. mountpoint=mnt mkdir -p "$mountpoint" sudo mount "$img_file" "$mountpoint" sudo ls -l "$mountpoint" sudo cmp "$/qwer" "$/qwer" sudo umount "$mountpoint" 

GitHub вверх по течению .

Ключевой параметр -d, который выбирает, какой каталог использовать для изображения, и это относительно новое дополнение к v1.43 в коммите 0d4deba22e2aa95ad958b44972dc933fd0ebbc59

Поэтому он работает на Ubuntu 18.04 из коробки, которая имеет e2fsprogs 1.44.1-1, но не на Ubuntu 16.04, которая находится на 1.42.13.

Однако мы можем сделать так же, как Buildroot, и скомпилировать его из исходного кода в Ubuntu 16.04 с помощью:

git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git cd e2fsprogs git checkout v1.44.4 ./configure make -j`nproc` ./misc/mke2fs -h 

Если mke2fsне удается с:

__populate_fs: Operation not supported while setting xattrs for "qwer" mke2fs: Operation not supported while populating file system 

когда добавить опцию:

-E no_copy_xattrs 

Это требуется, например, когда корневой каталог находится в NFS или tmpfsвместо extX, поскольку эти файловые системы , похоже, не имеют расширенных свойств .

mke2fsчасто ссылается на mkfs.extX, и man mke2fsговорит, что если вы используете call, если с такой символической ссылкой, то -tподразумевается.

Как я это выяснил и как решить любые будущие проблемы: Buildroot генерирует образы ext2 без sudo, как показано здесь, поэтому я просто запустил сборку V=1и извлек команды из части генерации изображений, которая идет прямо в конце. Старая добрая копия никогда не подводила меня.

TODO: опишите, как решить следующие проблемы:

Несколько разделов в одном файле изображения

Смотрите это: https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819