Modifique um arquivo grande e, em seguida, seja capaz de reverter as alterações fazendo-o (quase) no local

1

Estou recuperando dados de uma unidade de disco de 500 GB danificada. Estou copiando dados (partição ext4) para um arquivo de imagem de 500GB. O processo está levando cerca de 3 meses de cópias no total (sim, meses). Então, estou usando dd para preencher o arquivo de imagem com paciência. Primeiro eu passo um pedaço para um arquivo temporário, depois coloco o pedaço no arquivo de backup e então ...

O problema é que eu quero acessar a imagem parcialmente preenchida e recuperar alguns dados antes que o processo de backup termine. Eu montei apenas para leitura e usei photorec e testdisk e tudo bem. Mas eu também quero tentar fsck para (tentar) reparar a partição. Depois de espreitar os dados, gostaria de reverter as alterações do fsck e retomar a cópia.

Eu sei que ferramentas como rsync , rdiff e git derivates ( bup , git-annex ...) podem ajudar. mas eu me pergunto se existe uma maneira de fazer isso no local . Não tomar mais 500Gb de dados originais indexados.

Eu não quero recursos de versionamento. Eu não quero um backup do meu arquivo. O fluxo de trabalho seria algo como:

  1. eu tenho original_500GB_file.img - > 500 GB de dados
  2. eu modifico 2GB do arquivo. Diga agora que tenho modified_500GB_file.img e outros arquivos auxiliares - > menos de 600 GB de dados (500 originais + 2 modificados + alguns metadados)
  3. Quando estou feliz fazendo alterações, retrocedo e chegue ao ponto 1 novamente.

Como pode conseguir isso? Seria possível com recursos de snapshot BTRFS? (infelizmente eu tenho o arquivo em uma partição NTFS)

Obrigado.

    
por Dertalai 11.04.2015 / 12:00

2 respostas

2

Eu encontrei uma solução boa e fácil para o meu problema. O último parágrafo de Slizzered sobre máquinas virtuais me deu uma dica. Você pode usar o software qemu sem precisar carregar uma máquina virtual. Eu encontrei as informações relevantes aqui e aqui .

Primeiro você tem que criar uma cópia no arquivo de gravação (COW) da sua imagem. Isso usará seu original_500GB_file.img como sua base. O arquivo grande não será editado porque é usado como somente leitura. O COW é de tamanho mínimo e só crescerá quando mudanças forem feitas. Apenas o que eu precisava:

$ qemu-img create -f qcow2 -b original_500GB_file.img disposable.qcow2

Formatting 'disposable.qcow2', fmt=qcow2 size=498000000000 backing_file='original_500GB_file.img' encryption=off cluster_size=65536 lazy_refcounts=off

$ ls -l disposable.qcow2

-rw-r--r-- 1 dertalai users 204288 abr 15 20:01 disposable.qcow2

Agora, basta virtualizar o par original_read-only + cow_writable em um único dispositivo de bloco utilizável:

# modprobe nbd

# qemu-nbd -c /dev/nbd0 disposable.qcow2

/dev/nbd0 está pronto para uso. Você pode fsck ou até montá-lo e fazer o que precisar. Quando você terminar e quiser reverter as alterações, basta liberar o dispositivo de bloco de qualquer processo que o esteja usando e excluir o arquivo COW, se desejar:

# qemu-nbd -d /dev/nbd0

# rmmod nbd

$ rm disposable.qcow2

    
por 15.04.2015 / 21:11
2

A maneira mais fácil seria usar o BTRFS ou o ZFS e seus recursos de snapshot, sim. Eu não trabalhei muito com o BTRFS (apenas o ZFS agora), mas a reversão não deve ser um problema.

(Eu vou escrever baseado no ZFS, mas ele deve funcionar de forma similar para o BTRFS)

Antes de iniciar o processo de recuperação, você faz um "instantâneo" do seu sistema de arquivos atual que contém a imagem de 500 GB.

Então você pode copiar todos os dados que você obteve durante a recuperação para algum outro local (não dentro do mesmo sistema de arquivos, caso contrário eles serão destruídos durante a reversão!). Apenas as alterações na imagem de 500 GB ocuparão espaço. Então, se você alterar apenas 50GB, você precisaria de um total de ~ 550GB dentro do sistema de arquivos.

Se você tiver concluído essa recuperação parcial, poderá fazer uma "reversão" e redefinir o sistema de arquivos para o estado em que estava quando fez o "instantâneo".

Note que o mecanismo de snapshot / rollback sempre funciona para um sistema de arquivos completo, não apenas arquivos únicos.

Editar:

Acho que algumas versões do NTFS também têm algo como um recurso de instantâneo. O Windows 7 deve permitir que você jogue com isso, mas como eu ouvi que ele foi removido no Windows 8 .... se você clicar com o botão direito em um arquivo (a imagem de 500GB), deve haver alguma opção dizendo "versões anteriores deste arquivo ".

Outra opção bastante complicada: configurar uma máquina virtual, coloque o arquivo de 500GB lá. O software da máquina virtual (como VMware, Virtualbox, VirtualPC) também permite tirar instantâneos (de toda a imagem do sistema operacional, incluindo seus 500 GB) e revertê-los. Mas isso exigiria que você instalasse outro sistema operacional dentro de uma máquina virtual e tudo isso ...

    
por 11.04.2015 / 12:25