创建并行 gpg

创建并行 gpg

我正在尝试 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 &

完毕

相关内容