天天看點

了解檔案系統----inode與軟硬連結

在之前一篇文章裡,我們講了檔案的部分屬性,現在我們來了解一下檔案系統。

​​點選打開連結​​

一、inode

1、什麼是inode

了解inode,要從檔案存儲說起。

檔案儲存在硬碟上,硬碟的最小存儲機關叫做“扇區“(Sector),每個扇區儲存512位元組,作業系統讀取硬碟的時候,不是一個一個扇區讀取的,而是一次性讀取多個扇區,即一次性讀取一個塊(block)。

這種由多個扇區組成的塊,是檔案存取的最小機關。

而儲存一個檔案,我們應該儲存其内容和屬性。

檔案資料都存儲在塊中,很顯然,我們必須找到一個地方儲存檔案的屬性,比如檔案的建立者、建立日期、大小等,這種存儲檔案屬性的區域就叫inode。

2、inode的内容

inode包含檔案的屬性,有下列内容:

檔案的位元組數

檔案擁有者的User ID

檔案的Group ID

檔案的時間戳,包含ctime(inode上一次變動的時間)、mtime(檔案内容上次變動的時間)、atime(檔案上次打開的時間)

連結數(下面會介紹)

檔案資料block的位置

我們可以用一個指令stat,檢視檔案,如下圖:

了解檔案系統----inode與軟硬連結

3、inode的結構

當檔案系統建立完成之後,會在整個中繼資料區域為每一個

inode

建立一個位圖(

bitmap

)區域。每一個

inode

都在

bitmap

中占據一位。已使用的

inode

,其标志位置為

1

,未使用的

inode

,其标志位置為

當我們需要找一個空閑的

inode

時,隻需要掃描一下

bitmap

。同理資料區也是用

bitmap

來管理

block

。前者稱為節點位圖,後者稱為塊位圖。

同理:

删除檔案時隻需要在節點位圖中把檔案對應的inode标記為0就可以了,是以在Linux系統删檔案是特别快的哦!

當要統計硬碟已使用空間時,掃描節點位圖中inode标志位為1的檔案占多少個block,然後乘以每個block的大小就可以了。

為什麼删除了的檔案能找回來?

是因為資料在block中沒有動,隻是把block對應的塊位圖示記為0。當我們在存新的檔案進來時,就把塊位圖示志位為0的block覆寫掉。這也就是為什麼當我們删除了檔案,如果添加好多新的檔案進來後就不容易找回舊檔案的原因。

塊位圖示記為0後,塊位圖對應的inode也要标記為0。

這個inode以後也可以被其他檔案所使用了。

4、建立一個新檔案

當建立一個新檔案時,會發生什麼?

用ls -i 可以檢視檔案名對應的inode号碼

了解檔案系統----inode與軟硬連結

可以看出file4的inode的inode号是926742,那麼建立一個新檔案是如何将屬性與内容分開的呢?

了解檔案系統----inode與軟硬連結

是以,建立一個新檔案的操作:

(1)存儲屬性

核心先找到一個空閑的i節點(上例中是926742),核心把檔案資訊記錄在其中。

(2)存儲資料

該檔案需要存儲在三個磁盤塊,核心找到三個空閑塊,将核心緩沖區的資料依次複制。

(3)記錄配置設定情況

檔案内容按順序300,500,800存放,核心在inode的磁盤分區記錄上述塊連結清單。

(4)添加檔案名到目錄

新的檔案名為file4,核心将入口(926742,file4)添加到目錄檔案。檔案名和inode的對應關系将檔案名的内容和屬性連接配接起來。

注意:每個檔案都

有自己的編号,inode,且一個檔案隻有一個inode

5、目錄檔案

注意目錄也是檔案,不過目錄的資料區存放的是目錄下的檔案名及該檔案的inode的對應關系。

二、硬連結

經過上面的學習,我們知道,真正找到磁盤上檔案的并不是檔案名,而是inode。

其實在Linux中可以讓多個檔案名對應同一個inode。

這就意味着,可以用不同的檔案名通路同樣的内容;對檔案内容進行修改,會影響所有的檔案名;删除一個檔案名,不影響另一個檔案名的通路。

這就稱為硬連結。

ln指令可以用來建立硬連結:

了解檔案系統----inode與軟硬連結

可以發現,file1與h_file1的inode一樣,且連結數(記錄指向該inode的檔案名總數)增加了1,變成了2。

我們來看一下修改其中一個檔案時另一個的變化:

了解檔案系統----inode與軟硬連結

上圖中,我們先将"hello world"寫入了file1中,用cat檢視h_file1,發現内容一緻。

接下來,修改了file1的權限,h_file1也相應發生了變化。

都可以證明它們其實是同一檔案,和我們之前接觸的引用計數很像,回憶一下引用計數的删除,硬連結也遵守這個規則。

若删除一個檔案名,inode節點的連結數就會減一,當這個值減到0,表明沒有檔案名指向這個inode,系統就會回收這個inode,以及所對應的block區域,如下,連結數變為1。

了解檔案系統----inode與軟硬連結

注:對于目錄的連結數,由于目錄建立時會自動生成兩個目錄項"."和"..",前者的inode号碼就是目前目錄檔案的inode号碼,相當于目前目錄的硬連結,那麼後者就是父目錄的inode,等同于父目錄的硬連結。

是以,任何一個目錄檔案的連結數,總是等于2加上它的子目錄總數(包括隐藏目錄),這裡的2指的是父目錄對其的硬連結和目前目錄的硬連結:

了解檔案系統----inode與軟硬連結

三、軟連結

有一種情況,檔案1與檔案2,雖然inode号碼不一樣,但檔案1的内容是檔案2的路徑。讀取檔案1時,系統會自動将通路者導向2。也就是說,不管打開哪一個檔案,最終讀取的都是檔案2。這時,檔案1就稱為檔案2的軟連結。

這就意味着,檔案1是依賴檔案2存在的,如果删除了檔案2,打開檔案1就會報錯,找不到檔案2,可以了解為檔案1

存放的是如何找到file2,和Windows的快捷方式特别像。是以它們都

有自己的inode:如下圖,

建立軟連結:

了解檔案系統----inode與軟硬連結

s_file2是file2的軟連結,可以看出inode是不一樣的。

給file2寫入hello world,檢視s_file2:

了解檔案系統----inode與軟硬連結

那麼删除呢?

了解檔案系統----inode與軟硬連結