Проверьте целостность файла во время записи

Я делаю резервное копирование с помощью команды, как показано ниже:

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

и после этого я пытаюсь восстановить данные из резервной копии:

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

Через час после запуска lbzip2 выходит из строя из-за ошибки целостности файла.
/ mnt / smb - это устройство RAID 1 на компьютере под управлением Windows, доступ к которому осуществляется по протоколу SMB.
Я подозреваю ошибки при записи на диск или при отправке данных с smb, но не уверен.

Итак, у меня есть 2 вопроса:

  1. Есть ли способ проверить целостность архива во время записи на диск и повторить попытку записи блока, если проверка не удалась?
  2. Есть идеи, как узнать реальную причину неудачи?

3 ответа

Решение
tar -c ... \
| tee >(md5sum >/tmp/tar.md5) \
| lbzip2 \
| tee >(md5sum >/tmp/bz2.md5) \
> /mnt/smb/out.tar.bz2

Тогда вы можете проверить

md5sum /mnt/smb/out.tar.bz2

и посмотрите, вернет ли он то же самое, что было сохранено в /tmp/bz2.md5. Если это так, то у вас не должно быть проблем с хранилищем, и меня будет интересовать точное сообщение об ошибке lbzip2 и возможность распаковки сохраненного файла официальным bzip2. Благодарю. (Не стесняйтесь связаться со мной по электронной почте.)

  1. При всех проблемах с целостностью первая задача - проверить ваше оборудование. Ваш RAID вменяемый? Ваш жесткий диск выдает SMART ошибки?
  2. Написание блоков и контроль их целостности - это работа ядра, а не ваша. Ваша задача - попросить ядро ​​написать файл связным способом, что приводит меня к 2.
  3. Вы передаете свои данные более чем 5 различным программам. tar вряд ли повредит какие-либо данные, потому что код широко используется и отглаживается (но вы никогда не знаете), но я не очень уверен насчет lbzip2 и ionice. Прежде чем перейти к сумасшедшим вещам, таким как проверка целостности блоков на уровне FS, используйте команду bash, которая менее сложна. один "гудрон" должен делать. И убедитесь, что созданный файл не имеет проблем с целостностью. Затем перейдите к 3.
  4. Если ваша проблема связана с сетью, лучший способ диагностировать ее - это посмотреть журналы (/var/log/* или журналы событий на окнах) и сетевые пакеты. Я бы подключил tcpdump к linux/unix или wireshark на окнах и проверил, что контрольные суммы TCP не повреждены.

Но, на самом деле, избавиться от всех этих труб раньше...

Поскольку вашим местом назначения является CIFS-общий ресурс на Windows-коробке - почему бы вам не использовать сжатую Windows файловую систему на стороне Windows и просто использовать обычный tar (без сжатия) на стороне Linux?

Таким образом, вы можете поместить нагрузку сжатия на окно Windows - и избавиться от многих сложностей.

Кстати: вы проверили сетевое подключение к оконному блоку? Вы получаете какие-либо сетевые ошибки?

  • netstat -in
  • ethtool -S eth0|grep -vw 0 (замените eth0 сетевой картой, используемой соединением CIFS)
Другие вопросы по тегам