關於硬鏈接與軟連接佔用磁盤空間問題的分析研究


在學習過硬鏈接和軟連接的知識後,我們在做實驗的過程中會發現,創建的硬鏈接會佔用磁盤的空間,而我們學習過成中瞭解到,硬鏈接只是創建一個文件與源文件相同的inode號,那怎麼還會佔用磁盤空間呢?i_f15.gif帶着疑問,跟隨夾克來進行一些實驗進行驗證並得出結論:

首先我們再來回顧一下關於 硬鏈接與軟連接的知識:

硬鏈接的特點:

wKioL1lvUGjQ8TirAAAnGNq3aDs576.png

      i_f48.gifl  創建硬鏈接會增加額外的記錄項以引用文件

l  對應用於同一文件系統上的一個物理文件

l  每個目錄引用相同的inode 號

l  創建時鏈接數遞增

l  刪除文件時,遞減鏈接數,當鏈接數爲0時,該文件已被刪除

l  硬鏈接的建立是不能越驅動器或分區的

l  語法爲:ln filename linkname

軟鏈接的特點:

     wKiom1lvUGjTXRJMAAAtjT6GldQ692.png

 

    i_f48.gifl與硬鏈接最大的不同就是,軟鏈接並不使用相同的inode號,同時

        也不增加或減少目標文件inode的引用計數

l  創建的鏈接只是對應的指向源文件的路徑,所以可以對目錄進行鏈     接,硬鏈接中只能對文件進行鏈接,

l  既然軟鏈接是指向的一個文件的路徑,所以可以跨越分區進行。

l  語法爲:ln –s filenamelinkname

硬鏈接測試:

從上面我們對硬鏈接和軟鏈接的特點分析可知道,硬鏈接所創建的是一個使用相同的inode號,根據我們的理解,兩個相同的文件對應一個inode號,指向硬盤中相同的數據羣塊,但是我們通過下面一個實驗發現有些蹊蹺,一起來看看吧!

在/app目錄下創建一個文件,我這裏創建了一個4.9G大的文件,

wKioL1lvTvryo42DAAAOvuFDmTM298.png

接下來我們來設置一個硬鏈接:

wKioL1lvTvqiTbORAAAZIXyN4JU168.png

咦?怎麼大小變成9.8G了呢?這完全是翻倍了呀!小夥伴們是不是有了疑問,統計的數據反應出硬鏈接佔用了同的空間,我剛開始也很鬱悶,一度懷疑是不是硬鏈接也佔用了空間,所以隨後我又查了兩個文件的inode 號,如下:

wKioL1lvT2XBfAylAAAVvciajlY492.png

表明兩個文件公用的是一個inode號,所以證明它們指向的是同一個數據塊(在文件系統中一個inode號對應一個數據塊羣),並沒有重新佔用其他的數據塊,所以也並不是複製了相同的文件,同時當改變其中一個文件的數據後,查看與之硬鏈接的文件其數據也是隨之同步的,這跡象也表明對應的是一個數據塊,而正真的問題並不是硬鏈接的問提,是這個ll –h 或者 ls –h這命令進行統計文件總大小的時候並不是從磁盤進行統計的,而是根據文件屬性中的大小疊加得來的。而硬鏈接的文件屬性中的大小就是就是inode號對應的數據塊的大小,所以total中進行統計就把各個文件屬性中的大小加起來作爲總和,這種統計是不標準,也不具有代表性的,正真的查看某個文件夾佔用磁盤空間大小命令是:du –h   這個命令是從磁盤上進行統計,不會被文件的屬性中大小影響,所以更準確,測試結果如下圖所示:

wKiom1lvT5yjPmFAAAAZoX9y70M036.png

從上面的測試中,我們看到真實的磁盤容量並沒有改變,所以可以得出結論:

硬鏈接並不佔用磁盤空間!i_f13.gif

軟鏈接測試:

對於軟鏈接就更好理解了,並沒有出現想上面出現的問題,我們同樣在/app目錄下創建一個軟鏈接,顯示如下圖:

wKioL1lvT96S2u1_AAAZVO3AV04666.png

從上面的測試結果我們看到,軟鏈接的inode號並不一樣,鏈接的文件所佔用的空間也是極小的,這個鏈接文件C1的數據中僅存儲了一個路徑而已,所以這部分大小隻是路徑的大小。

從上面兩個實驗,我們可以得出一個結論:j_0003.gif

硬鏈接不佔用磁盤空間,軟鏈接佔用的空間只是存儲路徑所佔用的極小空間。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章