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
下一篇 2016-07-29

相關推薦

  • linux基礎學習之AWK

    內容: 1、awk輸出(print、printf) 2、awk變量(內建變量和定義變量) 3、awk數組 4、awk重定向輸出 5、awk操作符 6、awk常見模式類型 7、awk控制及循環語句 8、awk內置函數 awk:(其名稱得自于它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母)…

    Linux干貨 2016-09-22
  • DHCP服務

    一、DHCP概述     DHCP全稱為Dynamic Host Configuration Protocol,即動態主機配置協議,其主要作用是使用網內的主機可以自動獲取到網絡相關參數信息,以達到高效管理主機的目的。     DHCP采用C/S架構,即Server/Client?!?/p>

    Linux干貨 2015-05-11
  • linux基于密鑰的認證

    生成密鑰對兒: [root@Ams ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):  Enter passphrase (empty for no passph…

    Linux干貨 2016-08-02
  • 磁盤分區,文件系統的創建、修改和檢測

        寫博客,對我來說不僅是學習的過程,也是一個心理歷練的過程,多說無益,開始吧?。?!     博客是馬哥視頻里的博客作業:文件系統的創建、修改和檢測。我就從磁盤管理開始把      環境:     創建的centos6.5虛擬機 &nb…

    Linux干貨 2016-06-26
  • linux常用基礎命令簡介

    linux常用基礎命令簡介 linux入門 基礎 筆記 linux新手入門常用命令語法參數簡介 linux常用基礎命令簡介 cd 語法 選項 ls 語法 選項 echo 語法 選項 history 語法 選項 man 語法 選項 cd cd命令用來切換工作目錄至指定目錄。 其中指定目錄表示法可為絕對路徑或相對路徑。若目錄名稱省略,則變換至…

    Linux干貨 2017-03-26
  • Linux磁盤管理及其相關命令使用

    Linux磁盤及文件系統    CPU MEMORY(RAM) I/O    I/O:disks entercard    Disks:持久存儲數據    接口類型:      IDE(ata):并行 133MB/s     &n…

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