Архивирование большого количества файлов / одного большого файла
Я хочу сжать около 100'000 файлов (вот что find . -type f | wc -l
говорит) с общим использованием диска 100 ГБ. Большинство файлов небольшие, но лишь немногие из них составляют около 70 ГБ из 100 ГБ.
Я не хочу использовать tar или tar.gz для этого, потому что, если я хочу получить доступ к архиву, File Roller сначала должен прочитать весь архив с внешнего жесткого диска, прежде чем я смогу увидеть список файлов. То же самое, если я пытаюсь перечислить файлы на терминале.
Мне не нужно управление правами tar, потому что я помню несколько файлов, которым нужны другие права, чем другие. Какой алгоритм сжатия я должен использовать?
И пока я на этом: я делаю полное резервное копирование диска с помощью этой команды:
dd if=/dev/sda bs=32M | gzip -9 > /location/dateAndMachineName.gz
Это делает довольно хорошее сжатие. Но знаете ли вы лучший алгоритм сжатия?
2 ответа
Единственное известное мне решение - это pixz ( sudo apt-get install pixz
), вариант xz с использованием заблокированного кодера, который обеспечивает быстрый случайный доступ / индексацию. Кроме того, это параллельный метод с использованием нескольких ядер для сжатия.
Ссылаясь на документы:
Существующие утилиты XZ ( http://tukaani.org/xz/) обеспечивают отличное сжатие в формате файлов.xz, но у них есть две существенные проблемы:
- Они являются однопоточными, в то время как большинство пользователей в настоящее время имеют многоядерные компьютеры.
- Производимые ими файлы.xz представляют собой всего лишь один большой блок сжатых данных, а не набор небольших блоков. Это делает невозможным произвольный доступ к исходным данным.
С pixz обе эти проблемы решены.
Использование простое:
tar -Ipixz -cf foo.tpxz foo
сжать папку foo
pixz -l foo.tpxz
перечислить файлы в нем (быстро!)
pixz -x <file_path> < foo.tpxz | tar x
извлечь один файл, данный <file_path>
в архиве
В качестве бонуса вы также сохраните права доступа, так как файлы сначала сохраняются!
Я могу подумать только об одном решении для вас: создать новый раздел с файловой системой btrfs и активировать прозрачное сжатие. Имейте в виду, что некоторые люди все еще рассматривают btrfs как "экспериментальную" файловую систему. Тем не менее, мой вторичный резервный жесткий диск использует btrfs (немногим более 2 лет), и до сих пор он дал мне 0 проблем. Но как обычно YMMV.
Это и это должно помочь вам начать работу с btrfs, если вы с ним еще не знакомы.