Найшвидший спосіб об'єднати багато файлів в один (tar czf занадто повільно)


23

В даний час я працюю tar czfдля комбінування файлів резервного копіювання. Файли знаходяться у певному каталозі.

Але кількість файлів зростає. Використання tzr czfзаймає занадто багато часу (більше 20 хвилин і підрахунок).

Мені потрібно комбінувати файли швидше та масштабніше.

Я знайшов genisoimage, readomі mkisofs. Але я не знаю, що найшвидше і які обмеження є для кожного з них.


Я сумніваюся, що tarвведення будь-яких значних накладних витрат, читання файлів - це дорога операція. Вам слід або змінити спосіб зберігання ваших файлів, або використовувати кардинально інший підхід (скопіюйте файлову систему в цілому). Ми не можемо вам допомогти багато, не знаючи, як організовані ваші файли.
Жил 'SO- перестань бути злим'

5
Встановіть FS за допомогою опції "noatime", можливо, прискоріть операції вводу-виводу.
Руфо Ель Магуфо

2
+1 для часу, це дійсно має істотну зміну. Особливо для звичайних жорстких дисків, а також просто для зменшення сторонніх записів.
Дж. М. Бекер

Відповіді:


25

Ви повинні перевірити, чи більша частина вашого часу витрачається на процесор чи введення / виведення. У будь-якому випадку є способи її вдосконалення:

A: не стискайте

Ви не згадали «стиснення» в списку вимог спробуйте відправити на «Z» зі списку аргументів: tar cf. Це може трохи пришвидшити справи.

Існують і інші методи прискорення процесу, наприклад використання "-N" для пропуску файлів, які ви вже створили резервну копію.

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

Крім того, якщо ви створюєте резервну копію всього розділу, замість цього скопіюйте копію всього дискового зображення. Це дозволить заощадити обробку та багато дискової головки шукати час. tarі будь-яка інша програма, що працює на більш високому рівні, має намір переглядати та обробляти записи каталогів та вклади, щоб знайти, де вміст файлу, і робити більше головного диска , читаючи кожен файл з іншого місця з диска.

Щоб створити резервну копію базових даних набагато швидше, використовуйте:

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

(Це передбачає, що ви не використовуєте RAID, що може трохи змінити речі)


2
не стискайте : або використовуйте, pigzякщо в системі існує більше ніж один процесор.
Rufo El Magufo

LZ4 / zstd і аналогічно швидкі алгоритми стиснення, можливо, все-таки варто перевірити, чи можуть вони прискорити процес, просто записуючи менше даних (якщо дані взагалі стисливі), будучи на порядок швидше стисненням, але менш ефективними залежно від рівень та алгоритм, також man gzip каже: "За замовчуванням рівень стиснення становить -6", тому є можливість для вдосконалення.
LiveWireBT

8

Щоб повторити те, що сказали інші: нам потрібно знати більше про файли, які створюються в резервному режимі. Я піду тут з деякими припущеннями.

Додайте до файлу tar

Якщо файли додаються лише до каталогів (тобто жоден файл не видаляється), переконайтеся, що ви додаєте до існуючого файлу tar, а не створюйте його знову кожного разу. Це можна зробити, вказавши існуюче ім’я файлу архіву у вашій tarкоманді замість нового (або видаливши старе).

Запишіть на інший диск

Читання з того самого диска, на який ви пишете, може призвести до вбивства. Спробуйте записати на інший диск, щоб поширити навантаження вводу / виводу. Якщо архівний файл повинен знаходитися на тому ж диску, що і вихідні файли, перемістіть його згодом.

Не стискайте

Просто повторюючи те, що сказав @Yves. Якщо ваші файли резервного копіювання вже стиснуті, стискати знову не потрібно. Ви просто витрачаєте цикли процесора.


4

Використання дьогтю з lz4, як в

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

дає вам найкраще з обох світів (досить хороше стиснення І швидкість). Очікуйте коефіцієнта стиснення близько 3, навіть якщо ваші дані містять двійкові файли.

Подальше читання: порівняння алгоритмів стиснення Як орієнтуватися на lz4


1
Що залишається в StefanQ, це те, що вам потрібно вибрати свій компресор залежно від місця вашого вузького місця. Також пам’ятайте: ви можете зберегти вихід на іншому фізичному пристрої зберігання даних або навіть на віддаленій машині!
Лестер Чеун

2

Я здивований, що ніхто не згадує скидання та відновлення. Це буде набагато швидше, ніж dd, якщо у вас буде вільне місце у файловій системі.

Зауважте, що залежно від розглянутої файлової системи вам можуть знадобитися різні інструменти:

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

Зауважте, що деяка програма не має вбудованого стиснення (все, крім dump) - труба для stdout та використання pigz за потреби. ;-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.