mke2fs -d
exemplo mínimo de execução sem sudo
mke2fs
faz parte do pacote e2fsprogs. É escrito pelo famoso desenvolvedor do sistema de arquivos do kernel Linux, Theodore Ts'o, que está no Google desde 2018, e o código-fonte está sob o kernel.org em: link Portanto, esse repositório pode ser considerado uma implementação userland de referência das operações do sistema de arquivos 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 upstream .
A opção chave é -d
, que seleciona qual diretório usar para a imagem, e é uma adição relativamente nova à v1.43 em commit 0d4deba22e2aa95ad958b44972dc933fd0ebbc59
Portanto, ele funciona no Ubuntu 18.04, que possui o e2fsprogs 1.44.1-1, mas não o Ubuntu 16.04, que está em 1.42.13.
No entanto, podemos fazer como o Buildroot e compilá-lo a partir do código fonte facilmente no Ubuntu 16.04 com:
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
Se mke2fs
falhar com:
__populate_fs: Operation not supported while setting xattrs for "qwer"
mke2fs: Operation not supported while populating file system
quando adicionar a opção:
-E no_copy_xattrs
Isso é necessário, por exemplo, quando o diretório raiz está em NFS ou tmpfs
em vez de extX como os sistemas de arquivos não parecem ter propriedades estendidas .
O mke2fs
é geralmente vinculado a mkfs.extX
, e man mke2fs
diz que, se você usar a chamada se com esse link simbólico, -t
estará implícito.
Como descobri isso e como resolver problemas futuros: Buildroot gera imagens ext2 sem sudo como mostrado aqui , então Acabei de executar a compilação com V=1
e extraí os comandos da parte de geração de imagens que aparece no final. Boa cópia antiga colar nunca me falhou.
TODO: descreva como resolver os seguintes problemas:
- crie arquivos de propriedade do sudo na imagem. Buildroot faz isso.
- calcula automaticamente o tamanho mínimo necessário. Estimativa inicial com
du
para tamanho de arquivo e find . | wc
para estrutura de diretório, min que com 32Mb (falhas menores), então duplique até que o comando funcione, é provavelmente uma abordagem muito decente. Buildroot costumava fazer isso, mas parou por algum motivo, mas fácil de implementar nós mesmos.
- extraia convenientemente todos os arquivos da partição:
Várias partições em um arquivo de imagem
Veja isto: link