我有以下用于备份的过程:
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
,但无济于事。
有什么方法可以实现这一目标吗?我假设问题出在写入缓存上是否正确?