Целостность сжатого файла на диске при прерывании архивирования - PullRequest
0 голосов
/ 31 мая 2018

У меня есть программа, которая принимает файл, сжимает его, используя /usr/bin/zip или /bin/gzip или /bin/bzip2, и удаляет оригинал, если и только если операция сжатия завершается успешно.

Однако этоПрограмма может быть убита (через kill -9), или, в принципе, может даже аварийно завершить свою работу!

Вопрос: Можно ли предположить, что сжатый выходной файл создается на дискевсегда действителен, даже не распаковывая его и не сравнивая с оригиналом?

Другими словами , независимо от того, в какой точке операция сжатия будет грациозно прервана, разве факт, чтосжатый выходной файл существует на диске, подразумевается, что он действителен?

Другими словами , является ли операция сжатия и создание файла на диске вместе атомарной транзакцией?

Основная проблемаздесь не удаляется исходный файл, если сжатый файл недействителен, но без необходимости выполнять дорогостоящие операции распаковки и сравнения.

Неe:

  1. Игнорировать файловые буферы ОС, не сбрасываемые на диск из-за сбоя ИБП.

  2. Игнорировать сбой диска / носителя.В любом случае это может произойти намного позже и совершенно независимо от прерывания программы.

1 Ответ

0 голосов
/ 01 июня 2018

A.Да, если zip, gzip или bzip2 успешно завершены, вы можете предположить, что полученный сжатый файл является допустимым с большой вероятностью.Эти программы были довольно долгое время, и я бы сказал, что почти все ошибки целостности данных были устранены давно.Вам также необходимо учитывать надежность вашего оборудования в его операционной среде.

B.(Ваши «другими словами» кажутся совершенно другими вопросами.) Нет. Из-за изящно прерванной операции сжатия, как правило, останется частично и неверный сжатый файл.

C.Нет. Файл создается и затем записывается в блок за раз.Эти операции, конечно, не являются атомарными.

Вам просто нужно убедиться, что утилита сжатия успешно завершилась, поскольку она нормально выходит и возвращает ноль в качестве кода выхода.Тогда вам не нужно проверять сжатый файл, если вы не супер параноик, возможно, потому что данные имеют очень большое значение для вас.сжать его, хотя бы для zip и gzip.bzip2 займет примерно столько же времени, сколько и сжатие.

...