天天看點

inode 與 block和硬連結與軟連結的分析詳解一、inode 與 block二、硬連結與軟連結

inode 與 block和硬連結與軟連結的分析詳解

  • 一、inode 與 block
      • 1、inode 和 block 概述
      • 2.inode 的内容
      • 3、inode的大小
  • 二、硬連結與軟連結
      • 1、硬連結
      • 2、軟連結
      • 3、軟連接配接與硬連結的差別

一、inode 與 block

作業系統的檔案資料除了實際内容之外,通常含有非常多的屬性,例如 Linux 作業系統的檔案權限(rwx)與檔案屬性(所有者、群組、時間參數等)。檔案系統通常會将這兩部分内容分别存放在 inode 和 block 中。

1、inode 和 block 概述

檔案是存儲在硬碟上的,硬碟的最小存儲機關叫做“扇區”(sector),每個扇區存儲 512位元組。作業系統讀取硬碟的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是檔案存取的最小機關。"塊"的大小,最常見的是 4KB,即連續八個 sector 組成一個 block。

檔案資料存儲在“塊”中,那麼還必須找到一個地方存儲檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種存儲檔案元資訊的區域就叫做 inode,中文譯名為“索引節點”,也叫 i 節點。是以,一個檔案必須占用一個 inode,但至少占用一個 block。

inode 與 block和硬連結與軟連結的分析詳解一、inode 與 block二、硬連結與軟連結

2.inode 的内容

inode 包含很多的檔案元資訊,但不包含檔案名:

  • 檔案的位元組數
  • 檔案擁有者的 UserID
  • 檔案的 GroupID
  • 檔案的讀、寫、執行權限
  • 檔案的時間戳

stat 指令即可檢視某個檔案的 inode 資訊

[[email protected] ~]# stat anaconda-ks.cfg 
  檔案:"anaconda-ks.cfg"
  大小:1847      	塊:8          IO 塊:4096   普通檔案
裝置:fd00h/64768d	Inode:100663366   硬連結:1
權限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
最近通路:2020-10-28 10:48:11.616496195 +0800
最近更改:2020-10-28 10:44:54.584331362 +0800
最近改動:2020-10-28 10:44:54.584331362 +0800
建立時間:-
[[email protected] ~]# ls -i initial-setup-ks.cfg 
100663375 initial-setup-ks.cfg
           

3、inode的大小

使用者在通路檔案時,表面上是使用者通過檔案名來打開檔案,而實際系統内部的過程分成以下三步:

  • 系統找到這個檔案名對應的 inode 号碼;
  • 通過 inode 号碼,擷取 inode 資訊;
  • 根據 inode 資訊,找到檔案資料所在的 block,并讀出資料。
    inode 與 block和硬連結與軟連結的分析詳解一、inode 與 block二、硬連結與軟連結
  • inode 也會消耗硬碟空間,是以格式化的時候,作業系統自動将硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是 inode 區,存放 inode 所包含的資訊。每個 inode 的大小,一般是 128 位元組或 256 位元組。通常情況下不需要關注單個 inode 的大小,而是需要重點關注 inode 總數。inode 的總數在格式化時就給定了,執行“df -i”指令即可檢視每個硬碟分區對應的的 inode 總數和已經使用的 inode 數量。
[[email protected] ~]# df -i
檔案系統                   Inode 已用(I)  可用(I) 已用(I)% 挂載點
/dev/mapper/centos-root 19417088  199229 19217859       2% /
devtmpfs                  479185     403   478782       1% /dev
tmpfs                     483163       1   483162       1% /dev/shm
tmpfs                     483163     600   482563       1% /run
tmpfs                     483163      16   483147       1% /sys/fs/cgroup
/dev/sda1                 524288     328   523960       1% /boot
/dev/mapper/centos-home  9480192      17  9480175       1% /home
tmpfs                     483163      19   483144       1% /run/user/0
           

由于 inode 号碼與檔案名分離,Linux 系統具備以下幾種特有的現象.

  • 檔案名包含特殊字元,可能無法正常删除。這時直接删除 inode,能夠起到删除檔案的作用.
  • 移動檔案或重命名檔案,隻是改變檔案名,不影響 inode 号碼.
  • 打開一個檔案以後,系統就以 inode 号碼來識别這個檔案,不再考慮檔案名.

二、硬連結與軟連結

Linux 系統下的連結檔案有兩種,一種類似于 Windows 的快捷方式功能的檔案,可以快速連接配接到目标檔案或目錄,稱之為軟連結;另一種則是通過檔案系統的 inode 連結來産生的新檔案名,而不是産生新檔案,稱之為硬連結。

1、硬連結

  • 一般情況下,檔案名和 inode 号碼是一一對應關系,每個 inode 号碼對應一個檔案名。但是 Linux 系統允許多個檔案名指向同一個 inode 号碼。這意味着,可以用不同的檔案名通路同樣的内容。
  • ln 指令可以建立硬連結,運作該指令以後,源檔案與目标檔案的 inode 号碼相同,都指向同一個 inode。inode資訊中的“連結數”這時就會增加 1 。
  • 當一個檔案擁有多個硬連結時,對檔案内容修改,會影響到所有檔案名;
  • 但是删除一個檔案名,不影響另一個檔案名的通路。删除一個檔案名,隻會使得 inode 中的"連結數"減 1。
  • 注意的是ln不能對目錄做硬連結。

指令的基本格式為:

ln 源檔案 目标

2、軟連結

  • 軟連結就是再建立一個獨立的檔案,而這個檔案會讓資料的讀取指向它連接配接的那個檔案的檔案名。

例如,檔案 A 和檔案 B 的 inode 号碼雖然不一樣,但是檔案 A 的,内容是檔案B 的路徑。讀取檔案 A 時,系統會自動将通路者導向檔案 B。這時,檔案 A 就稱為檔案 B 的“軟連結”(soft link)。

檔案 A 依賴于檔案 B 而存在,如果删除了檔案 B,打開檔案 A 就會報錯。

這是軟連結與硬連結最大的不同:檔案 A有自己的inode 号碼 指向檔案 B 的檔案名,而不是檔案 B 的 inode 号碼,檔案 B 的 inode“連結數”不會是以發生變化。

軟連結的建立指令的基本格式為:

ln -s 源檔案或目錄 目标檔案或目錄

3、軟連接配接與硬連結的差別

  • 軟連接配接删除源檔案後,連接配接的檔案将不能通路。
  • 硬連結删除源檔案後,仍然可以通路。
  • 硬連結不可以對檔案建立,但軟連接配接可以建立

繼續閱讀