Come verificare l'integrità di un backup dd?


11

Ho appena effettuato il backup di un intero disco rigido (50 GB) sshtramite:

dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Qual è ora il modo migliore per verificare l'integrità del file image.img, ovvero come verificare che tutto sia copiato correttamente?


Di solito quando lo fai, è sempre perfetto. Tuttavia, è sempre possibile eseguire sha1sum per controllare gli hash sha1 dell'originale e del backup.
Darnir,

2
" Di solito ... è sempre perfetto." Questo mi ricorda quella citazione di The Naked Gun: "I dottori affermano che Nordberg ha una probabilità di vivere del 50/50, sebbene ci sia solo una probabilità del 10%".
Sparhawk,

Risposte:


10

Se il comando è terminato correttamente, il backup è corretto, salvo un errore hardware (che potrebbe ugualmente influenzare qualsiasi verifica che potresti eseguire). In seguito potrebbe diventare errato se l'hardware è difettoso, ma la maggior parte dell'hardware di archiviazione rileva la corruzione.

C'è un avvertimento qui: in una pipeline, la shell non segnala errori dal lato sinistro. (Questo è causa di uno scenario abbastanza comune in cui il lato destro non ha bisogno di leggere tutti i dati, ad esempio some_command | head, e gli stampi lato sinistro perché la sua uscita non è più voluto.) Quindi, ecco un errore di lettura da ddWould essere ignorato. In bash, imposta l' pipefailopzione per segnalare errori da tutte le parti della pipeline.

Inoltre, fai attenzione che dd bs=…ignora alcuni errori ed ddè spesso più lento delle alternative . Consiglio di non usarlo ddaffatto: non ha alcun vantaggio nel copiare un intero file. Contrariamente a quanto potresti aver letto da qualche parte, ddnon è un comando di accesso al disco di basso livello con proprietà speciali, non c'è assolutamente magia in dd, la magia è dentro /dev/hda.

shopt -s pipefail
set -e
</dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Tuttavia, se si desidera verificare il backup, il modo migliore è prendere un checksum crittografico su ciascun lato e confrontarli. Per esempio:

ssh myuser@myhost "sha1sum image.img" &
sudo sha1sum /dev/hda

Verificare che i due checksum siano identici.

Si noti che ciò verifica se il backup e l'originale sono identici al momento del controllo. Qualunque cosa tu cambi /dev/hda, incluso il montaggio e lo smontaggio di un filesystem anche senza apportare modifiche (che aggiornerà l'ultima data di montaggio su molti filesystem), cambierà il checksum. Se si desidera verificare l'integrità in un secondo momento, annotare da qualche parte il checksum del disco al momento del backup.


3
Si noti che se qualche cosa su /dev/hdaè cambiato da quando il backup è stato fatto gli hash non corrisponderanno.
bahamat,

Il vantaggio di un controllo hash è che i falsi negativi (l'errore commesso nella registrazione dell'immagine viene ripetuto per caso durante l'esecuzione dell'hash, in modo che un errore non venga notato) è astronomicamente minuscolo. Se è presente un errore hardware, dovrebbe provocare in modo schiacciante un controllo hash non riuscito. Riceverà un controllo falso positivo se il disco è stato modificato, come è stato notato.
Steven Lu,

@StevenLu No, la possibilità di correlazione è piuttosto elevata, perché i guasti hardware non sono uniformemente casuali. In particolare, errori RAM (che sono i guasti hardware più comuni osservabili nei PC tipici) si verificano in bit specifici.
Gilles 'SO- smetti di essere malvagio'

Va bene, probabilmente ... hash come questo con un gran granello di sale, certo, ma OP stava trasferendo su una rete. È intrinsecamente inaffidabile, nonostante TCP. Inoltre, è probabile che non vedremo lo stesso schema di accesso esatto (nella memoria fisica).
Steven Lu,

Nuova domanda correlata in cerca di chiarimenti sulla prima frase di @Gilles.
Sparhawk,

5

Come accennato da darnir & Giles, la cosa migliore da fare è eseguire hash crittografici immediatamente dopo il backup prima che qualsiasi cosa sia stata modificata sul disco di origine. Se, tuttavia, hai utilizzato il disco da allora, molto probabilmente gli hash non corrisponderanno. Anche cambiando un byte sul disco si otterrà un hash completamente diverso.

Sebbene sia molto meno che ideale, puoi controllare l'immagine montandola. Sul sistema in cui si trova l'immagine del disco, eseguire quanto segue (creare /mnt/diskse non esiste o utilizzare una posizione alternativa):

mount -o loop image.img /mnt/disk

È quindi possibile sfogliare /mnt/diske visualizzare tutti i file. Controlla gli hash sha1 dei file critici all'interno dell'immagine rispetto agli originali per verificarne l'integrità.


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.