Самый быстрый способ объединить много файлов в один (tar czf слишком медленный)

23

В настоящее время я работаю tar czfнад объединением файлов резервных копий. Файлы находятся в определенном каталоге.

Но количество файлов растет. Использование tzr czfзанимает слишком много времени (более 20 минут и считая).

Мне нужно объединить файлы быстрее и масштабируемым образом.

Я нашел genisoimage, readomи mkisofs. Но я не знаю, что является самым быстрым и каковы ограничения для каждого из них.

Наджиб-ботак Чин
источник
Я сомневаюсь, что это tarприводит к значительным накладным расходам, чтение файлов является дорогостоящей операцией. Вам следует либо изменить способ хранения ваших файлов, либо использовать совершенно другой подход (скопировать файловую систему в целом). Мы не можем вам сильно помочь, не зная, как организованы ваши файлы.
Жиль "ТАК - перестань быть злым"
5
Смонтируйте вашу FS с опцией «noatime», возможно, ускорите операции ввода-вывода.
Руфо Эль Магуфо
2
+1 для noatime, это действительно имеет большое значение. Особенно для обычных жестких дисков, а также просто для уменьшения посторонних записей.
JM Becker

Ответы:

25

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

A: не сжимать

Вы не упомянули «сжатие» в списке требований попробуйте отправить на «Z» из списка аргументов: tar cf. Это может немного ускорить процесс.

Существуют и другие методы для ускорения процесса, например, использование «-N» для пропуска файлов, которые вы уже создали ранее.

B: резервное копирование всего раздела с помощью dd

В качестве альтернативы, если вы создаете резервную копию всего раздела, вместо этого возьмите копию всего образа диска. Это сэкономило бы обработку и много времени поиска диска. tarи у любой другой программы, работающей на более высоком уровне, есть потребность в чтении и обработке записей каталога и inode, чтобы найти, где находится содержимое файла, и для выполнения дополнительных операций поиска на диске , считывая каждый файл из другого места с диска.

Чтобы выполнить резервное копирование базовых данных намного быстрее, используйте:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Предполагается, что вы не используете RAID, что может немного изменить ситуацию)

Ив Жункейра
источник
2
не сжимайте : или используйте, pigzесли в системе существует более одного процессора.
Руфо Эль Магуфо
Алгоритмы LZ4 / zstd и аналогичные быстрые алгоритмы сжатия могут все еще стоить проверить, могут ли они ускорить процесс, просто записывая меньше данных (если данные вообще сжимаемы), в то же время быстрее на сжатие, но менее эффективно в зависимости от Уровень и алгоритм, также man gzip говорит: «Уровень сжатия по умолчанию -6», так что есть возможности для улучшения.
LiveWireBT
8

Повторим то, что сказали другие: нам нужно больше знать о файлах, для которых выполняется резервное копирование. Я пойду с некоторыми предположениями здесь.

Добавить в файл tar

Если файлы только добавляются в каталоги (то есть, файл не удаляется), убедитесь, что вы добавляете к существующему файлу tar, а не заново создаете его каждый раз. Вы можете сделать это, указав существующее имя файла архива в вашей tarкоманде вместо нового (или удалив старое).

Записать на другой диск

Чтение с того же диска, на который вы пишете, может снизить производительность. Попробуйте записать на другой диск, чтобы распределить нагрузку ввода-вывода. Если файл архива должен находиться на том же диске, что и исходные файлы, переместите его позже.

Не сжимать

Просто повторяю то, что сказал @ Yves. Если ваши файлы резервных копий уже сжаты, нет необходимости снова сжимать. Вы просто будете тратить циклы процессора.

Барри Браун
источник
4

Использование tar с lz4 crompression, как в

tar cvf - myFolder | lz4 > myFolder.tar.lz4

дает вам лучшее из обоих миров (довольно хорошее сжатие и скорость). Ожидайте степень сжатия около 3, даже если ваши данные содержат двоичные файлы.

Дальнейшее чтение: сравнение алгоритмов сжатия Как использовать tar с lz4

StefanQ
источник
1
StefanQ остается тем, что вам нужно выбирать компрессор в зависимости от того, где находится ваше узкое место. Также: помните, что вы можете сохранить вывод на другое физическое устройство хранения или даже на удаленную машину!
Лестер Чунг
2

Я удивлен, что никто не упоминает сброс и восстановление. Это будет намного быстрее, чем dd, если у вас есть свободное место в файловой системе.

Обратите внимание, что в зависимости от рассматриваемой файловой системы вам могут понадобиться разные инструменты:

  • ext2 / 3/4 - дамп и восстановление ( дамп пакета в RH / Debian)
  • XFS - xfsdump и xfsrestore (пакет xfsdump в RH / Debian)
  • ZFS - zfs send и zfs recv
  • BTRFS - отправка btrfs и получение btrfs

Обратите внимание, что некоторые программы не имеют встроенного сжатия (все, кроме дампа) - направляют в стандартный вывод и используют pigz по мере необходимости. ;-)

Лестер Чунг
источник