Я написав більш швидкий альтернативний ratarmount , який "працює на мене", тому що ця проблема постійно мене клопотала .
Ви можете використовувати його так:
pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level
Коли ви закінчите, ви можете його відключити, як будь-яке кріплення FUSE:
fusermount -u mount-folder
Чому це швидше, ніж архів?
Це залежить від того, що ви вимірюєте.
Ось орієнтир слід пам’яті та необхідний час для першого монтажу, а також час доступу для простої cat <file-in-tar>
команди та простої find
команди.
Були створені папки, що містять кожен 1k файл, і кількість папок змінюється.
Нижній лівий графік показує смужки помилок із зазначенням мінімальних та максимальних виміряних разів cat <file>
для 10 випадково вибраних файлів.
Файл шукайте час
Порівняння вбивць - це час, який потрібно cat <file>
закінчити. З якоїсь причини це масштабується лінійно з розміром файлу TAR (приблизно байтів на файл x кількість файлів) для архівної кількості, будучи постійним часом у ratarmount. Це робить його схожим на те, що архивант навіть не підтримує пошук.
Для стислих файлів TAR це особливо помітно.
cat <file>
займає більше ніж удвічі більше часу, ніж монтажу всього файлу .tar.bz2! Наприклад, TAR з 10k порожніми (!) Файлами займає 2,9 секунди для монтажу з архівом, але залежно від файлу, до якого доступ, доступ із cat
займає від 3мс до 5с. Час, який потрібно, здається, залежить від положення файлу всередині TAR. Файли в кінці TAR потребують більше часу; що вказує на те, що "шукати" емулюється та весь вміст у TAR перед тим, як файл прочитаний.
Це отримання вмісту файлів може зайняти більше ніж удвічі більше часу, ніж монтаж цілого TAR несподівано. Принаймні, це слід закінчити за стільки ж часу, як і монтаж. Одним із пояснень було б те, що файл не раз переглядається, наприклад, навіть тричі.
Як видається, для отримання файлу Ratarmount завжди потрібна однакова кількість часу, тому що він підтримує справжні пошуки. Для стислих TAR-файлів bzip2 він навіть шукає блок bzip2, адреси якого також зберігаються у файлі індексу. Теоретично, єдина частина, яка має масштабуватись із кількістю файлів, - це пошук в індексі, який повинен масштабуватися з O (log (n)), оскільки він сортується за маршрутом та назвою файлу.
Слід пам'яті
Загалом, якщо у вас є більше 20 кб файлів всередині TAR, то пам'ять пам’яті ratarmount буде меншою, оскільки індекс записується на диск у міру створення, і тому в моїй системі є постійний слід пам’яті приблизно 30 Мб.
Невеликим винятком є декодер gzip-декодера, який з певних причин потребує більше пам’яті, оскільки gzip стає більшим. Цей накладний об'єм пам'яті може бути індексом, необхідним для пошуку всередині TAR, але потрібне подальше дослідження, оскільки я не писав цей запуск.
На відміну від цього, archmount зберігає весь індекс, який, наприклад, 4 Гб для 2M файлів, повністю зберігається в пам'яті настільки, наскільки встановлений TAR.
Час монтажу
Моя улюблена особливість - це рішуча можливість змогти встановити TAR без помітного зволікання при наступній спробі. Це тому, що індекс, який відображає назви файлів для метаданих та позиції всередині TAR, записується у файл індексу, створений поруч із файлом TAR.
Потрібний час для монтажу поводиться якось дивно в архіві. Починаючи з приблизно 20k файлів, він починає масштабуватись квадратично, а не лінійно щодо кількості файлів. Це означає, що починаючи з приблизно 4-мільйонних файлів, ratarmount починає набагато швидше, ніж архівант, хоча для менших файлів TAR це до 10 разів повільніше! Потім знову для менших файлів не має великого значення, чи знадобиться 1s чи 0,1s для монтажу tar (перший раз).
Часи монтажу файлів, що стискаються bz2, є найбільш порівнянними за всі часи. Це дуже ймовірно, оскільки воно пов'язане зі швидкістю декодера bz2. Тут приблизно два рази повільніше. Я сподіваюся зробити перемогу явним переможцем, паралелізуючи декодер bz2 найближчим часом, що навіть для моєї 8-річної системи може призвести до 4-кратного прискорення.
Час отримати метадані
Якщо просто перелічити всі файли, що find
знаходяться всередині TAR (знайти також, схоже, статтю виклику для кожного файлу !?), ratarmount на 10 разів повільніше, ніж архівамент для всіх перевірених випадків. Я сподіваюся на покращення цього в майбутньому. Але в даний час це виглядає як проблема дизайну через використання Python та SQLite замість чистої програми C.