2011-12-01 555 views
7

我已經通過了一些文檔。它們在硬鏈接或軟鏈接佔用文件系統中的任何空間方面都有很大的差異。任何人都可以爲我解決這個問題嗎?做硬鏈接或軟鏈接在文件系統中佔用任何空間?

對於硬鏈接,我發現這一點:

我在我的主目錄的文件C1這是我在同directory.both C1和B1硬鏈接與D1具有當我做一個「LS 11字節size.Now -lrt「列出的所有文件(不包括d隱藏的課程文件)的總字節數爲64字節。現在當我刪除hardlink d1並再次執行ls -lrt時,它會給我60個字節。這並不意味着硬鏈接會佔用硬盤空間,但很多docs.negate這個事實,爲什麼?

我可以檢查相同的方式創建一個軟鏈接的文件,然後刪除它,但由於我的軟鏈接只有2字節大小,我不認爲刪除它會有一個顯着的影響, ls -lrt的輸出。

那麼這是什麼?

回答

6

是的。他們都佔據了空間,因爲他們仍然有目錄條目。

硬鏈接條目(實際上,[通常]共享inode的「普通條目」)需要空間,而鏈接條目必須以某種方式存儲鏈接路徑(文本本身)。由於確切的文件系統實現(例如塊/樹大小以及符號鏈接存儲方式)確定的分配/佈局規則,所需的實際空間略有不同。

然而,空間的數量是最小並且可能[幾乎總是]與文件本身中的數據關係不一致。

+2

擴展您的最後一句話:...除非它是一個包含許多小文件的系統,並且您沒有足夠的inode。在某些文件系統上,這是一個現實的場景,我已經遇到了它,儘管沒有與符號或硬鏈接結合使用。 – 0xC0000022L

10

當然,他們佔據的空間(一點點):

  • 硬鏈接的文件有多個目錄條目。每個條目佔用目錄本身的空間,但從此以後,它們共享相同的結構:inode和數據區域是共享的。但我不確定這是如何計算的;也許目錄條目總是佔用一定數量的倍數。

  • 符號鏈接還佔用目錄條目的空間,另外還有一個inode,它包含關於鏈接屬性以及鏈接目標本身的信息。

隨着小尺寸(文件中的11個字節的數據)的開銷計算比真實的數據了。然而,對於更大的文件,這種少量字節的小開銷可以忽略不計。

1

簡而言之,硬鏈接是對文件系統中inode的引用。有些實用程序會錯誤地讀取它。它不會佔用任何磁盤空間。

+3

從什麼時候inodes *不佔用空間? ... – 0xC0000022L

+3

inode確實佔用了空間先生,我100%同意,但對於所說的inode的引用在整個磁盤空間方面是非常可以忽略的。我希望這清除了我的答案。 –

+0

這根本就是錯的。鏈接是需要存儲在「某個地方」的一條信息。根據您的文件系統,這個處理方式稍有不同,但需要存儲。 –

6

ls是錯的!

它重複計算硬鏈接文件多次。 ls -l只會將每個條目的塊編號加起來,不管它有多少個硬鏈接。

(使用ls -1si顯示每個文件的inode號以及塊利用率)

嘗試du -Ssb .代替。這會以字節爲單位給你正確的磁盤使用量。除非你使用-l開關,這將重現ls的行爲。