Manipulação do espaço do usuário de imagens de partição e disco

4

Em um sistema Linux, é possível usar apenas ferramentas de espaço de usuário para criar e manipular imagens de partição (que provavelmente só possuem sistemas de arquivos ext2) e então pegar essas imagens de partição para criar uma imagem de disco?

Eu posso usar genext2fs para gerar uma imagem de um sistema de arquivos ext2 no userspace, mas não consigo encontrar nenhuma ferramenta que possa manipular imagens de disco (por exemplo, criar tabelas de partição ou criar uma imagem de disco a partir de imagens de partição existentes etc.) sem a necessidade de acesso root. Atualmente, estou usando kpartx para montar as partições dentro de uma imagem de disco, mas como isso requer raiz, não é realmente adequado para o script, e se houver um erro no script de compilação que não esteja preso, os dispositivos mapeadores permanecem em uso.

Basicamente, eu tenho três diretórios, e eu quero que cada diretório se torne uma partição em uma imagem de disco, mas eu quero rotear isso e eu realmente não quero usar nenhuma ferramenta que exija acesso root (parece que existe nada neste processo que absolutamente precisa ter acesso root).

    
por dreamlax 03.04.2014 / 04:02

1 resposta

4

Criação de partições

Para criar uma tabela de partições, você pode usar suas ferramentas comuns diretamente no arquivo em vez do dispositivo. A maioria das ferramentas padrão deve suportar esse uso, como fdisk e parted . parted é ótimo para ser integrado em um script, pois pode usar os comandos como argumento.

parted -s testing.img mklabel gpt
parted -s -a none testing.img mkpart ESP fat32 0 4M
parted -s -a none testing.img mkpart linux ext4 4M 10M

Criação do sistema de arquivos

Eu não tenho uma solução limpa para montar ou criar um sistema de arquivos em uma partição virtual. A coisa certa a fazer provavelmente seria ter um driver fuse (Filesystem in Userspace) para tabelas de partição. Mas eu não encontrei um no momento.

No entanto, mke2fs pode usar a opção -E offset=1234 para criar um sistema de arquivos ext2 , ext3 ou ext4 em um deslocamento arbitrário dentro do arquivo. Você pode dar o deslocamento de sua partição. No entanto, lembre-se de fornecer também o tamanho do sistema de arquivos, pois o comportamento padrão parece estar com defeito e, por padrão, gravar um sistema de arquivos com o tamanho do disco virtual, estendendo o arquivo, se necessário.

mke2fs -E offset=4000256 testing.img 6316k

Infelizmente, nem todos os mkfs têm essa opção. mkfs.vfat não. Portanto, outra solução pode ser criar um arquivo separado do tamanho da partição, usar mkfs e, em seguida, usar dd para copiar o conteúdo para o disco virtual completo.

dd if=testing.img of=testing.fat32.img bs=512 skip=34 count=7779
mkfs -t vfat testing.fat32.img
dd if=testing.fat32.img of=testing.img bs=512 seek=34 count=7779 conv=notrunc

Não é a solução mais limpa ou mais rápida, mas funciona, é bastante genérica e não requer privilégios de root. A opção de conversão sparse também pode ser usada para acelerar um pouco as coisas, não escrevendo sequências longas de zeros.

Montando sistemas de arquivos

Você pode montar um sistema de arquivos em uma partição com a ajuda de fuse , desde que ele tenha suporte para o seu sistema de arquivos. Há um suporte padrão para sistemas de arquivos ext sob o nome fuse-ext2 e um para FAT com o nome fusefat . Eles infelizmente não aceitam uma opção offset no momento. Então, eu acho que você é obrigado a usar mount ou o mesmo truque de dd como antes.

O método padrão com partx ou kpartx , (ou a opção -o offset de mount ) requer privilégios de root. A solução dd é lenta, complexa e pronta para erros.

    
por 01.11.2015 / 10:45