Come verificare se un file è danneggiato o no?


13

Esistono soluzioni generali per verificare se un file è danneggiato o no? Ad esempio, se un file video è danneggiato o se un file compresso è danneggiato, ecc.


1
Chiedete se c'è un errore fisico sul disco o se le informazioni nel file non sono corrette?
Thorbjørn Ravn Andersen,

2
Controllare se le informazioni in un file arbitrario sono corrette è piuttosto complicato. echo "P = NP" >is-this-corrupt.txt:)
Tom Anderson,

Risposte:


10

No, non ci sono soluzioni generali. L'unico modo per verificare se un file è corrotto è provare a leggerlo; solo il software che sa leggere quel particolare formato può farlo.

Quello che potresti fare è usare fileper identificare il tipo di file e quindi usare il tipo per scegliere un programma appropriato per controllare il file. Puoi scrivere una sceneggiatura come questa:

# /bin/bash -eu

FILENAME=$1

FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
    "gzip compressed data") CHECKER="gunzip -t" ;;
    # many, many more lines here
    *) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac

$CHECKER $FILENAME

Ma avresti molto lavoro da fare per compilare la dichiarazione del caso.

È possibile che qualcuno abbia già scritto un tale script (o programma), ma non ne conosco nessuno.


1
"solo un software che sa leggere quel particolare formato può farlo" è un falso presupposto. Ci sono molti programmi che non si preoccupano del tipo di file che gli dai. (Si pensi, ad esempio grep, cat, tar...). La tua soluzione è quindi molto gonfia.
rozcietrzewiacz,

4
Con "lettura" intendevo "interpretare" - avrei dovuto essere più chiaro. Non è possibile utilizzare cato qualsiasi altro programma che tratta un file puramente come un flusso non strutturato di byte, per verificare la corruzione. Non credo che la mia soluzione sia gonfia.
Tom Anderson,

Come suggerito da Caleb , è possibile trattare ogni file come dati binari e archiviare checksum per successive verifiche. Questo è universale, semplice e relativamente veloce.
rozcietrzewiacz,

1
Ma ora vedo che il tuo approccio ha il vantaggio di poter eseguire la verifica anche su file che non hai visto o consultato in precedenza. Questo è sicuramente un vantaggio: potresti segnalarlo nella tua risposta.
rozcietrzewiacz,

14

Se a un certo punto sai che il file è buono, puoi fare un checksum e usarlo per confrontarlo in seguito per assicurarti che sia ancora intero. Ciò è utile prima di trasferire file tra supporti o tra reti.

Se non si conosce il buono stato di un file, no non esiste un modo universale o verificare la corruzione. Solo il formato di file specifico in ciascun caso determina quali sono i dati corrotti o meno.


3

Se ti capita di usare ZFS, o puoi leggere il file ed è garantito che non sia danneggiato o hai un errore di lettura e lo è.

Modifica Dopo i saggi commenti, ecco un chiarimento della mia risposta:

ZFS può proteggere e rilevare dalla corruzione silenziosa dei dati. ad es .: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Naturalmente se il file è già corrotto al momento della sua scrittura iniziale, non c'è nulla il file system può fare.

Per proteggere dalla corruzione che potrebbe verificarsi durante la trasmissione del file, le solite tecniche di uso generale sono md5sum o hash simili.


wow, che caratteristica: O
LanceBaynes,

1
Quindi se scarichi un video dal Web che è corrotto? ZFS non fa nulla per aiutarti lì - verifica semplicemente che il file corrotto non venga modificato. ZFS è fantastico, ma non è una soluzione per verificare la presenza di file corrotti.
Tom Anderson,

Purtroppo questo è solo un controllo di integrità del file system, non una reale comprensione dei file e se sono corrotti. L'utilizzo più comune di cui sospetto che @Lance sia dopo è la possibilità di decidere se un file in arrivo scaricato o trasferito in altro modo è valido o meno. ZFS non può magicamente decidere se un file è buono o no, promette solo che qualsiasi cosa tu gli dia viene salvata e restituita in un unico pezzo localmente.
Caleb,

Dato che la domanda è taggata / data-recovery e / filesystems, ho pensato che si trattasse di corruzione silenziosa dei dati, non di file già interrotti in primo luogo. Risposta modificata per chiarire questo punto.
jlliagre,

@jiliagre: ho ritirato questa domanda con quel tag (possibilmente a torto) circa un'ora dopo la tua risposta. Quando hai risposto è stato semplicemente taggato "linux".
Caleb,
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.