tar удвоил размер каталога
Под 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 ответа
tar сам по себе не особенно эффективен при хранении небольших файлов. Он использует блоки фиксированного размера 512 байт. Метаданные также хранятся менее компактно, чем в файловой системе. Расхождение, которое вы наблюдаете, может быть вызвано значительным количеством небольших файлов в каталоге ваших приложений.
Чтобы смягчить этот эффект, я бы предложил сжать вывод tar следующим образом:
tar cvf - apps | gzip -v > /var/run/apps.tgz
Если вы используете GNU tar, это будет:
gtar czvf /var/run/apps.tgz apps
Tar не выполняет никакого сжатия файлов и всегда создает результирующий tar-файл, который больше, чем сумма всех файлов, которые были в него помещены.
Точная причина, по которой tar намного больше, может быть вызвана одним из нескольких факторов, таких как большое количество небольших файлов, которые не могут быть эффективно сохранены, жесткие ссылки, приводящие к дублированию в дереве каталогов или сглаживанию разреженных файлов, что приводит к значительно больше неразбавленных файлов в репозитории tar.
Если вы хотите создать небольшой файл для резервного копирования или передачи в другую систему, я предлагаю вам сжать файл tar с помощью файла Gzip (в файл tar.gz) или другого алгоритма сжатия, чтобы получить файл намного меньшего размера. Тар-файлы имеют тенденцию хорошо сжиматься, поэтому это должно привести к тому, что файл будет значительно меньше указанных 14 ГБ.