目錄
#一、inode是什麼? " >#一、inode是什麼?
二、inode的內容" >二、inode的內容
三、inode的大小" >三、inode的大小
四、inode號碼" >四、inode號碼
五、目錄檔" >五、目錄檔
六、硬連結" >六、硬連結
七、軟連結" >七、軟連結
八、inode的特殊角色" >八、inode的特殊角色
首頁 系統教程 Linux Linux系統中的檔案元資料:inode詳解

Linux系統中的檔案元資料:inode詳解

Feb 10, 2024 am 09:09 AM
linux linux教程 linux系統 linux指令 shell腳本 嵌入式linux linux入門 linux學習

inode是Linux系統中重要的資料結構,它用來儲存檔案的元數據,如檔案類型,大小,權限,時間戳,連結數,資料區塊位置等。 inode是檔案系統的核心組成部分,它可以用來實現檔案的創建,刪除,修改,尋找等操作。在本文中,我們將介紹inode的原理和特點,包括inode的編號,分配,釋放,查找,索引等,並舉例說明它們的使用方法和注意事項。

檔名 -> inode -> device block

Linux系統中的檔案元資料:inode詳解

#一、inode是什麼?

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

檔案儲存在硬碟上,硬碟的最小儲存單位叫做」磁區」(Sector)。每個扇區儲存512位元組(相當於0.5KB)。

作業系統讀取硬碟的時候,不會一個個磁區地讀取,這樣效率太低,而是一次連續讀取多個磁區,也就是一次讀取一個」區塊」(block) 。這種由多個磁區組成的”區塊”,是檔案存取的最小單位。 「塊」的大小,最常見的是4KB,即連續八個 sector組成一個 block。

文件資料都儲存在」區塊」中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,例如文件的創建者、文件的創建日期、文件的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為」索引節點」。

二、inode的內容

inode包含檔案的元資訊,具體來說有以下內容:

* 檔案的位元組數

* 檔案擁有者的User ID

* 檔案的Group ID

* 檔案的讀取、寫入、執行權限

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

* 連結數,即有多少檔名指向這個inode

* 檔案資料block的位置

可以用stat指令,查看某個檔案的inode資訊:

stat example.txt

總之,除了檔案名稱以外的所有檔案訊息,都存在著inode之中。至於為什麼沒有檔名,下文會有詳細解釋。

三、inode的大小

inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統會自動將硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是inode區(inode table),存放inode所包含的資訊。

每個inode節點的大小,一般是128位元組或256位元組。 inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設定一個inode。假設在一塊1GB的硬碟中,每個inode節點的大小為128字節,每1KB就設定一個inode,那麼inode table的大小就會達到128MB,佔整塊硬碟的12.8%。

查看每個硬碟分割區的inode總數和已經使用的數量,可以使用df指令。

df -i

查看每個inode節點的大小,可以使用以下指令:

sudo dumpe2fs -h /dev/hda | grep “Inode size”

由於每個檔案都必須有一個inode,因此有可能發生inode已經使用光,但是硬碟還未儲存的情況。這時,就無法在硬碟上建立新檔案。

四、inode號碼

#每個inode都有一個號碼,作業系統用inode號碼來辨識不同的檔案。

這裡值得重複一遍,Unix/Linux系統內部不使用檔名,而使用inode號碼來辨識檔案。對於系統來說,檔案名稱只是inode號碼便於辨識的別稱或綽號。表面上,使用者透過檔案名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔案名稱對應的inode號碼;其次,透過inode號碼,取得inode資訊;最後,根據inode訊息,找到檔案資料所在的block,讀出資料。

使用ls -i指令,可以看到檔名對應的inode號碼:

ls -i example.txt

五、目錄檔

#Unix/Linux系統中,目錄(directory)也是一種檔案。開啟目錄,實際上就是開啟目錄檔。

目錄檔案的結構非常簡單,就是一系列目錄項目(dirent)的清單。每個目錄項,由兩部分組成:所包含檔案的檔案名,以及該檔案名稱對應的inode號碼。

ls指令只列出目錄檔案中的所有檔案名稱:

ls /etc

ls -i指令列出整個目錄文件,即文件名稱和inode號碼:

ls -i /etc

如果要查看文件的詳細信息,就必須根據inode號碼,訪問inode節點,讀取信息。 ls -l指令列出檔案的詳細資訊。

ls -l /etc

六、硬連結

#一般情況下,檔案名稱和inode號碼是」一一對應」關係,每個inode號碼對應一個檔案名稱。但是,Unix/Linux系統允許,多個檔案名稱指向同一個inode號碼。這意味著,可以用不同的檔案名稱存取相同的內容;對檔案內容進行修改,會影響到所有檔案名稱;但是,刪除一個檔案名,不影響另一個檔案名稱的存取。這種情況就被稱為」硬連結」(hard link)。

