Site icon IT Education Center Blog – блог навчального центру DevOps – ITEDU by NETFORCE Group

Як читати гігабайтні архіви без розпакування?

Ratarmount (Random Access Tar Mount) — це інструмент з відкритим кодом, який вирішує проблему з повільним доступом до файлів.

Зазвичай, якщо вам потрібно дістати один документ із ZIP або TAR.GZ вагою в кілька десятків гігабайтів, система змушена або розпаковувати весь архів, або послідовно читати його з самого початку. 

Ratarmount же монтує архіви як звичайні папки у файловій системі. Ви отримуєте миттєвий довільний доступ до будь-якого файлу всередині без попереднього розпакування.

Чим він краще за інші архіватори?

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

Якщо вам потрібно дістати файл, який знаходиться в самому кінці 100-гігабайтного TAR-архіву, утиліті доведеться прочитати всі 100 гігабайт даних.

Якщо архів ще й стиснутий (наприклад, .tar.gz або .tar.bz2), ситуація погіршується. Алгоритми стиснення (зокрема, Gzip) вимагають декомпресії всього попереднього блоку даних, оскільки стан декомпресора для поточного байта залежить від усіх попередніх байтів.

Принцип роботи Ratarmount

Ratarmount обходить це обмеження шляхом створення індексу файлової структури та точок зміщення. Весь процес відбувається у два кроки.

1. Перший запуск та індексація

Коли ви вперше монтуєте архів за допомогою Ratarmount, утиліта сканує його повністю. Вона фіксує:

  1. точні зміщення (на якій позиції в байтах починається кожен файл);
  2. метадані файлів (права доступу, розмір, імена);
  3. точки переходу для стиснутих даних (якщо використовується сумісний формат стиснення, наприклад, Bzip2 або спеціально підготовлений Gzip).

Всю цю карту архіву Ratarmount згортає в компактну базу даних SQLite (файл .index.sqlite з’являється поруч із архівом або в кеші). 

2. Повторне монтування та FUSE

При наступних викликах індексація вже не потрібна — Ratarmount зчитує готовий файл SQLite за мілісекунди. Використовуючи технологію FUSE (Filesystem in Userspace), утиліта створює віртуальну папку.

Коли операційна система або будь-яка програма звертається до файлу всередині цієї папки, Ratarmount:

  1. дивиться в індекс SQLite, де саме в архіві лежить цей файл;
  2. робить системний виклик lseek (перехід на потрібну позицію) безпосередньо до цього місця в архіві;
  3. зчитує лише необхідну кількість байтів.

Для миттєвого доступу всередині стиснутих архівів Ratarmount потребує індексації блоків стиснення. 

Формати .tar.bz2, .tar.xz та .tar.zst підтримують такий доступ краще. Для класичного .tar.gz швидкість довільного доступу може залежати від кроку точок індексації, який було обрано під час створення індексу.

Фічі інструменту

Основні обмеження

Незважаючи на свою ефективність, Ratarmount має кілька архітектурних особливостей, які слід враховувати.

Де Ratarmount буде корисним?

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

Ось кілька реальних кейсів, де Ratarmount показує себе найкраще.

1. Робота з Big Data та датасетами у Machine Learning

У сфері штучного інтелекту датасети часто складаються з мільйонів маленьких зображень або текстових файлів, упакованих у TAR через обмеження на кількість інодів (inodes) у файлових системах Linux. 

Замість розпакування терабайтів даних перед початком навчання моделі, інженери монтують архів через Ratarmount. Навчальний скрипт зчитує батчі даних напряму з архіву без втрати продуктивності.

2. Аналіз резервних копій (Backups)

Коли сисадміну потрібно відновити один конфігураційний файл із тижневого бекапу сервера розміром у кількасот гігабайт, розпакування всього архіву є нераціональним. Маючи Ratarmount, можна за хвилину знайти і скопіювати конкретний файл.

3. Робота на пристроях з обмеженою пам’яттю

На хмарних інстансах або embedded-пристроях із невеликими SSD-накопичувачами для розпакування великих логів чи дистрибутивів часто фізично немає місця. Монтування повністю закриває це питання. 

Швидкий старт: базові команди

Інструмент написаний на Python і легко встановлюється через менеджер пакетів pip або системні репозиторії:

pip install ratarmount 

Як змонтувати архів

Створюємо порожню папку (точку монтування) і викликаємо Ratarmount, вказавши шлях до нашого архіву:

mkdir ~/mounted_archive 
ratarmount my_large_data.tar.gz ~/mounted_archive

Тепер можна спокійно заходити в папку ~/mounted_archive через cd або відкривати її у графічному менеджері файлів та працювати.

Як розмонтувати

Коли робота завершена, звільняємо ресурси FUSE стандартною командою:

unmount ~/mounted_archive

Попередня команда може не спрацювати на macOS або на деяких дистро Linux, тому скористайтесь цією: 

fusermount -u ~/mounted_archive 

Корисні посилання

Exit mobile version