![避免将缓存写入 USB 驱动器时管道停顿](https://linux22.com/image/153901/%E9%81%BF%E5%85%8D%E5%B0%86%E7%BC%93%E5%AD%98%E5%86%99%E5%85%A5%20USB%20%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%97%B6%E7%AE%A1%E9%81%93%E5%81%9C%E9%A1%BF.png)
我有以下用于备份的过程:
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
fsyncdata
和sync
选项oflag
,但无济于事。
有什么方法可以实现这一目标吗?我假设问题出在写入缓存上是否正确?