我正在尝试 tar、压缩和加密一个大型备份文件夹,但过程很慢,因为我相信 gpg 是单线程的。我一直在尝试使用 split 来划分根文件夹,因此我不会加密单个较大的 tar 球,而是会做很多。
这可能吗还是我做错了什么?
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
需要确保我们一次传递一条记录。 GnuPG 不支持解密多个合并记录。
答案2
感谢您的建议奥莱。进一步调查显示瓶颈是 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 --io深度=32 --ioengine=libaio --direct=1 --name="$f" --openfiles=1000 >/开发/空 2>&1 &
完毕