Назад | Перейти на главную страницу

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

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

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. Есть идеи, как узнать настоящую причину сбоя?
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 вменяем? Ваш жесткий диск выдает ошибки S.M.A.R.T?
  2. Написание блоков и контроль их целостности - это работа ядра, а не ваша. Ваша задача - попросить ядро ​​записать файл последовательным образом, что приводит меня к 2.
  3. Вы передаете свои данные по 5 различным программам. tar вряд ли повредит какие-либо данные, потому что код широко используется и отлажен (но вы никогда не знаете), но я не уверен в lbzip2 и ionice. Прежде чем переходить к сумасшедшим вещам, вроде проверки целостности блоков на уровне FS, воспользуйтесь менее сложной командой bash. подойдет один "tar". И убедитесь, что у созданного файла нет проблем с целостностью. Затем перейдите к 3.
  4. Если ваша проблема связана с сетью, лучший способ ее диагностировать - это просмотреть журналы (/ var / log / * или журналы событий в Windows) и сетевые пакеты. Я бы подключил tcpdump к linux / unix или wirehark к окнам и проверил, что контрольные суммы TCP не повреждены.

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

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

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

Кстати: вы проверили сетевое подключение к windows-box? У вас есть сетевые ошибки?

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