避免将缓存写入 USB 驱动器时管道停顿

避免将缓存写入 USB 驱动器时管道停顿

我有以下用于备份的过程:

btrfs send snapshots/home-2016-06-04 |
zstd --verbose -T4 - |
gpg --batch --passphrase-file /tmp/secret --compress-algo none --symmetric - >
/mnt/usbdrive/packup.zst.gpg

但我发现,虽然它在 100% CPU 下运行得非常快一段时间,但对 USB 驱动器的写入会被缓冲,然后整个管道在同步到驱动器时​​突然停止。然后它在这两种状态之间交替。

我想要实现的是zstd --adapt -T1正常工作。根据手册页

zstd 将根据感知的 I/O 条件动态调整压缩级别。

这应该提供最佳的吞吐量,以便对拇指驱动器的写入达到最大(40 MB/s - 使用 dd 测试),并且zstd不会填满其缓冲区。

我怀疑我可以通过添加dd作为管道的最后阶段来实现这一点;我已经尝试过使用direct fsyncdatasync选项oflag,但无济于事。

有什么方法可以实现这一目标吗?我假设问题出在写入缓存上是否正确?

相关内容