inode 是 UNIX 作業系統中的一種資料結構,它包含了與檔案系統中各個檔案相關的一些重要資訊。在 UNIX 中建立檔案系統時,同時将會建立大量的 inode 。通常,檔案系統磁盤空間中大約百分之一空間配置設定給了 inode 表。
有時,人們使用了一些不同的術語,如 inode 和索引編号 (inumber)。這兩個術語非常相似,并且互相關聯,但它們所指的并不是同樣的概念。 inode 指的是資料結構;而索引編号實際上是 inode 的辨別編号,是以也稱其為 inode 編号 或者索引編号。索引編号隻是檔案相關資訊中一項重要的内容。下一個部分将介紹 inode 中的其他一些屬性。
inode 表包含一份清單,其中列出了對應檔案系統的所有 inode 編号。當使用者搜尋或者通路一個檔案時,UNIX 系統通過 inode 表查找正确的 inode 編号。在找到 inode 編号之後,相關的指令才可以通路該 inode ,并對其進行适當的更改。
例如,使用
vi
來編輯一個檔案。當您鍵入 vi <filename>
時,在 inode 表中找到 inode 編号之後,才允許您打開該 inode 。在 vi
的編輯會話期間,更改了該 inode 中的某些屬性,當您完成操作并鍵入 :wq
時,将關閉并釋放該 inode 。通過這種方式,如果兩個使用者試圖對同一個檔案進行編輯, inode 已經在第一個編輯會話期間配置設定給了另一個使用者 ID (UID),是以第二個編輯任務就必須等待,直到該 inode 釋放為止。 inode 的結構
對于經驗豐富的 UNIX 開發人員或者管理者來說, inode 的結構相對比較簡單,但是可能還有一些您尚不了解的、令人驚訝的有關 inode 的内幕。下面的定義僅給出了 inode 中所包含的、UNIX 使用者經常使用的一些重要資訊:
- inode 編号
- 用來識别檔案類型,以及用于
函數的模式資訊stat C
- 檔案的連結數目
- 屬主的 UID
- 屬主的組 ID (GID)
- 檔案的大小
- 檔案所使用的磁盤塊的實際數目
- 最近一次修改的時間
- 最近一次通路的時間
- 最近一次更改的時間
從根本上講, inode 中包含有關檔案的所有資訊(除了檔案的實際名稱以及實際資料内容之外)。可以在 AIX 的 Header 檔案 /usr/include/jf/ino.h 中、或者 Web 頁面 http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/inode.h.htm 中可以找到完整的 inode 結構。
以上所列舉的資訊對于檔案來說非常重要,并且在 UNIX 中頻繁使用。如果沒有這些資訊,那麼檔案将被認為遭到破壞和不可用。
與其他的作業系統相比,UNIX 系統中的目錄和檔案可能看起來有所不同,但事實并非如此。在 UNIX 中,目錄本身就是檔案,隻是在它們的 inode 中使用了一些附加的設定。目錄 本質上就是一個包含了其他檔案的檔案。另外,其模式資訊中設定了一些相應的标志,以告知系統該檔案實際上是一個目錄。
使用 inode
了解如何在 UNIX 中使用 inode 可以節約大量的時間,并提高工作效率。在尚未了解 inode 之前,您可以使用下面的指令,以減少可能碰到的問題。
df 指令
如前所述,當您在 UNIX 中建立一個檔案系統時,将為 inode 表配置設定大約百分之一的總磁盤空間。每次在檔案系統中建立一個檔案時,都會為該檔案配置設定一個 inode 。通常,與一個檔案系統相關聯的 inode 的數目足夠多,但耗盡 inode 的可能性始終存在。要監視是否發生了這種情況,您可以觀察
df
的輸出。
使用
df
指令,您可以檢視所有已挂載的檔案系統或者特定的檔案系統。在該指令的輸出中,您可以檢視各個檔案系統中已使用的 inode 的數目,以及檔案系統中總體使用情況百分比,如清單 1 中所示。
清單 1. 使用 df 來監視 inode 的使用
1 2 3 4 5 6 7 8 | |
如果由于某種原因,某個檔案系統 inode 的使用率達到百分之百,那麼您将無法在該檔案系統中建立更多的檔案、裝置、目錄等等。對于這種情況,一種解決方案是通過
smitty chfs
指令為該檔案系統添加更多的空間,如圖 1 所示。另一種解決方案是建立較小的 inode 區段。現在,在增強的日志檔案系統 (Enhanced Journal File System) 中,IBM AIX 5L 允許 inode 區段小于 16KB 的預設大小。請記住,如果您在 AIX 5L 中使用這個選項,那麼将無法從較早版本的 AIX 通路該檔案系統。
圖 1. smitty chfs 指令的結果

