0

我正在编写一个 bash 备份脚本,它在已安装的卷(即 /mnt/btrfs/subvolume)上创建 BTRFS 子卷快照。像往常一样,我会使用“lsof /mnt/btrfs/subvolume”并将其输出通过管道传输到“awk 'NR==1 || $4~/[0-9][uw]/'”之类的东西,所以我可以看看是否有任何变化的文件。

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
sh       5019 root    1w   REG   8,35  2088960      12 /mnt/ext4/currently_generated_archive.tar.xz

这不会以相同的方式在 BTRFS 上工作,并且不会返回打开的文件进行写入。我最好的猜测是 BTRFS 子卷使用“写入时复制”,因此内核/lsof 不知何故被愚弄并且没有显示这些更改。有谁知道,我如何检查是否有任何文件在安装的 BTRFS 子卷下被更改/写入?

问候

4

1 回答 1

0

我通过省略 lsof 的所有参数并直接 grepping 查找 BTRFS 挂载点并最终应用写过滤器来解决这个问题,所以它变成了:

lsof | grep /some/BTRFS_mount_point | awk '$4~/[0-9][uw]/'

我正在使用 Debian 10 进行测试,由于某种原因 lsof /some/BTRFS_mount_point 永远不会返回写入,这适用于类似的挂载 ext4 卷。

于 2020-03-26T14:13:05.470 回答