Проверьте целостность файла во время записи
Я делаю резервное копирование с помощью команды, как показано ниже:
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 вопроса:
- Есть ли способ проверить целостность архива во время записи на диск и повторить попытку записи блока, если проверка не удалась?
- Есть идеи, как узнать реальную причину неудачи?
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. Благодарю. (Не стесняйтесь связаться со мной по электронной почте.)
- При всех проблемах с целостностью первая задача - проверить ваше оборудование. Ваш RAID вменяемый? Ваш жесткий диск выдает SMART ошибки?
- Написание блоков и контроль их целостности - это работа ядра, а не ваша. Ваша задача - попросить ядро написать файл связным способом, что приводит меня к 2.
- Вы передаете свои данные более чем 5 различным программам. tar вряд ли повредит какие-либо данные, потому что код широко используется и отглаживается (но вы никогда не знаете), но я не очень уверен насчет lbzip2 и ionice. Прежде чем перейти к сумасшедшим вещам, таким как проверка целостности блоков на уровне FS, используйте команду bash, которая менее сложна. один "гудрон" должен делать. И убедитесь, что созданный файл не имеет проблем с целостностью. Затем перейдите к 3.
- Если ваша проблема связана с сетью, лучший способ диагностировать ее - это посмотреть журналы (/var/log/* или журналы событий на окнах) и сетевые пакеты. Я бы подключил tcpdump к linux/unix или wireshark на окнах и проверил, что контрольные суммы TCP не повреждены.
Но, на самом деле, избавиться от всех этих труб раньше...
Поскольку вашим местом назначения является CIFS-общий ресурс на Windows-коробке - почему бы вам не использовать сжатую Windows файловую систему на стороне Windows и просто использовать обычный tar (без сжатия) на стороне Linux?
Таким образом, вы можете поместить нагрузку сжатия на окно Windows - и избавиться от многих сложностей.
Кстати: вы проверили сетевое подключение к оконному блоку? Вы получаете какие-либо сетевые ошибки?
netstat -in
ethtool -S eth0|grep -vw 0
(замените eth0 сетевой картой, используемой соединением CIFS)