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 > "${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
говорить, що якщо ви використовуєте дзвінок, якщо з таким символьним посиланням, то -t
мається на увазі.
Як я це з'ясував і як вирішити майбутні проблеми: Buildroot генерує зображення ext2 без sudo, як показано тут , тож я просто запустив збірку V=1
і витяг команд з частини генерації зображень, яка йде в кінці. Стара стара копійна паста ніколи не підводила мене.
TODO: опишіть, як вирішити такі проблеми:
- створити на зображенні файли, що належать sudo. Buildroot це робить.
- автоматично розрахувати мінімально необхідний розмір. Первісна оцінка
du
для розміру файлу та find . | wc
структури каталогів, мінімум, що з 32Mb (менші файли), а потім подвоєна, поки команда не працює, ймовірно, дуже пристойний підхід. Для цього Buildroot звик, але зупинився чомусь, але легко реалізувати себе.
- зручно витягнути всі файли з розділу:
Кілька розділів в одному файлі зображень
Дивіться це: https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819