Btrfs 是否提供除路径之外的任何方法来识别文件?我的意思是,如果有一个文件/my/directory/a.txt
,并且有人或某物将其移动到/my/other/directory/b.txt
,它仍然是同一个文件,但由于路径已更改,我将无法知道“b.txt”是否是“a.txt”。 TXT”。
答案1
有索引节点号(请参阅ls -i
、stat
),就像许多(所有?)其他 *nix 文件系统一样。在 Btrfs 中,它们是稳定的(它们在重新启动后不会改变,如果您安装在另一台机器上,它们也不会改变),但仅在子卷内唯一(不在整个文件系统1内);并且它们可以重复使用。
同一子卷内同时报告相同 inode 号的两条路径通向同一文件;这是硬链接如何工作。但一般来说你无法确定今天的索引节点号是否氮与昨天的文件相同氮。
将硬链接保留在无人可以访问的目录中可能是一种解决方法;因为只要硬链接存在,其索引节点号就不能在同一子卷内重复使用。然后你可以列出具有相同索引节点号的所有文件一经请求。
在某些情况下,您仍然无法跟踪该文件,因为在新位置,它在形式上是一个不同的文件。这些包括:
- 当原件通过复制+删除而“移动”时(无论是否 CoW 复制)。
- 当原件移动到另一个子卷时。
- 当原始文件移动到另一个文件系统时(这是复制+删除真的)。
1注意两个不同的子卷意味着两个不同的设备编号,甚至如果它们可以在单个安装点(安装了它们的(大-...-)父子卷)下访问。这就是 Btrfs 的工作原理。
答案2
我想说你应该创建一个到该文件的硬链接,例如。和
ln -L /path/to/a.txt /unique/path/in/the/same/fs
如果成功,即使文件被重命名或删除,您仍然可以访问该文件。
我不知道有什么方法可以创建“弱”硬链接(当删除文件的所有其他硬链接时会自动删除的硬链接)。