Confronto di dispositivi a blocchi grezzi


12

Esiste un'utilità (o qualche magia di shell) che mi permette di confrontare due dispositivi a blocchi?

Dettagli: ho un dispositivo RAID di grandi dimensioni (0,5 TB) di cui ho eseguito il backup su un dispositivo SATA leggermente più grande usando dd. Il dispositivo ha diverse partizioni, tuttavia copio dal dispositivo "genitore" e non dai nodi del dispositivo partizionato (ad esempio, copio / dev / hda e non / dev / hda1 per esempio).

Vorrei verificare che il backup sia buono / corretto.

Ho pensato di eseguire md5sum su ogni dispositivo, tuttavia ciò non mi darà un risultato accurato in quanto il secondo dispositivo è leggermente più grande del primo e quindi i byte extra cambieranno l'hash.

Risposte:


13

Vorrei usare il comando

cmp /dev/hda /dev/hdb

si fermerà al primo byte diverso, scrivendo il suo offset, o su EOF su quello più corto.


Nella manpage non vedo nulla dell'arresto all'EOF, è documentato da qualche parte?
Kevin,

In effetti, lo stato di uscita dice: "1: i file sono diversi; questo include il caso in cui un file è identico alla prima parte dell'altro." Ciò sembra implicare che non li segnala identici se uno è più corto.
Kevin,

@Kevin: from info cmp: "Il comando 'cmp' confronta due file e, se differiscono, dice al primo byte e numero di riga dove differiscono."
enzotib,

1
È possibile utilizzare l' --bytes=LIMITopzione, impostando il LIMITvalore sulla dimensione in byte del dispositivo più piccolo per arrestarsi alla fine dell'unità più piccola (o del limite della partizione) senza avere l' cmpuscita con stato diverso da zero.
rozcietrzewiacz,

se ho una copia / dev / loop0 di / dev / sda e faccio modifiche a / dev / loop0, come potrei aggiungere le nuove modifiche a / dev / sda ?? Grazie
Milor123 il

2

A seconda di quanto siano piene le unità, potrebbe essere più veloce montare i file system e farlo

diff -qr /mnt/root1 /mnt/root2

Altrimenti, direi una cosa del genere:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

Ovviamente capisci quanto devi fare bse countfermarti a (o appena prima se è molto più conveniente) alla fine dell'unità più piccola.

Oppure, grazie al commento di enzotib, sembra che potresti usarlo cmp, ma avrai bisogno del -nflag per limitare il numero di byte al più corto dei due drive.

cmp /dev/sda /dev/sdb -n 500GB

Purtroppo non sono in grado di montare il dispositivo come volume NTFS e ho un LiveCD senza i driver giusti. Per il secondo comando i sottotitoli che usi non provano a risucchiare l'intero dispositivo in memoria prima di alimentarlo in diff?
alanxz,

1
@alanxz No, i diffsubshells non leggeranno l'intero dispositivo prima di scriverlo. ddscrive bsbyte immediatamente dopo averlo letto (o elaborato se specificato, non qui), e scrivono a fifos, che si bloccano fino a quando non vengono letti.
Kevin,

Stavo pensando di più a livello di shell (o qualunque cosa attui il FIFO). Ma questo risponde alla mia domanda!
alanxz,

2

Stai cercando un software diff binario

rdiff
è progettato per il backup e la trasmissione in rete, guarda rdiff-backup e la duplicità per il backup propuse

xdelta3
è un diff binario open source, strumenti di compressione differenziale, compressione delta VCDIFF (RFC 3284).

bsdiff
è troppo !! fame di memoria, non è adatto per dispositivi a blocchi.


1

C'è un'utilità chiamata bsdiff , che fa esattamente questo tipo di cose. Lo fa molto velocemente ed è in grado di generare una patch binaria, se necessario.

Vedi questo post per qualche spiegazione al riguardo.


bsdiffIl lavoro è più complesso del semplice confronto di due file, quindi dubito che possa essere più veloce del più semplice cmp.
enzotib,

Il collegamento è interrotto.
Owen Pauling,

1

Puoi confrontare due dispositivi a blocchi di dimensioni diverse usando in md5sumquesto modo:

(supponendo che il dispositivo più piccolo sia /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

0

Prendi in considerazione l'esecuzione fscksul backup. Potrebbe essere necessario giocare con alcuni trucchi losetupper impostare i dispositivi di loopback su partizioni incorporate nel backup, ma se il controllo del file indica che la struttura del file è coerente, i dati stessi sono probabilmente buoni.

Se si desidera un checksum completo, è possibile utilizzare i dispositivi di loopback con offset per esaminare le 'partizioni' interne del backup e md5sum ciascuna separatamente, ma un forzato fsckpuò darti un'idea di base molto più veloce di byte per i confronti di byte o i calcoli di checksum.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.