Verifica a integridade dos arquivos enquanto escreve

1

Estou fazendo backup com o comando da seguinte forma:

ionice -c3 tar -ch data | lbzip2 -n 4 | ionice -c3 tee /mnt/smb/out.tar.bz2 > /dev/null

e depois disso estou tentando restaurar dados do backup:

lbzip2 -cd -n 10 /mnt/smb/out.tar.bz2 | tar -x 

Em uma hora após o início, o lbzip2 falha devido a um erro de integridade do arquivo.
/ mnt / smb é o dispositivo RAID 1 na máquina Windows acessada com o protocolo SMB.
Eu suspeito de erros ao escrever no disco ou enviar dados com o SMB, mas não tenho certeza.

Então, eu tenho 2 perguntas:

  1. É possível verificar a integridade do arquivo morto durante a gravação no disco e tentar escrever novamente se a verificação falhar?
  2. Alguma idéia de como descobrir o motivo real da falha?
por Vladimir Protasov 13.09.2011 / 12:01

3 respostas

2
tar -c ... \
| tee >(md5sum >/tmp/tar.md5) \
| lbzip2 \
| tee >(md5sum >/tmp/bz2.md5) \
> /mnt/smb/out.tar.bz2

Então você pode conferir

md5sum /mnt/smb/out.tar.bz2

e veja se ele retorna o mesmo que foi salvo em /tmp/bz2.md5. Se assim for, então você não deve ter problemas de armazenamento, e eu estaria interessado na mensagem de erro lbzip2 exata, e se o arquivo salvo pode ser descompactado pelo bzip2 oficial. Obrigado. (Sinta-se à vontade para entrar em contato comigo por e-mail.)

    
por 15.09.2011 / 22:09
1
  1. Com todos os problemas de integridade, a primeira tarefa é verificar seu hardware. Seu RAID é sensato? Seu disco rígido está jogando erros S.M.A.R.T?
  2. escrever blocos e controlar sua integridade é o trabalho do kernel, não o seu. Seu trabalho é pedir ao kernel para escrever um arquivo de maneira coerente, o que me leva a 2.
  3. Você está colocando seus dados em 5 programas diferentes. tar é improvável que corrompa qualquer dado, porque o código é amplamente usado e passado (mas você nunca sabe), mas eu não tenho tanta certeza sobre lbzip2 e ionice. Antes de fazer coisas malucas como checar a integridade dos blocos no nível do FS, use um comando bash que seja menos complicado. um único "tar" deve fazer. E verifique se o arquivo criado não tem nenhum problema de integridade. Então vá para 3.
  4. Se o problema estiver relacionado à rede, a melhor maneira de diagnosticar isso é examinar os logs (/ var / log / * ou logs de eventos nas janelas) e os pacotes de rede. Eu iria ligar um tcpdump no linux / unix ou um wireshark nas janelas e verificar se as somas de verificação TCP não estão corrompidas.

Mas, realmente, livre-se de todos esses cachimbos antes ...

    
por 13.09.2011 / 13:37
0

Como seu destino é um compartilhamento CIFS em uma caixa do Windows - por que você não usa um sistema de arquivos compactado pelo Windows no lado do Windows e apenas usa tar simples (sem compactação) no lado do Linux?

Dessa forma, você pode colocar a carga de compactação na caixa do Windows e se livrar de muita complexidade.

BTW: Você verificou a conexão de rede com a caixa do Windows? Você recebe algum erro de rede?

  • netstat -in
  • ethtool -S eth0|grep -vw 0 (substitua eth0 pela placa de rede usada pela conexão CIFS)
por 15.09.2011 / 22:34