ln指令可以建立硬連結:

ln 原始檔 目標檔

執行上面這條指令以後,原始檔與目標檔的inode號碼相同,都指向同一個inode。 inode資訊中有一項叫做”連結數”,記錄指向該inode的檔名總數,這時就會增加1。反過來,刪除一個檔名,就會使得inode節點中的”連結數」減1。當這個值減到0,表示沒有檔名指向這個inode,系統就會回收這個inode號碼,以及其對應block區域。

這裡順便說一下目錄檔案的」連結數」。建立目錄時,預設會產生兩個目錄項目:”.”和”..」。前者的inode號碼就是目前目錄的inode號碼,等同於目前目錄的」硬連結」;後者的inode號碼就是目前目錄的父目錄的inode號碼,等同於父目錄的」硬連結」。所以,任何一個目錄的”硬鏈接”總數,總是等於2加上它的子目錄總數(含隱藏目錄),這裡的2是父目錄對其的“硬鏈接”和當前目錄下的”.硬連結“。

七、軟連結

#除了硬連結以外,還有一種特殊情況。檔案A和檔案B的inode號碼雖然不一樣,但是檔案A的內容是檔案B的路徑。讀取檔案A時,系統會自動將訪客導向檔案B。因此,無論開啟哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的」軟體連結」(soft link)或」符號連結(symbolic link)。

這意味著,檔案A依賴檔案B而存在,如果刪除了檔案B,開啟檔案A就會報錯:」No such file or directory」。這是軟連結與硬連結最大的不同:檔案A指向檔案B的檔案名,而不是檔案B的inode號碼,檔案B的inode」連結數」不會因此而改變。

ln -s指令可以建立軟連結。

ln -s 來源文檔案或目錄 目標檔案或目錄

八、inode的特殊角色

由於inode號碼與檔案名稱分離,這種機制導致了一些Unix/Linux系統特有的現象。

1. 有時,檔案名稱包含特殊字符,無法正常刪除。這時,直接刪除inode節點,就能起到刪除檔案的作用。

2. 移動文件或重新命名文件,只是改變文件名,不影響inode號碼。

3. 開啟一個文件以後,系統就以inode號碼來辨識這個文件,不再考慮檔名。因此,通常來說,系統無法從inode號碼得知檔案名稱。

第3點使得軟體更新變得簡單,可以在不關閉軟體的情況下進行更新,不需要重新啟動。因為系統通過inode號碼,識別運行中的文件,不通過文件名。更新的時候,新版檔案以同樣的檔名,產生一個新的inode,不會影響到運行中的檔案。等到下次執行這個軟體的時候,文件名就會自動指向新版文件,舊版文件的inode則被回收。

九 實際問題

在一台配置較低的Linux伺服器(記憶體、硬碟比較小)的/data分割區內建立檔案時,系統提示磁碟空間不足,用df -h指令查看了一下磁碟使用情況,發現/data分割區只使用了66%,還有12G的剩餘空間,照理說不會出現這種問題。後來用df -i查看了一下/data分區的索引節點(inode),發現已經用滿(IUsed=100%),導致系統無法建立新目錄和檔案。

找出原因:

/data/cache目錄中存在非常多的小字節快取文件,佔用的Block不多,但是佔用了大量的inode。

解決方案:
1.刪除/data/cache目錄中的部分文件,釋放出/data分割區的一部分inode。
2.用軟連線將空閒分區/opt中的newcache目錄連接到/data/cache,使用/opt分區的inode來緩解/data分區inode不足的問題:
ln -s /opt/newcache /data/cache

透過本文,我們了解了inode的原理和特點,它可以用來實現對文件的管理和操作。我們應該根據實際需求選擇合適的檔案系統,並遵循一些基本原則,例如避免inode耗盡,定期檢查inode狀態,使用硬連結或軟連結等。 inode是Linux系統中最基本的概念之一,它可以實現對檔案的抽象和封裝,也可以提升檔案系統的效能和可靠性。希望本文能對你有所幫助與啟發。

以上是Linux系統中的檔案元資料:inode詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

vscode終端使用教程 vscode終端使用教程 Apr 15, 2025 pm 10:09 PM

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode 無法安裝擴展 vscode 無法安裝擴展 Apr 15, 2025 pm 07:18 PM

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

vscode 可以用於 mac 嗎 vscode 可以用於 mac 嗎 Apr 15, 2025 pm 07:36 PM

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。

See all articles