Como você pode substituir um arquivo em um dispositivo bruto que preserva a integridade do sistema de arquivos?

0

Digamos que eu tenha um sistema Linux e queira gravar em um dispositivo bruto. Mas quero substituir um determinado arquivo neste dispositivo por uma nova versão. Isso pode ser feito? Eu acho que com o dd você poderia escrever o novo arquivo a partir do offset da versão antiga. Eu acho que se o novo arquivo tem o mesmo tamanho ou menor que o antigo tudo deve ficar bem. Mas o que aconteceria se o novo arquivo fosse maior, mas o disco em si não estivesse cheio? Sobrescreveria outros arquivos e corromperia o sistema de arquivos? Se sim, você pode evitar isso? Você pode substituir arquivos em sistemas de arquivos compactados como o btrfs também?

    
por hid01 11.08.2018 / 16:17

1 resposta

2

Você precisa montar o sistema de arquivos. Não existe algo como “o deslocamento da versão antiga”: os arquivos podem ser fragmentados . Para modificar os dados, você precisaria encontrar os deslocamentos e tamanhos de todos os fragmentos. Seria ainda pior se a nova versão tivesse um tamanho diferente: você precisaria descobrir onde há algum espaço livre para os dados extras, e você precisaria atualizar as estruturas de dados do diretório para indicar onde os novos blocos são .

Você pode encontrar algum código para fazer isso em depuradores de sistema de arquivos, mas eles são difíceis de usar de forma confiável e geralmente não suportam escrever muito. O único código confiável e fácil de usar para modificar dados em um sistema de arquivos é o driver do sistema de arquivos, que você acessa montando o sistema de arquivos.

Alguns sistemas de arquivos (por exemplo, um recurso opcional de zfs e btrfs) têm até dados de integridade de arquivos - eles mantêm somas de verificação de arquivos ou blocos para detectar a corrupção de dados. Com esses sistemas de arquivos, se você alterar o conteúdo de um bloco de dados em um arquivo sem alterar os dados de integridade correspondentes, não poderá lê-lo, pois o arquivo estará corrompido.

Existem alguns casos em que é possível ignorar o driver para sobrescrever os dados de um arquivo sem alterar o tamanho do arquivo, por exemplo, com alguns sistemas de arquivos projetados para serem somente de leitura (isto é, você prepara o sistema de arquivos e escreve para alguma memória flash e não atualizá-lo). Se os dados forem compactados, só será viável se o tamanho compactado permanecer o mesmo, é claro. Mas de um modo geral, a montagem é o único caminho.

    
por 11.08.2018 / 16:41