linux 文件inode,linux文件系统-inode学习整理
linux文件系統(tǒng)-inode學(xué)習(xí)整理
介紹
linux文件系統(tǒng)可講的模塊有很多,包括文件系統(tǒng)整體架構(gòu)、文件系統(tǒng)分類、虛擬文件系統(tǒng)以及文件系統(tǒng)存儲結(jié)構(gòu)等等,本文主要介紹的是文件系統(tǒng)的存儲結(jié)構(gòu),也就是本文的重點-inode。
文件存儲結(jié)構(gòu)
首先從開天辟地開始介紹,我們知道數(shù)據(jù)是保存在磁盤中的,磁盤具體存貯原理細節(jié)不在這里進行說明,而磁盤中的存儲空間是如何進行管理的?這里就說到了磁盤塊的劃分:
超級快:文件系統(tǒng)中第一個塊,存放的是文件系統(tǒng)本身的結(jié)構(gòu)信息,包括每個區(qū)域的大小以及未被使用的磁盤塊等等信息
inode節(jié)點表:超級塊的下部分就是inode節(jié)點表了,也就是我們上面的inode table。每個inode節(jié)點對應(yīng)一個文件(或目錄)的結(jié)構(gòu),包括了文件的創(chuàng)建時間、權(quán)限等信息,下面有詳細的介紹。
數(shù)據(jù)區(qū):顯然它就是用來保存文件內(nèi)容的區(qū)域,這里要介紹下,磁盤上的塊大小一樣,一般來說為4kb,即連續(xù)的八個扇區(qū)(512字節(jié)),塊手是文件存取的最小單位,超過塊大小的文件會放到下一個塊中。
就像大家知道的,linux一切皆是文件,所以目錄項也是文件,不過這個文件中存儲的是目錄下的文件及子目錄組織結(jié)構(gòu),相應(yīng)的文件指向了inode的節(jié)點,這里需要說明每個文件對應(yīng)一個inode節(jié)點,之后通過inode節(jié)點中有關(guān)數(shù)據(jù)區(qū)塊的信息找到對應(yīng)的數(shù)據(jù)。
文件存儲結(jié)構(gòu)的整體架構(gòu),如下圖所示:
inode節(jié)點inode節(jié)點詳解
inode節(jié)點就是文件元數(shù)據(jù)的存儲區(qū),包括了文件如下內(nèi)容
1
2
3
4
5
6
7
8- 文件的字節(jié)數(shù)
- 文件擁有者的User ID
- 文件的Group ID
- 文件的讀、寫、執(zhí)行權(quán)限
- 文件的時間戳,共有三個:ctime指inode上一次變動的時間,
mtime指文件內(nèi)容上一次變動的時間,atime指文件上一次打開的時間。
- 鏈接數(shù),即有多少文件名指向這個inode
- 文件數(shù)據(jù)block的位置
可以使用stat filename 命令查看:
基本除了文件內(nèi)容外的信息都存儲在inode節(jié)點中。
inode節(jié)點的大小一般來說為128或者256個字節(jié),inode節(jié)點的總數(shù),在格式化時就給定,一般是每1KB或每2KB就設(shè)置一個inode。假定在一塊1GB的硬盤中,每個inode節(jié)點的大小為128字節(jié),每1KB就設(shè)置一個inode,那么inode table的大小就會達到128MB,占整塊硬盤的12.8%。
如果想要查看inode大小,可以使用dump2fs -h /dev/sda1 | grep "Inode size"查看:
如果要查看每個磁盤的inode使用情況,可以使用df -i命令查看:
每個文件都有自己的對應(yīng)的inode號,這里要說明的是unix/linux系統(tǒng)中主要根據(jù)inode號來識別文件,文件名只是我們用來整理和分辨文件的別稱,而文件名主要存儲在目錄項中。
目錄項目錄項的結(jié)構(gòu)
目錄項是linux文件系統(tǒng)的重要組成部分,在linux中目錄項也是一種文件,不過他內(nèi)部存儲的信息由兩部分組成
文件名
inode編號
我們可以通過ls -ai dirname 查看目錄結(jié)構(gòu):
當我們創(chuàng)建目錄時,一定會有的兩個內(nèi)容就是.和..,.表示的是當前目錄文件所對應(yīng)的inode號,..對應(yīng)的是當前目錄父目錄的inode號,其他的就是我們目錄下的文件和對應(yīng)的inode號。
介紹完上面這些信息我們再來看一開始的流程就很清楚了:
首先從目錄文件中拿到我們所需文件對應(yīng)的inode號,通過inode號拿到文件的元數(shù)據(jù),通過其中所指向的數(shù)據(jù)塊號取出文件內(nèi)容。
創(chuàng)建流程通過創(chuàng)建流程串通知識點
文件創(chuàng)建流程
通過前面的內(nèi)容我們了解到了文件取出的流程,那創(chuàng)建一個文件的流程是什么樣的呢?下面我們來介紹下創(chuàng)建文件的流程。
存儲inode節(jié)點信息:內(nèi)核首先找到一塊空的inode節(jié)點,將文件的信息存在節(jié)點中。
存儲數(shù)據(jù)信息:數(shù)據(jù)信息即文件信息,內(nèi)核從未使用的塊列表中找到幾個數(shù)據(jù)塊(一般是不連續(xù)的),如300、230、540等,內(nèi)核將緩存區(qū)中的數(shù)據(jù)存儲到對應(yīng)的數(shù)據(jù)塊中。
記錄分配情況:存儲完信息后,數(shù)據(jù)塊的分配情況記錄在inode節(jié)點信息中
添加文件名到目錄:最后內(nèi)核將文件名和對應(yīng)的inode節(jié)點放到目錄文件中。
inode應(yīng)用擴展
硬連接
一般情況下,linux中的文件名和inode號碼是一一對應(yīng)的,不過也可以多個文件名指向同一個inode節(jié)點,也就是我們要介紹的硬鏈接。
創(chuàng)建硬鏈接的命令為ln 源文件目標文件,硬鏈接與正常的文件相同,只是與其他文件共享同一個inode節(jié)點,前面介紹的inode節(jié)點信息中Links數(shù)就是文件名指向的數(shù)量,當對其進行刪除的時候只會對inode節(jié)點中的links數(shù)減少1,當為0的時候文件才會真正被刪除。
這里說明下,目錄項中的.和..也是一種硬鏈接。
軟鏈接
介紹完硬鏈接,再介紹一種我們平常使用比較多的一種方式:軟鏈接。
ln -s 源文件 目標文件是軟鏈接的創(chuàng)建方式,雖然看起來只是多了個選項s,當時內(nèi)部原理完全不同。
軟鏈接是單獨生成一個鏈接文件,有自己的inode號,是一個單獨的文件,這個文件中的信息是鏈接的文件的信息。
如上圖,可以把軟鏈接看做是一個指針,只不過指針里面的內(nèi)容為所指向文件的路徑,這個指針有自己單獨的內(nèi)存空間。
參考文章
總結(jié)
以上是生活随笔為你收集整理的linux 文件inode,linux文件系统-inode学习整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深圳到广州多少钱啊?
- 下一篇: 加盟儿童乐园多少钱啊?