2

Извлечение отдельного файла из zip-файла - это быстрая операция, поэтому я предположил, что это будет также верно для TAR, но я узнал, что даже если TAR-файл не сжат, для извлечения файла может потребоваться много времени , Я использовал tar для резервного копирования своей домашней папки на OS X, и тогда мне нужен был один файл. Поскольку tar не знает, где находится файл, ему нужно было отсканировать весь файл объемом 300 ГБ, прежде чем можно было извлечь его. Это означает, что TAR - ужасный формат для большинства сценариев резервного копирования, поэтому я хотел бы узнать о моих возможностях.

Итак, какие форматы архивных файлов подходят для быстрого извлечения одного файла?

Хотя этот вопрос на самом деле не о сжатии, я не возражаю против форматов списков ответов, которые сочетают в себе архивирование и сжатие (например, zip), и в этом случае будет иметь значение « сплошное сжатие ».

3 ответа3

2

Похоже, скорость и эффективность извлечения являются вашими основными проблемами, и я предполагаю, что вы используете linux или macOS, поэтому хотите сохранить специальные атрибуты файлов (те, которые zip & 7z игнорируют). В этом случае отличный формат архива будет:

  • Файловая система ext [2/3/4] - просто скопируйте файлы куда-нибудь, а затем извлечь один файл так же быстро и просто, как смонтировать и прочитать исходный файл. Вы можете поместить всю файловую систему архива в один файл архива, если хотите, просто создайте файл достаточно большого размера, отформатируйте и смонтируйте его (даже не нужно больше использовать параметр -o loop ).

    Плюсы:

    • Приятным бонусом является то, что вы можете легко добавить шифрование (LUKS) ко всему архивному файлу или любое другое шифрование, поддерживаемое файловой системой (eCryptFS, EncFS и т.д.).

    • Вы также можете легко использовать решения для резервного копирования на основе rsync.

    • Файлы легко добавлять / удалять (вплоть до общего размера файла архива).

    Минусы:

    • Если вы используете один архивный файл, вы должны выбрать его размер перед добавлением файлов, и он не будет динамически изменять размер.
    • Все еще возможно расширить или сжать весь архив, даже если он находится в одном файле, но вам нужны инструменты, такие как resize2fs чтобы сжать файловую систему, а затем truncate чтобы сжать файл (или наоборот, чтобы развернуть).
  • Та же файловая система, которую вы уже используете, на случай, если вы используете macOS, и ей нравится что-то отличное от ext. Я почти уверен, что команда mount в macOS тоже работает с одним большим архивным файлом.

Если вы также хотите немного сжать, то, как правило, для этого нужны надежные архивы и медленное чтение. Некоторые файловые системы поддерживают сжатие напрямую (btrfs, reiserfs/reiser4, планируется для ext?) но я бы просто пошел с:

  • SquashFS - это может быть King сжатия, сохраняющий атрибуты файла и позволяющий быстро извлекать отдельный файл (фактически монтируя и просматривая каждый файл). Это также отлично подходит для архивов, и имеет регулируемые уровни сжатия, используйте его.

    Или, возможно, объединить его с инкрементным резервным копированием и наложением для хорошего решения «частичное резервное копирование, но полные файлы».

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

    Или просто используйте существующий резервный продукт (Time Machine?).

Если вы действительно хотите использовать такой архив, как 7z/zip, но при этом сохранить атрибуты файла, вы можете сохранить каждый файл отдельно (сохраняя атрибуты), а затем сохранить отдельные файлы tar в архиве 7z/zip. Требуется дополнительный шаг с большим количеством неприятностей, но он позволит вам легко извлечь один (tar'd) файл, а также развернуть или сжать архив без повторного сжатия всего (если это не сплошной архив).

-1

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

-1

Большинство современных форматов архивов сжатия включают базу данных или каталог файлов и папок, хранящихся в них. К ним относятся: 7-Zip, ACE, ARC, ARJ, BZIP2, CAB, CPIO, GZIP, IMG, ISO (ISO9660), LHA, RAR, RPM, SFX, SQX, TAR, TBZ (TAR.BZ), TGZ (TAR .GZ), TXZ (TAR.XZ), XZ, ZIP, Zip64 и ZOO. Эти форматы позволят вам извлекать отдельный файл или папку по мере необходимости.

ZIP является наиболее распространенным и широко используемым. Некоторые операционные системы, такие как Windows, имеют встроенную поддержку ZIP-файлов, что позволяет использовать ZIP-файл, как если бы это была стандартная папка.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .