Btrfs

Btrfs 是否提供某種方式來辨識文件,即使路徑已更改,例如不變的 ID?

  • October 12, 2020

Btrfs 是否提供任何方法來辨識文件而不是其路徑?我的意思是,如果有一個文件/my/directory/a.txt,如果有人或某事將它移到/my/other/directory/b.txt,它仍然是同一個文件,但由於路徑已更改,我無法知道“b.txt”是否為“a.txt”。文本”。

inode 編號(參見ls -i, stat),就像在許多(全部?)其他 *nix 文件系統中一樣。在 Btrfs 中它們是穩定的(重啟後它們不會改變,如果你掛載在另一台機器上它們也不會改變),但僅在子卷內是唯一的(而不是在整個文件系統1內);並且可以重複使用。

在同一子卷內同時報告相同 inode 編號的兩條路徑通向同一文件;這就是硬連結的工作方式。但總的來說,您無法確定今天的 inode 編號N是否與昨天的N相同。

在沒有人可以訪問的目錄中保留硬連結可能是一種解決方法;因為只要硬連結存在,它的 inode 號就不能在同一個子卷內重複使用。然後,您可以按需列出所有具有相同 inode 編號的文件。

仍然存在無法跟踪文件的情況,因為在新位置它是正式的不同文件。這些包括:

  • 當通過複製+刪除來“移動”原件時(無論是否為 CoW 複製)。
  • 當原件移動到另一個子卷時。
  • 當原始文件移動到另一個文件系統時(這實際上是複制+刪除)。

1注意兩個不同的子卷意味著兩個不同的設備號,即使它們可以在單個掛載點下訪問(它們的 (grand-…-) 父子卷被掛載的地方)。這就是 Btrfs 的工作原理。

引用自:https://unix.stackexchange.com/questions/614022