2009-08-28 126 views
2

我知道這是硬鏈接的條件,他們不能跨越文件系統。這是否適用於NFS掛載?鑑於以下目錄結構,我能否在目錄A中創建指向目錄B中文件的硬鏈接?NFS +硬鏈接?

/root 
    /A 
    /B <-NFS mount 

例如,我想運行ln /root/B/file.txt /root/A/linkedfile.txt

回答

6

那麼,既然/B是一個獨立的文件系統(掛載NFS文件系統),你不能讓它和/A之間的硬鏈接,因爲它們不在同一個文件系統上。

這是因爲硬鏈接不作只放一個的指針該數據的副本數據的副本,所以他們必須要在同一個「地址空間」。

+7

從某種意義上說,硬鏈接和軟鏈接都是*指針*。不同之處在於軟鏈接將文件系統路徑的文本表示存儲到目標,而硬鏈接(因爲它只是一個目錄條目)只存儲目標的inode nubmer,因此必須與目標文件系統位於同一文件系統鏈接本身所在的目錄。 – 2009-08-28 17:10:12

+0

我的吊墜感覺不得不指出硬鏈接的替代方式是*符號*鏈接。 – 2011-07-07 19:49:49

+4

我想在目錄中添加文件名也只是指針。沒有「原始文件」的概念和「該文件的硬鏈接」 - 它們是一個對象的兩個名稱,並且這兩個名稱都不是特殊的。和@JesseHallett,我不同意他們是替代品的想法。我認爲最好只是說他們是不同的東西。 – 2011-10-04 21:35:10

6

首先明確一個硬鏈接是一個好主意。

通常在類Unix系統中,目錄中的文件名指向inode編號 - 實質上是文件的編號。 「硬鏈接」只是使用相同的inode編號創建另一個文件名。現在,您必須指向指向相同編號文件的不同名稱。

但請注意,這兩個名稱之間並沒有真正的直接聯繫。關係是Name1和Name2的索引節點編號都設置爲12756--但是沒有什麼可以容忍的,並且說「我手上的這個東西是兩個文件之間的鏈接」。它們只是兩個共享一個ID號碼的數據庫條目。對於共享ID號的文件名,您可以執行查詢(因爲您正在瀏覽系統上的每個文件條目都很慢),但就是這樣。

因此,它並不意味着任何創建「兩個文件系統之間的硬鏈接」 - 因爲兩個文件系統有不同的編號方案(系統1上的inode 1234和系統2上的1234,指向完全不同的文件),以及你唯一需要存儲的是一個名字+ inodeNumber,沒有什麼可做的。