LINUX 文件系統如何存儲文件 圖解


http://zhuqiuxu.iteye.com/blog/2116023

http://zhuqiuxu.iteye.com/blog/2116168

理解Inode要從文件說起,文件存儲在硬盤上,硬盤最小的單位是扇區,一般一扇區512字 節,但是如果硬盤以扇區為單位讀數據,那樣效率太低,一般硬盤都以block(多個扇區)為單位讀取數據,最常見的大小是4K。既然文件存儲在block 中,那么就需要有一塊存儲空間放置一些諸如文件的創建者,創建時間,權限的元數據,存儲元數據的地方就是Inode。

注:Inode信息中是沒有文件的文件名的。為什么?

我們來看一下Inode的結構圖就明白原因了



 圖中Directory不是目錄的意思,更准確的理解應該是對應關系和字典。

由圖中的查找方式我們可以清晰的看到,文件名只在查找Inode number中使用到,所以它不會存儲在Inode中,所有Inode與block間的溝通都是通過Inode number唯一標識的。

 

了解的文件存取的原理之后我們來看一下ln命令

眾所周知ln命令分為硬鏈接和軟鏈接,根絕上面的結構圖,硬鏈接就是在Directory中加 入一條filename和Inode的對應關系,所以如果你刪除了原來的文件,是不對硬鏈接文件有任何影響的,因為刪除文件就是將link count 減少,當發現指向Inode為filename數量0的時候,系統會回收相應的Inode和Block空間。但是軟鏈接就不同了,在Linux下所有的都 是文件,所以軟鏈接也有自己的Inode和block ,但是創建軟鏈接不會在增加原文件Inode-Index,當刪除原文件的時候,相應的Index不再能找到,所以導致軟鏈接不能用。但是軟鏈接有自身的 優勢,可以跨分區,這樣就可以解決當前Inode數據區不足夠寫入,可以使用軟鏈接指向空間充足的空間。

 

這樣的設計帶來的好處:

1. 如果一個文件名中包含特殊字符不能刪除,可以通過刪除Inode來達到刪除文件的目的。

find . -inum inodeno -exec rm -i {} \;

2. 修改文件名,移動文件只是改變文件名,不用修改Inode信息和block信息。

3. 可以再不關閉軟件,不重啟的情況下完成升級,因為系統在運行的過程中通過Inode number進行識別,而不是文件名,所以可以在InodeIndex中以同樣的文件名指向不同的Inode,在新的block中寫入新文件,下次打開軟 件直接指向新的Inode和bloc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM