4

Может быть, вариация всего вопроса будет такой: существуют ли другие инструменты архивации, кроме tar которые сохраняют права доступа к файлам Linux и флаги пользователей / групп?

Я хочу создать архивы дерева каталогов на моем Ubuntu Box. Деревья каталогов большие, при первом запуске tar cvpzf archive.tgz /home/foo/bar 5 ГБ архива.

Я также хочу сохранить все разрешения и другие флаги и специальные файлы.

Я в порядке с архивом 5 ГБ, однако, чтобы заглянуть внутрь этого архива - поскольку это сжатый tar-архив - сначала нужно распаковать все 5 ГБ! (Или так появляется при его открытии в средстве просмотра архива - я рад, что поправился.)

Поэтому мне нужен способ "сделать резервную копию" каталога (дерева), сохранив при этом полные атрибуты файловой системы и правильно создать архив с "индексом", который не нужно распаковывать для просмотра его содержимого.


Изменить: указав, что я считаю архивом после ответа Уолли :

Архив представляет собой либо один файл, либо (небольшой) набор файлов, который содержит полную и полную информацию в этом файле / файлах. То есть он может жить в любой файловой системе (если позволяет размер), его можно записать на DVD, вы можете split его (после чего смысл этого вопроса действительно теряется - но все же), ...

4 ответа4

4

Я сталкивался с этой проблемой несколько раз. Вот что я понял.

ZIP
Файлы .zip поддерживают разрешения Unix и символические ссылки, если они созданы с использованием утилиты zip, установленной в большинстве систем Linux. Однако он не поддерживает все расширения, поддерживаемые tar , такие как жесткие ссылки и расширенные атрибуты. Но вы можете извлекать файлы из ZIP-архивов, не распаковывая весь архив до этого момента, так что это победа.

SquashFS
Если вы ищете монтируемую сжатую файловую систему только для чтения, то основным претендентом в настоящее время является SquashFS. Но есть ловушка ... ну, несколько ловушек, правда. В частности:

  • SquashFS является относительно новым и не так широко поддерживается, как такие инструменты, как tar .
  • Существует два формата на диске, созданные двумя разными версиями инструмента, которые не совместимы друг с другом. Убедитесь, что вы получите правильный.
  • Драйвер FUSE отсутствует - вам нужна поддержка ядра для вашей версии squashfs для монтирования образов.
  • Вспомогательные инструменты (mksquashfs и unsquashfs) довольно просты и не поддерживают широкий диапазон параметров, которые вы видите в tar .
  • Там не много документации.
2

Основная проблема, кажется, в том, что

... чтобы заглянуть внутрь этого архива ... сначала нужно распаковать все 5 ГБ! (Или так появляется при открытии его с помощью средства просмотра архива ...)

Это правда, что он должен быть распакован, но это не означает, что необходимо "распаковать" все файлы в файловую систему.

Чтобы извлечь один или несколько файлов, tar распакует весь архив, но откажется от всего, кроме файлов, перечисленных в качестве аргументов.
Аналогичным образом, перечисление имен файлов с помощью -t (--list) должно распаковать весь архив, но удаляет все содержимое файла.

Чтобы понять, почему в начале архива нет индекса, следует принять во внимание, что tar изначально создан для работы с магнитными ленточными устройствами; Отсюда и название tar - как ленточный архиватор. На ленту вы хотите добавить следующий файл в конце, вы не хотите перематывать в начало для записи индекса.

1

Знаете ли вы о функции tar t для распечатки содержимого архива? Вы можете использовать его в сжатом архиве gzip следующим образом:

tar ztvf archive.tgz

И он распечатает файлы в виде длинного списка, такого как формат, включая метки времени и размеры. Оказывается, если вы используете две опции v при создании архива, он будет долго перечислять файлы (а не просто перечислять их) при добавлении их в архив, так что вы можете сделать что-то подобное для автоматического создания индекса пока вы копируете за один раз:

tar cvvpzf archive.tgz /home/foo/bar > archive.tgz.index

Обратите внимание на использование двух вариантов v. Многие другие команды позволяют увеличить многословие таким образом (например, ssh).

1

Возможно, вы захотите взглянуть на fusecompress, который "предоставляет монтируемую файловую систему Linux, которая прозрачно сжимает ее содержимое. Файлы, хранящиеся в этой файловой системе, сжимаются на лету, и Fuse позволяет создать прозрачный интерфейс между сжатыми файлами и пользовательскими приложениями ».

Пользователь может получить доступ к сохраненным файлам, как будто они не сжаты.

Но если у вас есть место, почему бы просто не скопировать дерево каталогов? Simpler.

Другой вариант - скопировать деревья каталогов на USB-диск. Это обеспечит легкий доступ и защитит от сбоя диска.

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