1.inode簡(jiǎn)介
理解inode,要從文件儲(chǔ)存說(shuō)起。文件儲(chǔ)存在硬盤上,硬盤的最小存儲(chǔ)單位叫做”扇區(qū)”(Sector)。每個(gè)扇區(qū)儲(chǔ)存512字節(jié)(相當(dāng)于0.5KB)。操作系統(tǒng)讀取硬盤的時(shí)候,不會(huì)一個(gè)個(gè)扇區(qū)地讀取,這樣效率太低,而是一次性連續(xù)讀取多個(gè)扇區(qū),即一次性讀取一個(gè)”塊”(block)。這種由多個(gè)扇區(qū)組成的”塊”,是文件存取的最小單位。”塊”的大小,最常見(jiàn)的是4KB,即連續(xù)八個(gè) sector組成一個(gè) block。文件數(shù)據(jù)都儲(chǔ)存在”塊”中,那么很顯然,我們還必須找到一個(gè)地方儲(chǔ)存文件的元信息,比如文件的創(chuàng)建者、文件的創(chuàng)建日期、文件的大小等等。這種儲(chǔ)存文件元信息的區(qū)域就叫做inode,中文譯名為”索引節(jié)點(diǎn)” 。
2.inode包含內(nèi)容
Linux中目錄的數(shù)據(jù)塊中的每一項(xiàng)中都包含了文件名和其對(duì)應(yīng)的inode。inode記錄了文件的屬性以及該文件實(shí)際存儲(chǔ)位置,即數(shù)據(jù)塊號(hào)(block number),每一個(gè)block(常見(jiàn)大小4KB),通過(guò)inode可以實(shí)現(xiàn)文件的查找定位。inode是Linux中的,Unix中是vnode?;旧?,inode包含的信息至少有如下這些:
(1)文件的類型
(2)文件訪問(wèn)權(quán)限;
(3)文件的所有者與組;
(4)文件的大?。?br />
(5)鏈接數(shù),即指向該inode的文件名總數(shù);
(6)文件的狀態(tài)改變時(shí)間(ctime)、最近訪問(wèn)時(shí)間(atime)和最近修改時(shí)間(mtime);
(7)文件特殊屬性,SUID、SGID和SBIT;
(8)文件內(nèi)容的真正指向(pointer)。
可以用stat命令,查看某個(gè)文件的inode信息。
3.inode特點(diǎn)
inode的數(shù)量與大小在磁盤格式化的時(shí)候就已經(jīng)固定了,inode的特點(diǎn)有:
(1)每一個(gè)inode的大小均固定為128B??梢酝ㄟ^(guò)命令dumpe2fs來(lái)顯示ext2/ext3/ext4文件系統(tǒng)信息。
$ dumpe2fs -h /dev/sda1 | grep "Inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
(2)每個(gè)文件都只占用一個(gè)inode。因此,文件系統(tǒng)能夠建立的文件數(shù)量與inode數(shù)量有關(guān)。系統(tǒng)讀取檔案時(shí)需要先找到inode,并分析inode所記錄的權(quán)限與用戶是否符合,若符合才能夠開(kāi)始實(shí)際讀取block的內(nèi)容。
4.操作系統(tǒng)讀取磁盤文件的流程
操作系統(tǒng)讀取磁盤文件的流程是這樣的:
(1)根據(jù)給定的文件的所在目錄,獲取該目錄的數(shù)據(jù)實(shí)體,根據(jù)數(shù)據(jù)實(shí)體中的數(shù)據(jù)項(xiàng),找到對(duì)應(yīng)文件的inode;
(2)根據(jù)文件inode,找到inodeTable;
(3)根據(jù)inodeTable中的對(duì)應(yīng)關(guān)系,找到對(duì)應(yīng)的block;
(4)讀取文件。
系統(tǒng)讀取磁盤文件流程示意圖如下:
![](http://img.jbzj.com/file_images/article/202008/2020824140719499.png?202072414728)
舉例來(lái)說(shuō),如果想要讀取/etc/passwd文件,讀取流程如下:
(1)獲取根目錄/的inode。透過(guò)掛載點(diǎn)的信息找到根目錄的inode號(hào)為2;
ll -di /
2 dr-xr-xr-x 19 root root 4096 Feb 14 09:32 /
(2)根據(jù)根目錄的inode,找到根目錄的數(shù)據(jù)實(shí)體block,可以理解為一個(gè)文件到inode號(hào)的映射表,找到目錄etc的inode號(hào);
ll -di /etc
786433 drwxr-xr-x 98 root root 12288 Feb 13 17:18 /etc
(3)根據(jù)目錄etc的inode號(hào),讀取目錄etc的數(shù)據(jù)實(shí)體block,并找到文件passwd的inode號(hào);
ll -i /etc/passwd
787795 -rw-r--r-- 1 root root 1552 Jan 4 14:56 /etc/passwd
(4)根據(jù)/etc/passwd文件的inode號(hào),即可獲取/etc/passwd文件的數(shù)據(jù)實(shí)體block,完成文件的讀取。
5.inode的諸多優(yōu)點(diǎn)
(1)對(duì)于有些無(wú)法刪除的文件可以通過(guò)刪除inode節(jié)點(diǎn)來(lái)刪除;
(2)移動(dòng)或者重命名文件,只是改變了目錄下的文件名到inode的映射,并不需要實(shí)際對(duì)硬盤操作;
(3)刪除文件的時(shí)候,只需要?jiǎng)h除inode,不需要實(shí)際清空那塊硬盤,只需要在下次寫入的時(shí)候覆蓋即可(這也是為什么刪除了數(shù)據(jù)可以進(jìn)行數(shù)據(jù)恢復(fù)的原因之一);
(4)打開(kāi)一個(gè)文件后,只需要通過(guò)inode來(lái)識(shí)別文件。
以上就是詳解Linux索引節(jié)點(diǎn)inode的詳細(xì)內(nèi)容,更多關(guān)于Linux索引節(jié)點(diǎn)inode的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!