如何在 BTRFS 文件系统上以读写和只写方式列出打开的文件?

How to list open files in read-write and write-only on a BTRFS filesystem?

我正在编写 bash 备份脚本,它会在已安装的卷(即 /mnt/btrfs/subvolume)上创建 BTRFS 子卷快照。 像往常一样,我会使用 "lsof /mnt/btrfs/subvolume" 并将其输出通过管道传输到 "awk 'NR==1 || ~/[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 上工作,并且不会 return 打开文件进行写入。我最好的猜测是 BTRFS 子卷使用 "Copy on Write",因此 kernel/lsof 以某种方式被愚弄并且没有显示这些更改。 有谁知道,我如何检查已安装的 BTRFS 子卷下是否有任何文件 changed/written?

此致

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

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

我正在使用 Debian 10 进行测试,出于某种原因,lsof /some/BTRFS_mount_point 永远不会 return 写入,这在类似的挂载 ext4 卷上运行良好。