Под Solaris 10 у меня есть каталог под названием apps. Я иду в этот каталог и введите:

-bash-3.00# du -hs
7.2G   .

Затем я вошел:

tar -cvf /var/run/apps.tar apps

Результат:

-bash-3.00# ls -lad apps.tar 
-rw-r--r--   1 root     root     14174289408 Mar  5 16:05 apps.tar

Как каталог 7 ГБ может стать смолой 14 ГБ?

2 ответа2

1

tar сам по себе не особенно эффективен для хранения небольших файлов. Он использует блоки фиксированного размера 512 байт. Метаданные также хранятся менее компактно, чем в файловой системе. Расхождение, которое вы наблюдаете, может быть вызвано значительным количеством небольших файлов в каталоге ваших приложений.

Чтобы смягчить этот эффект, я бы предложил сжать вывод tar следующим образом:

  tar cvf - apps | gzip -v > /var/run/apps.tgz

Если вы используете GNU tar, это будет:

  gtar czvf /var/run/apps.tgz apps
1

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

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

Если вы хотите создать небольшой файл для резервного копирования или передачи в другую систему, я предлагаю вам сжать файл tar с помощью файла Gzip (в tar.gz) или другого алгоритма сжатия, чтобы получить файл намного меньшего размера. Тар-файлы имеют тенденцию хорошо сжиматься, поэтому это должно привести к тому, что файл будет значительно меньше указанных 14 ГБ

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