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

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

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

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

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

13
задан Equidamoid
24.12.2022 15:17 Количество просмотров материала 2780
Распечатать страницу

3 ответа

выяснил, почему e2fsimage падает. Это вызвано переполнением int32, когда размер изображения больше 4GiB. Поэтому решение заключается в подсчете необходимых блоков и индексных дескрипторов, создание файла loop (truncate & mke2fs), а затем использовать e2fsimage с -n аргумент (таким образом, он не будет создавать loopfile, но использовать уже созданный)

2
отвечен Equidamoid 2022-12-25 23:05

создание образа не требует привилегий root. Вот пример создания образа ext2:

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

но привилегия root необходима для монтирования устройства:

mkdir MyDisk
sudo mount ./MyDisk.ext2 MyDisk
1
отвечен مصطفی 2022-12-26 01:22

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

mke2fs является частью пакета e2fsprogs. Это написал известный разработчик ядра Linux файловая система Феодора Т. С. это'о, который в Гугле в 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 > "${root_dir}/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 "${mountpoint}/qwer" "${root_dir}/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 if с такой символической ссылкой, то -t это подразумеваемый.

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

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

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

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

1
отвечен Ciro Santilli 新疆改造中心 六四事件 法轮功 2022-12-26 03:39

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх