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。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9U1Ra5WNXFGdsdkYxQ2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0MTO0ETOxAjMzATMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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、軟連接配接與硬連結的差別
- 軟連接配接删除源檔案後,連接配接的檔案将不能通路。
- 硬連結删除源檔案後,仍然可以通路。
- 硬連結不可以對檔案建立,但軟連接配接可以建立