大容量のバックアップフォルダをtar、圧縮、暗号化しようとしていますが、gpgがシングルスレッドであると考えているため、プロセスは遅くなります。私はルートフォルダを分割するためにパーティションを使用しようとしました。
これは可能ですか、それとも私が何か間違っていますか?
tar -I pigz -cf - source \
| gpg -c -o destination --passphrase-file xyz --batch --no-tty --cipher-algo AES256 --compress-algo none --no-options - 2 \
| split --additional-suffix=.tar.part -b 1G - "backup-test" >>/log.out
答え1
箱
tar --create --format=posix --preserve-permissions --same-owner --directory $BASE/$name --to-stdout . |
parallel --pipe --recend '' --keep-order --block-size 128M "xz -9 --check=sha256 | gpg --encrypt --recipient $RECIPIENT;echo bLoCk EnD" |
pv > $TARGET/$FILENAME
荷物などから取り出す
cat $TARGET/$FILENAME |
parallel --pipe --recend 'bLoCk EnD\n' -N1 --keep-order --rrs 'gpg --decrypt | xz -d' |
tar tv
-N1
一度に1つのレコードを通過することを確認する必要があります。 GnuPGは複数のマージレコードの復号化をサポートしません。
答え2
Oleの提案に感謝します。さらなる調査によると、ボトルネックはAmazon S3遅延ロードによるものであることがわかりました。スナップショットからebsボリュームをリンクしました。これはまだ非常に遅いです。私たちはスピードを上げるためにfioを使用しました。
echo "今ファイルの初期化が開始されます: date
" FILES=$(ls -d /mnt/database/files/database_*) echo $FILES
for f in $FILES do echo "Reading file $f" # これにより、すべての出力が停止し、プロセスが続行されます。 sudo fio --opendir="$f" --rw=read --bs=128k --iolength=32 --ioengine=libaio --direct=1 --name="$f" --openfiles=1000 > /開発/ボード2>&1 &
完璧