Eu tenho um dilema complicado. Eu tenho alguns arquivos em duas unidades de destino diferentes, copiadas da mesma unidade de origem. A unidade de origem estava falhando, então usei o dd para copiar os dados para um destino (com as opções conv=noerror,sync
, que preenchem os blocos com erros de zero bytes) e usei o ddrescue na mesma unidade de origem para copiar dados para um segundo partição, e ouvi dizer que o ddrescue também preenche erros com zero bytes.
Agora, tenho duas unidades de destino com dados quase duplicados, exceto pelo fato de que alguns dos dados dessas duas unidades de destino são definitivamente diferentes. Eu só posso presumir que as diferenças serão causadas por esses bytes zero, que parecem estar localizados em lugares diferentes entre os dados nessas duas unidades de destino. Eu só posso presumir que essas diferenças estão sendo causadas pelas partes dos arquivos que foram preenchidos com zero onde erros foram encontrados durante a cópia. No entanto, os pontos preenchidos com zero são diferentes nas duas unidades de destino separadas. A maioria desses dados consiste em arquivos binários. Portanto, alguns arquivos na origem estão totalmente intactos, enquanto seus equivalentes no destino não estão, enquanto outros arquivos estão totalmente intactos no destino, enquanto suas contrapartes na origem não estão. Muitos desses arquivos também são arquivos binários.
Ideally, I'd like to synchronize both drives as follows:
- Compare each file, bit-by-bit.
- If the left file's bit is 1 and the right file's bit is 0, copy the 1 over to the right.
- If the left file's bit is 0 and the right file's bit is 1, copy that 1 to the left, or at least keep the 1 on the right, if two-way synchronization isn't an option.
Essa funcionalidade faz sentido para mim, mas existe um utilitário que possa lidar com isso automaticamente? Pensei em usar o rsync para isso, mas parece que o rsync só verifica o arquivo com base no tamanho & timestamp ou por soma de verificação, em vez de bit por bit, e uma soma de verificação simples não informa onde há 0s quando deveria haver 1s. Eu também olhei para rdiff e bsdiff, ambos suportam arquivos binários, mas ambos parecem apenas produzir um arquivo diff, ao invés de fazer qualquer cópia / sincronização real.
Então existe uma utilidade que faz o que eu estou procurando, como descrito no meu comportamento de sincronização ideal descrito acima? O SO não deve necessariamente importar, pois tenho acesso ao OSX, ao Windows e ao Ubuntu.