istat 和 stat
在 AIX 中檢查 inode 的一種快捷的方式是使用
istat
指令。使用這個指令,您可以找到特定檔案的索引編号,以及其他的 inode 項目,如權限、檔案類型、UID、GID、連結的數目(非符号連結)、檔案大小和最近一次更新、最近一次修改以及最近一次通路的時間戳。
清單 2 顯示了 AIX 中檔案 /usr/bin/ksh 的 inode 資訊。
清單 2. /usr/bin/ksh 的 inode 資訊
9 10 | |
除了顯示來自
istat
的标準資訊之外,現在您還知道了 /usr/bin/ksh 對應的索引編号。如果您同時還找到了該檔案所處的邏輯卷,那麼甚至可以顯示更多的資訊。要查找該資訊,一種方式是通過使用
df
指令來檢視該檔案位于哪個已挂載的檔案系統中:
|
檔案 /usr/bin/ksh 位于目錄 /usr/bin 中。檢視
df
指令的輸出,您可以發現,目錄 /usr/bin 包含于 /usr 檔案系統中,并且 /usr 檔案系統位于邏輯卷 /dev/hd2 之中。現在,您已經知道了索引編号和邏輯卷的名稱,那麼就可以将這兩個資訊項作為參數來使用
istat
,這樣一來,您可以确定組成該檔案的磁盤塊的十六進制位址,如清單 3 中所示。
清單 3. 确定檔案磁盤塊的十六進制位址
11 12 13 | |
Linux 提供了其特有的
istat
版本:
stat
。Linux
stat
指令可以顯示類似的資訊,并且還包括一些在 AIX
istat
指令中沒有提供的指令開關:
|
ls 指令
在您的日常工作中總會碰到這樣的情況,難以删除或者管理某些檔案,因為這些檔案的檔案名中使用了短橫線或者其他特殊字元、或者其檔案名完全不正确。這很可能是有人對該檔案進行了錯誤命名。
因為 UNIX 中的大多數指令,包括開關或者選項在内,都是以連字元 (
-
) 或者雙連字元 (
--
) 開頭的,很難使用諸如
rm
、
mv
和
cp
之類常用的指令來操作這些檔案。幸運的是,某些指令提供了一些選項,以用來顯示相關檔案所關聯的 inode 的索引編号。
ls
指令就提供了一個這樣的選項:
|
ls -i
指令,您可以看到檔案名稱旁邊的索引編号,如清單 4 中所示。現在,您已經知道了檔案的索引編号,那麼就可以很容易地操作該檔案了。
清單 4. 檢視檔案的索引編号
|
find 指令
使用 UNIX
find
指令,您可以完成使用
ls
指令所開始的工作。對于要進行操作的檔案,您已經知道了它們的索引編号,那麼就可以開始進行相應的操作了!
要删除看似無名的檔案,您隻需要使用
find
-inum
開關對索引編号和檔案進行定位。然後,在找到該檔案之後,使用
find
-exec
開關删除該檔案:
|
要對該檔案進行重命名,可以再次進行相同的操作,但這一次使用
mv
而不是
rm
:
|
為了驗證取得了預期的結果,隻需要再次使用
ls -i
指令:
|
fsck 指令
不幸的是,硬體裝置不可能一直使用下去,系統可能會在使用多年後出現故障。當發生這種情況,以及由于電源故障或者某些其他問題而導緻作業系統異常關閉的時候,您可能會在還原系統備份時碰到一些在崩潰期間處于打開狀态的檔案,并且現在需要對其加以處理。此時,您可能會碰到一些需要修複 inode 或者存在錯誤的消息。如果發生這種狀況,那麼
fsck
指令可以用來救急!您可以使用
fsck
來修複檔案系統或者修正受損的 inode ,而不是還原系統、或者甚至重新建構作業系統。
|
結束語
相關主題
-
- 您可以參閱本文在 developerWorks 全球站點上的 英文原文 。
- 對話 UNIX:檢視本系列中的其他部分。
- Wikipedia 中的 inode :在 Wikipedia 的條目中,閱讀有關 inode 的更多資訊。
- Wikipedia 中的 AIX 條目:閱讀 Wikipedia 中有關 AIX 作業系統的極好的條目,以擷取有關其背景和開發的更多資訊。
-
指令:從 Combined IBM Systems 資訊中心了解有關istat
指令的更多資訊。istat
-
fsck
fsck
-
df
df
-
chfs
chfs
-
ls
ls
-
find
find
-
smitty
smitty
- inode.h 檔案:從 Combined IBM Systems 資訊中心了解有關 inode.h 檔案的更多資訊。
- AIX and UNIX 專區:developerWorks 的“AIX and UNIX 專區”提供了大量與 AIX 系統管理的所有方面相關的資訊,您可以利用它們來擴充自己的 UNIX 技能。
- AIX and UNIX 新手入門:通路“AIX and UNIX 新手入門”頁面可了解更多關于 AIX 和 UNIX 的内容。
- AIX and UNIX 專題彙總:AIX and UNIX 專區已經為您推出了很多的技術專題,為您總結了很多熱門的知識點。我們在後面還會繼續推出很多相關的熱門專題給您,為了友善您的通路,我們在這裡為您把本專區的所有專題進行彙總,讓您更友善的找到您需要的内容。
- AIX Wiki:通路此 AIX 相關技術資訊的協作環境。