Como retomar com segurança e confiabilidade o processo de cópia de arquivo $A
no local de backup $B
feito com pv "$A" > "$B"
ou cat "$A" > "$B"
?
(vamos supor que o arquivo $A
seja muito grande, por exemplo, arquivo de instantâneo LVM2)
Isso é possível dd
?
Preffered: soluções bash ou python (de preferência python3).
Cenário de exemplo: pv "$A" > "$B"
interrompido após copiar 90%. Como retomar, para concluir o processo de cópia, mas sem repetir todo o trabalho?
Respostas:
Sim, você pode usar o dd para pular os blocos.
Os parâmetros importantes aqui são
skip
bem comoseek
:skip
: ignore os blocos do tamanho de blocos ibs no início da entradaseek
: ignore os blocos obsoletos de BLOCOS no início da saídafonte
Você quer
rsync
:fonte
--append
.--append
mudou desde a versão 3.0.0. Você poderia me garantir se atualmente--append
ignora a parte já copiada, enquanto--append-verify
lê A inteiro para verificação da soma de verificação? (antes da versão 3.0.0.--append
comportava-se como--append-verify
-> Essa é a razão do mal-entendido)--append
anexa cegamente ao arquivo.--append-verify
faz o mesmo, mas executa somas de verificação no final, se as somas de verificação não corresponderemrsync
parecerem fazer uma nova cópia.Você tentou
dd skip
com um deslocamento do tamanho real do arquivo B (independente do tamanho do bloco de partição)?Isso te daria a parte que faltava. Nesse ponto, você pode
cat
reuni-los diretamente em um novo arquivo comcat "$B" "$A2" >> "$C"; #mv "$C" "$B"
(onde$C
é claro a parte que está faltando em um caminho com espaço suficiente).cat
também funciona bem para concatenar binários e, nesse caso, você não possui vários cabeçalhos de arquivos que precedem mesclagens com script simples. Há uma chance de o final$B
estar corrompido, mas, nesse caso, você pode abreviá-lo e reler mais$A
no passo inicial do dd.fonte