ファイル圧縮の高速化メモ

環境

$ cat /etc/issue
Debian GNU/Linux 12 \n \l

メモ

7-Zip

著名で当ブログでも度々登場する 7-Zip。

$ apt-cache search 7zip | grep '7zip'
p7zip - 高圧縮率を誇る 7zr ファイルアーカイバ
p7zip-full - 高圧縮率を誇る 7z および 7za ファイルアーカイバ
7zip - 7-Zip file archiver with a high compression ratio

$ dpkg -l | grep p7zip-full
ii  p7zip-full                            16.02+dfsg-8                        amd64        7z and 7za file archivers with high compression ratio

扱うフォーマットごとに使えるオプションが違うことを初めて知った...
マニュアルを読むと確かに 7zzip で違う...

$ man 7z
HTML Documentation
       /usr/share/doc/p7zip-full/DOC/MANUAL/start.htm
# Zip(シングルコアで圧縮される)
$ 7za a -mmt=on -mx=1 -mhe=on -mem=AES256 -ssw -pXXXXX /OUTPUT.7z /INPUT/DIR -r
# 7z の時はマルチコア圧縮されるけど、暗号化形式を選べない(AES256固定の模様)
$ 7z a -mhe=on -ssw -p -v10g -mx=1 -mmt=on OUTPUT.7z /INPUT/DIR -r

XXXXX はパスワードを設定する場所(-p だけだと標準入力から設定できる)。

pigz

複数コアを使って圧縮してくれる GZip ツール。

$ apt-cache search pigz | grep -E '^pigz'
pigz - Parallel Implementation of GZip

圧縮と同時に暗号化して欲しかったけど、機能がないようなので openssl で別個に対応。

# gz で固めて、openssl で暗号化
$ tar --use-compress-program="pigz -k -0" -cf "OUTPUT.tar.gz"  "/INPUT/DIR"
$ openssl enc -e -aes-256-cbc -pbkdf2 -md sha-256 -in  "OUTPUT.tar.gz" -out "OUTPUT.tar.gz.dat"   -pass env:ENCRYPTION_KEY

-pass env は環境変数を使用する。
下記のように設定する。

$ ENCRYPTION_KEY=xxx
$ export ENCRYPTION_KEY