我在玩 btrfs,它允许cp --reflink写时复制。其他程序,例如lxc-clone,也可能使用此功能。我的问题是,如何判断一个文件是否是另一个文件的 CoW?就像硬链接一样,我可以从 inode 编号看出。
小智 8
好问题。看起来目前没有任何简单的高级方法可以分辨。
一个问题是文件可能仅通过写时复制共享部分数据。这称为物理盘区,部分 或 全部物理盘区可以在 CoW 文件之间共享。
(编辑:请参阅我的其他答案)。inode在文件之间进行比较时,没有任何类似的东西会告诉您文件共享相同的物理范围。
低级答案是,您可以使用 来询问内核哪些物理盘区用于文件,该文件记录在. 原则上,如果所有物理盘区都相同,则文件必须共享相同的底层存储。FS_IOC_FIEMAP ioctlDocumentation/filesystems/fiemap.txt
很少有东西实现了一种在更高层次上查看这些信息的方法。我在这里找到了一些代码。显然,该filefrag实用程序应该使用 -v 显示范围。此外,btrfs-debug-tree显示此信息。
然而,我会谨慎行事,因为这些东西在野外可能没有什么用处,你可能会发现错误给你错误的答案,所以当心依赖这些数据来决定可能导致数据损坏的操作。
一些相关问题:
小智 5
最简单的解决方案是使用btrfs filesystem du .
Exclusive,如果是 CoW,则为 0.00B。
在这里找到:https ://unix.stackexchange.com/a/655813/525352
| 归档时间: |
|
| 查看次数: |
3353 次 |
| 最近记录: |