Linux下inode理解及軟、硬鏈接初探

1、Inode是什么?

要理解inode,要從文件儲存說起。

文件由元數據和數據構成。

文件儲存在硬盤上,最小的存儲單位叫做“扇區(Sector)”。每個扇區存儲512字節。操作系統讀取硬盤時,不會一個扇區一個扇區地讀取,這樣非常低效;而是一次性連續讀取多個扇區,即一次性讀取一個“塊(block)”?!皦K”由多個扇區組成,常見的大小有1K、2K、4K等,其中4K較常見。

文件的數據都存儲在塊(block)中,那么文件的元數據(比如文件的創建者、創建日期、大小等信息)也需要找個空間存儲。存儲文件元數據信息的區域就叫做inode,中文譯作“索引節點”。

在linux系統中,每個文件會分配到一個inode,可以將inode簡單理解為指針,它永遠指向文件的具體存儲位置。系統是通過inode來定位每個文件的。

2、Inode包含的內容

Inode包含下面的信息:

* 文件的字節數

  * 文件擁有者的User ID

  * 文件的Group ID

  * 文件的讀、寫、執行權限

  * 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。

  * 鏈接數,即有多少文件名指向這個inode

* 文件數據block的位置

3、inode的大小

       inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

查看每個硬盤分區的inode總數和已經使用的數量,可以使用df命令。df  -i

查看每個inode的大?。篸umpe2fs –h /dev/sda1| grep “Inode size”

4、inode號碼

      每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。

這里值得重復一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對于系統來說,文件名只是inode號碼便于識別的別稱或者綽號。

表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最后,根據inode信息,找到文件數據所在的block,讀出數據。

5、目錄文件:

在unix/linux系統中,目錄也是一種文件。目錄由一系列的目錄項(dirent)組成,每個目錄項由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。

簡單來說,目錄是用來關鍵文件名與Inode number的。

6、那么在linux中,文件系統查找文件的過程是怎樣的呢。

以查找/var/log/somefile文件為例:

       先查找/對應的inode號——>在對應inode表中找到/對應inode信息,通過該信息找到對應磁盤塊——>在/磁盤塊中找到var的inode號——>再到對應的inode表中找到var對應inode信息,獲知其對應的磁盤塊——>在var對應的磁盤塊中找到log對應的inode號——>根據inode號找到log對應inode信息,找到對應的磁盤——>在log中找到somfile文件對應的inode號——>在inode表中找到somefile文件對應inode信息,查找到對應磁盤塊——>再到somefile文件的磁盤塊上獲取文件的數據內容。至此,文件獲取。

7、復制、移動和刪除文件在inode上的表現

       復制文件:分配空閑的inode——>在inode table里創建條目——>在目錄里創建文件和inode的對應關系——>將文件寫入塊

       移動文件:文件的移動分為兩種情況。

              第一種:源文件和目標文件在同一文件系統/分區上。文件移動的實現方式是:在目標目錄下創建目標文件名與inode的對應關系——>刪除源目錄下的源文件名與inode的對應關系。完成。Ctime會被改寫。在此情況下,數據在磁盤上的位置沒有移動。

              第二種:源文件與目標文件在不同的文件系統上。文件移動的實現方式是:

找到空閑的inode——>在inode下創建條目——>在目錄下創建目標文件名和inode的對應關系——>將文件寫入塊——>同時源文件將被刪除。Ctime會被改寫,inode發生變化,數據在磁盤上的位置也相應地移動

       刪除文件:

       刪除文件的實質是減少inode的鏈接數,當鏈接數為0時,刪除目錄下文件名和inode的對應關系,將inode標記為可用。數據在塊中并沒有被移除,只是該塊也被標記為可用,當有新數據寫入并且需要用到該塊時,該塊上面的數據才會被覆蓋。

8、軟、硬鏈接的區別

8.1 什么是硬鏈接

一般情況下,文件名和inode號碼是"一一對應"關系,每個inode號碼對應一個文件名。

但是,Unix/Linux系統允許多個文件名指向同一個inode號碼。這意味著,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。

       源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做"鏈接數",記錄指向該inode的文件名總數,這時就會增加1。反過來,刪除一個文件名,就會使得inode節點中的"鏈接數"減1。當這個值減到0,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。

這里順便說一下目錄文件的"鏈接數"。創建目錄時,默認會生成兩個目錄項:"."和".."。

前者的inode號碼就是當前目錄的inode號碼,等同于當前目錄的"硬鏈接";后者的inode號碼就是當前目錄的父目錄的inode號碼,等同于父目錄的"硬鏈接"。

所以,任何一個目錄的"硬鏈接"總數,總是等于2加上它的子目錄總數(含隱藏目錄)。

       硬鏈接創建方式:ln  源文件  鏈接文件

blob.png

8.2 什么是軟鏈接

文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。

這意味著,文件A依賴于文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。

軟連接創建方式:ln –s 源文件 鏈接文件

    

blob.png

這是軟鏈接與硬鏈接最大的不同:軟鏈接指向文件的文件名,而不是文件的inode號碼,文件的"鏈接數"不會因此發生變化。

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/26632

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-07-29 15:23
下一篇 2016-07-29 15:23

相關推薦

  • ◆戰前宣言

    從 今 天 開 始, 到 以 后 的 很 久,我 要 努 力,努 力,努 力 的 用 盡 全 力 地 學 好 Linux。 我 知 道,這 起 碼 需 要 很 長 時 間 和 汗 水,但 我 堅 信,付 出 總 是 會 有 回 報 的~ 要記?。罕饶銉炐愕娜硕荚谂?,你還在彷徨什么? 最后借用一下火影忍者中李…

    Linux干貨 2016-10-24
  • zabbix low-level discover 監控端口

    zabbix通過調用jason格式的輸出,實現數據的收集 獲取端口的shell腳本   #!/bin/bash port_array=(`netstat -tnl|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]…

    Linux干貨 2016-06-09
  • N21天天第十六周課程練習

    1、源碼編譯安裝LNMP架構環境; 一、安裝Nginx 1、解決依賴 [root@localhost ~]# yum groupinstall 開發工具 服務器平臺開發 -y 2、安裝 [root@localhost ~]# tar xf pcre-8.37.…

    Linux干貨 2016-12-14
  • 1017練習題

    1017練習題 作業 10月17日 柴震 1.生產環境發現一臺服務器系統時間產生偏差,造成服務異常,請幫忙校正。 hwclock 查看硬件是否準確,如準確無誤,可以使用hwclock -s以硬件時間為準。 或者使用ntpdate命令指定一臺NTP服務器,進行同步。 2.生產有一個數據同步腳本需要執行很長時間,怎樣做到無人值守,在…

    Linux干貨 2016-10-18
  • 步入LINUX

    初次融入LINUX的環境。。。

    Linux干貨 2018-03-26
  • 01

    0101

    Linux干貨 2016-08-08
欧美性久久久久