Como identificar partes relevantes de uma partição ext4

1

Background: Eu preciso clonar partições ext4 de um eMMC usando o uboot (e se necessário o código bare metal customizado). Copiei a coisa toda usando mmc read e descobri que a maior parte da partição está vazia, mas há alguns blocos de dados como tabelas de inode espalhados pela partição. Isso significaria que eu preciso copiar a partição inteira (que é muito lenta, preciso fazer muito isso) ou identificar quais partes da partição são relevantes.

Perguntas e respostas mais semelhantes a esse problema sugerem usar dd criando uma imagem esparsa ou canalizando para gzip , mas não tenho nenhum sistema operacional em execução, portanto, preciso entender o layout do sistema de arquivos. Posso usar esses blocos de bitmap para identificar o que é usado e o que é gratuito? A documentação do ext4 parece referir-se ao código do kernel do Linux assim que se trata de detalhes.

De preferência eu faria com o código do uboot, mas eu poderia também escrever algum código bare metal que eu pudesse executar a partir do uboot.

Mais uma condição de borda: os alvos para onde a partição é clonada não estão vazios, portanto, se houver blocos de apenas zeros na origem, que precisam ser zero, eu preciso sobrescrever esses blocos com zeros no destino .

    
por Philippos 06.02.2018 / 08:45

2 respostas

0

Se você não puder montar o sistema de arquivos original em seu ambiente, poderá usar debugfs para examinar o layout do sistema de arquivos e copy dos arquivos para o seu destino. Com um pouco de trabalho, você poderia fazer o script debugfs listar, atravessar, copiar o sistema de arquivos original para um local temporário, usar mke2fs -d para gravá-lo no novo sistema de arquivos ou copiá-lo diretamente para o local de destino.

Se você estiver disposto a escrever seu próprio código, você pode usar libext2fs para abrir o sistema de arquivos, ler a árvore de diretórios e copiar recursivamente para o sistema de arquivos de destino (que também pode ser aberto usando libext2fs). Isso seria muito mais fácil do que escrever qualquer um dos seus próprios códigos para manipular o formato ext4 em disco.

Se a barreira para acessar o dispositivo eMMC como um dispositivo de bloco em seu ambiente (desculpe, eu não sei nada sobre isso, apenas o lado ext4), então você poderia escrever um driver IO personalizado para libext2fs (como lib/ext2fs/unix_io.c ou .../nt_io.c ) que pode ler / gravar dispositivos eMMC diretamente, em seguida, use scripts debugfs + ou uma ferramenta de cópia personalizada libext2fs.

    
por 06.04.2018 / 10:47
0

Use e2image -ar para copiar as partes relevantes do sistema de arquivos. Ele entende o sistema de arquivos e copia todos os metadados e blocos de dados usados pelos arquivos, ignorando o espaço não utilizado.

    
por 06.04.2018 / 14:52