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: опишите, как решить следующие проблемы:
- создание sudo принадлежащих файлов в образе. Сборочного окружения сделать его.
- автоматически высчитывает минимальный необходимый размер. Начальная оценка с
du
размер файла и find . | wc
для структуры каталогов, мин, что с 32 Мб (меньшие неудачи), а затем дважды, пока команда не работает, вероятно, очень достойный подход. Buildroot привык это делать, но почему-то остановился, но легко реализовать самим.
- удобно извлечь все файлы из раздел:
несколько разделов в одном файле образа
посмотреть этот: https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819