Рейтинг:0

Сжатие Tar и 7z в Linux — в чем разница?

флаг tr

У меня проблема! У меня есть резервный скрипт на питоне. Он создает резервные копии всех папок в /var/www/ в разных .tar.7z для каждой папки внутри /var/www/.

Проблема в том, что время сжатия очень медленное. А для больших папок по 4 Гб перестает сжимать иногда на 1 Гб иногда на 1,5 Гб.

Это строка для этого сжатия:

os.system("tar cf - -C %s . 2>/dev/null 3>/dev/null | 7za a -p%s -si %s 1>/dev/null 2>/dev/null 3> /dev/null" % (cf, self.config.get(jn, "archpass"), имя файла))

Когда я пытаюсь tar -cf compress-dir.tar /var/www/bigsite.com/ папка 4 ГБ, она работает, создает .tar очень быстро, за несколько минут она готова.

Однако в скрипте Python временный файл, который создается, как только начинает генерироваться .tar, увеличивается в размере очень медленно. Примерно через 10 минут он достигает около 1 ГБ ...и вскоре перестает увеличиваться, не показывая в консоли никакой ошибки.

Есть ли способ смоделировать то же самое, что здесь происходит: смола cf - -C %s . 2>/dev/null 3>/dev/null прямо в баш? Потому что ясно, что это не то же самое, что tar -cf compress-dir.tar /var/www/bigsite.com/ так как он работает намного быстрее.

Возможно, если я запущу tar прямо в bash, может появиться ошибка. Конечно, если у вас есть другие идеи, пожалуйста, дайте мне знать.

флаг in
Большинство версий tar поддерживают встроенное сжатие gzip путем добавления опции `z`. Gzip не так эффективен, как 7zip в отношении сжатого размера, но может быть немного быстрее. Что касается проблемы с 7zip, я бы заподозрил старую или дефектную версию 7zip, поскольку у 7zip не должно быть проблем с большими файлами.Вам также не обязательно использовать 7zip, можно использовать и другие компрессоры, такие как bzip2. А с помощью определенных параметров можно уменьшить эффективность сжатия, чтобы ускорить процесс резервного копирования.
Рейтинг:1
флаг ar

Tar не выполняет сжатие само по себе. Это означает, что пропускная способность почти полностью ограничена возможностями ввода-вывода. Жесткие диски легко справляются со скоростью 100 МБ/с, поэтому 4 ГБ R/W должны выполняться примерно за 80 секунд — 4 ГБ чтения и 4 ГБ записи. SSD могут обрабатывать сотни мегабайт в секунду и более.

Однако 7z делает сжатие. Сжатие в основном связано с процессором, а не с хранилищем.

Чтобы протестировать 7z, вы можете запустить 7з б. На ноутбуке, который я использую для написания этого, 7z может обрабатывать 20 МБ/с. Мое хранилище NVMe может обрабатывать 2 ГБ/с. Разница на два порядка! Сжатие 4 ГБ займет 200 секунд; простое заполнение его в tarball должно занять 2 секунды!

Различные алгоритмы сжатия имеют разные компромиссы. 7z можно настроить для использования различные уровни сжатия, в 10 шагах.

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

Есть ли способ смоделировать то же самое, что здесь происходит: смола cf - -C %s . 2>/dev/null 3>/dev/null прямо в баш? Потому что очевидно, что это не то же самое, что tar -cf compress-dir.tar /var/www/bigsite.com/, так как работает намного быстрее.

Конечно, это команда оболочки. ОС.система() просто запускает указанные команды. Команда tar в вашем примере добавляет %s в архив и выводит результат в стандартный вывод. В полном примере вы указываете, что это передается на 7z.

Но, как я сказал выше: медленный не tar. Это 7z.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.