dd
o qualsiasi altra applicazione non ha "una sorta di verifica integrata" nel senso che probabilmente stai pensando: non rilegge i dati dal supporto di archiviazione per confrontarli con ciò che è stato scritto. Questo è il lavoro del sistema operativo.
Non è davvero possibile eseguire una verifica di lettura fino all'hardware da un'applicazione. Funzionerebbe in alcuni scenari, ma nella maggior parte dei casi non otterrebbe nulla. L'applicazione potrebbe rileggere ciò che ha appena scritto se sta scrivendo direttamente su un supporto di archiviazione , ma in genere questo rileggerebbe da una cache in memoria, il che non darebbe alcuna garanzia utile. In l'esempio si cita , dd
sta scrivendo ad un tubo, e in quel caso non ha alcun controllo su ciò che accade ai dati più in basso la linea. Nel tuo esempio di rsync, un secondo passaggio dirsync --checksum
è inutile: in teoria potrebbe rilevare un errore, ma in pratica, se si verifica un errore, il secondo passaggio probabilmente non riporterebbe nulla di sbagliato, quindi stai sprecando sforzi su qualcosa che in realtà non fornisce una garanzia utile.
Tuttavia, le applicazioni si verificano quello che succede ai dati, nel senso che essi verificare che il sistema operativo ha la responsabilità accettato per i dati. Tutte le chiamate di sistema restituiscono uno stato di errore. Se una chiamata di sistema restituisce uno stato di errore, l'applicazione dovrebbe propagare tale errore all'utente, in genere visualizzando un messaggio di errore e restituendo uno stato di uscita diverso da zero.
Attenzione che dd
è un'eccezione: a seconda dei parametri della riga di comando, dd
potrebbe ignorare alcuni errori . Questo è estremamente insolito: dd
è l'unico comando comune con questa proprietà. Usa cat
invece di dd
, in questo modo non rischi la corruzione e potrebbe essere più veloce .
In una catena di copie dei dati, possono insorgere due tipi di errori.
- Corruzione: durante il trasferimento viene capovolto un po '. Non è possibile verificarlo a livello di applicazione, perché se ciò accade, è dovuto a un bug di programmazione o a un errore hardware che è altamente probabile che causi lo stesso danneggiamento durante la lettura. L'unico modo utile per verificare che tale corruzione non si verifichi è disconnettere fisicamente il supporto e riprovare, preferibilmente su un computer diverso nel caso in cui il problema riguardasse la RAM.
- Troncamento: tutti i dati che sono stati copiati sono stati copiati correttamente, ma alcuni dei dati non sono stati copiati affatto. Questa è la pena di verificare a volte, a seconda della complessità del comando. Non è necessario leggere i dati per farlo: basta controllare le dimensioni.