Existem soluções gerais para verificar se um arquivo está corrompido ou não? Por exemplo, se um arquivo de vídeo está incorreto ou se um arquivo compactado está corrompido, etc.
echo "P = NP" >is-this-corrupt.txt
:)
Existem soluções gerais para verificar se um arquivo está corrompido ou não? Por exemplo, se um arquivo de vídeo está incorreto ou se um arquivo compactado está corrompido, etc.
echo "P = NP" >is-this-corrupt.txt
:)
Respostas:
Não, não há soluções gerais. A única maneira de verificar se um arquivo está corrompido é tentar lê-lo; somente o software que sabe ler esse formato específico pode fazer isso.
O que você pode fazer é usar file
para identificar o tipo do arquivo e, em seguida, usar o tipo para escolher um programa apropriado para verificar o arquivo. Você pode escrever um script como este:
# /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
Mas você teria muito trabalho a fazer para preencher a declaração do caso.
É possível que alguém já tenha escrito um script (ou programa), mas eu não conheço nenhum.
grep
, cat
, tar
...). Sua solução é, portanto, muito inchada.
cat
, ou qualquer outro programa que trate um arquivo apenas como um fluxo não estruturado de bytes, para verificar se há corrupção. Não acredito que minha solução esteja inchada.
Se, em algum momento, você souber que o arquivo está bom, faça uma soma de verificação e use-a para comparar posteriormente para garantir que ainda esteja inteiro. Isso é útil antes de transferir arquivos entre mídias ou redes.
Se você não souber o bom estado de um arquivo, não há uma maneira universal ou verificará se há corrupção. Somente o formato de arquivo específico em cada caso determina o que está corrompido ou não está corrompido.
Se você usar o ZFS, poderá ler o arquivo e é garantido que não está corrompido ou você recebeu um erro de leitura.
Editar Após os sábios comentários, aqui está um esclarecimento da minha resposta:
O ZFS pode proteger e detectar contra corrupção de dados silenciosa. por exemplo: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Obviamente, se o arquivo já estiver corrompido no momento em que foi inicialmente escrito, não há nada o sistema de arquivos pode fazer.
Para se proteger contra a corrupção que aconteceria durante a transmissão do arquivo, as técnicas comuns de uso geral são md5sum ou hashes semelhantes.