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



在學習過硬鏈接和軟連接的知識后,我們在做實驗的過程中會發現,創建的硬鏈接會占用磁盤的空間,而我們學習過成中了解到,硬鏈接只是創建一個文件與源文件相同的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 �Cs filenamelinkname

硬鏈接測試:

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

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

wKioL1lvTvryo42DAAAOvuFDmTM298.png

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

wKioL1lvTvqiTbORAAAZIXyN4JU168.png

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

wKioL1lvT2XBfAylAAAVvciajlY492.png

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

wKiom1lvT5yjPmFAAAAZoX9y70M036.png

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

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

軟鏈接測試:

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

wKioL1lvT96S2u1_AAAZVO3AV04666.png

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

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

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


本文出自 “Linux運維” 博客,請務必保留此出處http://jk6627.blog.51cto.com/12002684/1949090


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com