Як я можу пришвидшити операції над розрідженими файлами за допомогою tar, gzip, rsync?


9

У мене розріджений файл. ( du -hзвіти 3G та du -h --apparent-sizeзвіти 100G.) Поки що так добре.

Тепер, коли я хочу стиснути файл за допомогою tarабо надіслати його по мережі, використовуючи rsync, це зажадає стільки ж часу, скільки 3G. Здається, ці інструменти читають усі нулі.

Я подумав, що отвори якось позначені, і ці інструменти могли якось просто їх пропустити?

З моїм файлом, ймовірно, немає проблем?

Це відсутня функція tarі rsyncне шукати розріджених файлів? Я використовував tarпараметр --sparse, але це не прискорило. Ні rsyncпараметр --sparse.

Чи є спосіб прискорити використання цих інструментів на розріджених файлах?

Відповіді:


7

bsdtar(принаймні з libarchive3.1.2) здатний виявляти рідкісні ділянки за допомогою FS_IOC_FIEMAPioctl у файлових системах, які його підтримують (хоча він також підтримує ряд інших API), однак, принаймні, як у моєму тесті, як це не дивно, це не в змозі обробити tarфайли, які він створює (схоже на помилку).

Однак використання GNU tarдля вилучення їх працює, але тоді GNU tar не може обробити деякі розширені атрибути, які підтримує bsdtar.

Тому

bsdtar cf - sparse-files | (cd elsewhere && tar xpf -)

працює до тих пір, поки файли не мають розширених атрибутів чи прапорів.

Він все ще не працює для файлів, які є досить рідкісними (лише нулі), оскільки FS_IOC_FIEMAPioctl повертається на 0 ступінь, і схоже, bsdtarщо не справляється з цим належним чином (інша помилка?).

star( Schily tar ) - це ще одна реалізація тар із відкритим кодом, яка може виявляти розріджені файли (використовуйте -sparseпараметр) і не має цих помилок bsdtar(але не пакується багатьма системами).


2

У цій статті є rsyncпринаймні кілька корисних пропозицій :

Проблеми

Використання rsync --sparse works, але викликає величезну кількість непотрібних записів на диск. Якщо змінити 10 байт на 50 ГБ завдовжки (1 ГБ), це призведе до запису лише одного або двох блоків, це спричиняє запис 1 ГБ. Це повільно, і можливо, не добре для довголіття дисків.

Використовує rsync --inplaceроботи, але створює непрості файли.

Не можна одночасно використовувати --sparse та --inplace :-( це заборонено rsync. Rsync: --sparse не можна використовувати з --inplace

Рішення

Якщо ви використовуєте --inplace для оновлення вже існуючого розрідженого файлу, файл залишатиметься розрідженим та матиме лише невелику кількість блоків. Лише коли rsync --inplace створює файл, він робить його нерідким.

Таким чином, рішення полягає у створенні відповідного, правильно витягнутого, порожнього, розрідженого файлу на цільовій машині для кожного файлу на вихідній машині - якщо файл ще не присутній на цільовій машині.

Тоді rsync --inplace буде працювати за призначенням, залишаючи розріджені файли розрідженими і записуючи лише змінені блоки на диск.

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

truncate -s 3G filename

Потім ви можете rsync --inplaceскопіювати файли. Це повинно бути необхідно лише один раз.


Ця ж стаття пропонує використовувати Virtsync, який є

комерційний інструмент командного рядка $ 49 для синхронізації вмісту величезних файлів (таких, як образи та бази даних віртуальної машини).

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

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