LINUX 文件系统如何存储文件 图解
http://zhuqiuxu.iteye.com/blog/2116023
http://zhuqiuxu.iteye.com/blog/2116168
理解Inode要從文件說起,文件存儲(chǔ)在硬盤上,硬盤最小的單位是扇區(qū),一般一扇區(qū)512字 節(jié),但是如果硬盤以扇區(qū)為單位讀數(shù)據(jù),那樣效率太低,一般硬盤都以block(多個(gè)扇區(qū))為單位讀取數(shù)據(jù),最常見的大小是4K。既然文件存儲(chǔ)在block 中,那么就需要有一塊存儲(chǔ)空間放置一些諸如文件的創(chuàng)建者,創(chuàng)建時(shí)間,權(quán)限的元數(shù)據(jù),存儲(chǔ)元數(shù)據(jù)的地方就是Inode。
注:Inode信息中是沒有文件的文件名的。為什么?
我們來看一下Inode的結(jié)構(gòu)圖就明白原因了
?圖中Directory不是目錄的意思,更準(zhǔn)確的理解應(yīng)該是對(duì)應(yīng)關(guān)系和字典。
由圖中的查找方式我們可以清晰的看到,文件名只在查找Inode number中使用到,所以它不會(huì)存儲(chǔ)在Inode中,所有Inode與block間的溝通都是通過Inode number唯一標(biāo)識(shí)的。
?
了解的文件存取的原理之后我們來看一下ln命令
眾所周知ln命令分為硬鏈接和軟鏈接,根絕上面的結(jié)構(gòu)圖,硬鏈接就是在Directory中加 入一條filename和Inode的對(duì)應(yīng)關(guān)系,所以如果你刪除了原來的文件,是不對(duì)硬鏈接文件有任何影響的,因?yàn)閯h除文件就是將link count 減少,當(dāng)發(fā)現(xiàn)指向Inode為filename數(shù)量0的時(shí)候,系統(tǒng)會(huì)回收相應(yīng)的Inode和Block空間。但是軟鏈接就不同了,在Linux下所有的都 是文件,所以軟鏈接也有自己的Inode和block ,但是創(chuàng)建軟鏈接不會(huì)在增加原文件Inode-Index,當(dāng)刪除原文件的時(shí)候,相應(yīng)的Index不再能找到,所以導(dǎo)致軟鏈接不能用。但是軟鏈接有自身的 優(yōu)勢(shì),可以跨分區(qū),這樣就可以解決當(dāng)前Inode數(shù)據(jù)區(qū)不足夠?qū)懭?#xff0c;可以使用軟鏈接指向空間充足的空間。
?
這樣的設(shè)計(jì)帶來的好處:
1. 如果一個(gè)文件名中包含特殊字符不能刪除,可以通過刪除Inode來達(dá)到刪除文件的目的。
find . -inum inodeno -exec rm -i {} \;
2. 修改文件名,移動(dòng)文件只是改變文件名,不用修改Inode信息和block信息。
3. 可以再不關(guān)閉軟件,不重啟的情況下完成升級(jí),因?yàn)橄到y(tǒng)在運(yùn)行的過程中通過Inode number進(jìn)行識(shí)別,而不是文件名,所以可以在InodeIndex中以同樣的文件名指向不同的Inode,在新的block中寫入新文件,下次打開軟 件直接指向新的Inode和bloc
總結(jié)
以上是生活随笔為你收集整理的LINUX 文件系统如何存储文件 图解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连接池的基本语法
- 下一篇: 一道关于Promise应用的面试题