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)
Как создать образ ext2 без прав суперпользователя?
Мне нужно сгенерировать несколько изображений ext2. Очевидный способ сделать это - создать образ, смонтировать его и скопировать содержимое. Но для этого требуются права суперпользователя дважды (чтобы разделить файлы и смонтировать образ). Также я нашел два инструмента для генерации изображений: e2fsimage и genext2fs.
Во время генерации genext2fs помещает изображение в оперативную память, но размер одного из моих изображений составляет ~ 30 ГБ.
Сбой e2fsimage с некоторыми значениями размера изображения.
Так как я могу генерировать мои изображения? Было бы неплохо, если бы инструмент сам рассчитал размер изображения.
3 ответа на вопрос
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
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"
Ключевой параметр -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: опишите, как решить следующие проблемы:
- создавать файлы sudo в образе. Buildroot делает это.
- автоматически рассчитать минимально необходимый размер. Первоначальная оценка с
du
учетом размера файла иfind . | wc
структуры каталогов, минимальная с 32 Мб (меньшие ошибки), затем удвоенная до тех пор, пока команда не сработает, вероятно, является очень приличным подходом. Buildroot делал это раньше, но по какой-то причине остановился, но его легко реализовать самостоятельно. - удобно распаковать все файлы из раздела:
Несколько разделов в одном файле изображения
Похожие вопросы
-
4
Как я могу конвертировать ISO-образ CD в формат bin / cue на Mac?
-
3
Существует ли какое-либо программное обеспечение для создания образа жесткого диска для Windows, кот...
-
5
С какими файловыми системами будет работать Google Chrome OS?
-
-
4
Читать раздел OS X из Windows 7
-
3
Смонтировать ext3fs в Windows
-
3
Стоит ли использовать VFAT или ext3 для внешнего USB-накопителя емкостью 1 ТБ?
-
1
NFS сервер для Windows
-
1
µTorrent упоминает, что у меня недостаточно места, но у меня есть?
-
2
NTFS5 файловая система в Windows XP
-
5
Что случилось с WinFS?