Btrfs 是否提供某种方式来识别文件,即使路径发生更改,例如不变的 ID?

Btrfs 是否提供某种方式来识别文件,即使路径发生更改,例如不变的 ID?

Btrfs 是否提供除路径之外的任何方法来识别文件?我的意思是,如果有一个文件/my/directory/a.txt,并且有人或某物将其移动到/my/other/directory/b.txt,它仍然是同一个文件,但由于路径已更改,我将无法知道“b.txt”是否是“a.txt”。 TXT”。

答案1

索引节点号(请参阅ls -istat),就像许多(所有?)其他 *nix 文件系统一样。在 Btrfs 中,它们是稳定的(它们在重新启动后不会改变,如果您安装在另一台机器上,它们也不会改变),但仅在子卷内唯一(不在整个文件系统1内);并且它们可以重复使用。

同一子卷内同时报告相同 inode 号的两条路径通向同一文件;这是硬链接如何工作。但一般来说你无法确定今天的索引节点号是否与昨天的文件相同

将硬链接保留在无人可以访问的目录中可能是一种解决方法;因为只要硬链接存在,其索引节点号就不能在同一子卷内重复使用。然后你可以列出具有相同索引节点号的所有文件一经请求。

在某些情况下,您仍然无法跟踪该文件,因为在新位置,它在形式上是一个不同的文件。这些包括:

  • 当原件通过复制+删除而“移动”时(无论是否 CoW 复制)。
  • 当原件移动到另一个子卷时。
  • 当原始文件移动到另一个文件系统时(这是复制+删除真的)。

1注意两个不同的子卷意味着两个不同的设备编号,甚至如果它们可以在单个安装点(安装了它们的(大-...-)父子卷)下访问。这就是 Btrfs 的工作原理。

答案2

我想说你应该创建一个到该文件的硬链接,例如。和

ln -L /path/to/a.txt /unique/path/in/the/same/fs

如果成功,即使文件被重命名或删除,您仍然可以访问该文件。

我不知道有什么方法可以创建“弱”硬链接(当删除文件的所有其他硬链接时会自动删除的硬链接)。

相关内容