Como criar imagem ext2 sem direitos de superusuário?

5

Eu preciso gerar várias imagens ext2. A maneira óbvia de fazer isso é criar uma imagem, montá-la & copie o conteúdo. Mas requer permissões de root duas vezes (para chover os arquivos e montar a imagem). Também encontrei duas ferramentas para gerar imagens: e2fsimage & genext2fs.

  • genext2fs coloca a imagem na RAM durante a geração, mas o tamanho de uma das minhas imagens é de ~ 30GiB.

  • e2fsimage falha com alguns valores do tamanho da imagem.

Então, como posso gerar minhas imagens? Seria bom se a ferramenta calculasse o tamanho da imagem em si.

    
por Equidamoid 08.06.2013 / 10:49

3 respostas

2

Descobriu porque e2fsimage falha. É causado pelo estouro do int32 quando o tamanho da imagem é maior que 4GiB. Então a solução é contar os blocos necessários & inodes, criar arquivo de loop ( truncate & mke2fs ) e, em seguida, usar e2fsimage com -n argument (assim, ele não criará o loopfile, mas usará um já criado)

    
por 08.06.2013 / 16:21
1

Criar imagem não precisa de privilégios de root. Aqui está um exemplo para criar uma imagem ext2:

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

mas o privilégio de root é necessário para montar o dispositivo:

mkdir MyDisk
sudo mount ./MyDisk.ext2 MyDisk
    
por 29.09.2014 / 08:14
1

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

    
por 15.10.2018 / 00:14