共找到2條詞條名為inode的結果 展開

inode

存放檔案及目錄信息的結構體

inode(發音:eye-node)譯成中文就是索引節點,它用來存放檔案及目錄的基本信息,包含時間、檔名、使用者及群組等。

簡介


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釋放為止。

結構


對於經驗豐富的UNIX開發人員或者管理員來說,inode的結構相對比較簡單,但是可能還有一些您尚不了解的、令人驚訝的有關inode的內幕。下面的定義僅給出了inode中所包含的、UNIX用戶經常使用的一些重要信息:
●inode編號
●用來識別文件類型,以及用於statC函數的模式信息
●文件的鏈接數目
●屬主的ID(UID)
●屬主的組ID(GID)
●文件的大小
●文件所使用的磁碟塊的實際數目
●最近一次修改的時間
●最近一次訪問的時間
●最近一次更改的時間
從根本上講,inode中包含有關文件的所有信息(除了文件的實際名稱以及實際數據內容之外)。可以在AIXHeader文件/usr/include/jf/ino.h中、或者Web頁面中可以找到完整的inode結構。
以上所列舉的信息對於文件來說非常重要,並且在UNIX中頻繁使用。如果沒有這些信息,那麼文件將被認為遭到破壞和不可用。
與其他的操作系統相比,UNIX系統中的目錄和文件可能看起來有所不同,但事實並非如此。在UNIX中,目錄本身就是文件,只是在它們的inode中使用了一些附加的設置。目錄本質上就是一個包含了其他文件的文件。另外,其模式信息中設置了一些相應的標誌,以告知系統該文件實際上是一個目錄。

使用


了解如何在UNIX中使用inode可以節約大量的時間,並提高工作效率。在尚未了解inode之前,您可以使用下面的命令,以減少可能碰到的問題。
df命令
如前所述,當您在UNIX中創建一個文件系統時,將為inode表分配大約百分之一的總磁碟空間。每次在文件系統中創建一個文件時,都會為該文件分配一個inode。通常,與一個文件系統相關聯的inode的數目足夠多,但耗盡inode的可能性始終存在。要監視是否發生了這種情況,您可以觀察df的輸出。
使用df命令,您可以查看所有已掛載的文件系統或者特定的文件系統。在該命令的輸出中,您可以查看各個文件系統中已使用的inode的數目,以及文件系統中總體使用情況百分比,如清單1中所示。
清單1.使用df來監視inode的使用
#df-i
FilesystemInodesIUsedIFreeIUse%Mountedon
/dev/sda2103632014745988886115%/
tmpfs25495562549491%/dev/shm
/dev/sda17691238768741%/boot
如果由於某種原因,某個文件系統inode的使用率達到百分之百,那麼您將無法在該文件系統中創建更多的文件、設備、目錄等等。對於這種情況,一種解決方案是通過smittychfs命令為該文件系統添加更多的空間,如圖1所示。另一種解決方案是創建較小的inode區段。現在,在增強的日誌文件系統(EnhancedJournalFileSystem)中,IBMAIX5L允許inode區段小於16KB的預設大小。請記住,如果您在AIX5L中使用這個選項,那麼將無法從較早版本的AIX訪問該文件系統。
圖1.smittychfs命令的結果
inode[索引節點]
inode[索引節點]
istat和stat
在AIX中檢查inode的一種快捷的方式是使用istat命令。使用這個命令,您可以找到特定文件的索引編號,以及其他的inode項目,如許可權、文件類型、UID、GID、鏈接的數目(非符號鏈接)、文件大小和最近一次更新、最近一次修改以及最近一次訪問的時間戳。
清單2顯示了AIX中文件/usr/bin/ksh的inode信息。
清單2./usr/bin/ksh的inode信息
#istat/usr/bin/ksh
Inode18150ondevice10/8File
Protection:r-xr-xr-x
Owner:2(bin)Group:2(bin)
Linkcount:5Length237804bytes
Lastupdated:WedOct2417:37:10EDT2007
Lastmodified:WedApr1823:58:06EDT2007
Lastaccessed:MonApr2811:25:35EDT2008
除了顯示來自istat的標準信息之外,現在您還知道了/usr/bin/ksh對應的索引編號。如果您同時還找到了該文件所處的邏輯卷,那麼甚至可以顯示更多的信息。要查找該信息,一種方式是通過使用df命令來查看該文件位於哪個已掛載的文件系統中:
#df/usr/binFilesystem512-blocksFree%UsedIused%IusedMountedon/dev/hd216056320192538489%11003433%/usr
文件/usr/bin/ksh位於目錄/usr/bin中。查看df命令的輸出,您可以發現,目錄/usr/bin包含於/usr文件系統中,並且/usr文件系統位於邏輯卷/dev/hd2之中。現在,您已經知道了索引編號和邏輯卷的名稱,那麼就可以將這兩個信息項作為參數來使用istat,這樣一來,您可以確定組成該文件的磁碟塊的十六進位地址,如清單3中所示。
清單3.確定文件磁碟塊的十六進位地址
#istat18150/dev/hd2
Inode18150ondevice10/8File
Protection:r-xr-xr-x
Owner:2(bin)Group:2(bin)
Linkcount:5Length237804bytes
Lastupdated:WedOct2417:37:10EDT2007
Lastmodified:WedApr1823:58:06EDT2007
Lastaccessed:MonApr2811:44:20EDT2008
Blockpointers(hexadecimal):
11620ef8c0
Linux提供了其特有的istat版本:stat。Linuxstat命令可以顯示類似的信息,並且還包括一些在AIXistat命令中沒有提供的命令開關:
#stat/bin/bashFile:`/bin/bash'Size:722684Blocks:1432IOBlock:4096regularfileDevice:fd00h/64768dInode:12799859Links:1Access:(0755/-rwxr-xr-x)Uid:(0/root)Gid:(0/root)Access:2008-04-0619:13:50.000000000-0400Modify:2006-07-1203:11:53.000000000-0400Change:2007-11-2204:05:30.000000000-0500
ls命令
在您的日常工作中總會碰到這樣的情況,難以刪除或者管理某些文件,因為這些文件的文件名中使用了短橫線或者其他特殊字元、或者其文件名完全不正確。這很可能是有人對該文件進行了錯誤命名。
因為UNIX中的大多數命令,包括開關或者選項在內,都是以連字元(-)或者雙連字元(--)開頭的,很難使用諸如rm、mv和cp之類常用的命令來操作這些文件。幸運的是,某些命令提供了一些選項,以用來顯示相關文件所關聯的inode的索引編號。ls命令就提供了一個這樣的選項:
#ls----pfileAfileBfileCfileDfileEfileFfileGfileHfileIfileJfileKfileL
使用ls-i命令,您可以看到文件名稱旁邊的索引編號,如清單4中所示。現在,您已經知道了文件的索引編號,那麼就可以很容易地操作該文件了。
清單4.查看文件的索引編號
#ls–i
3898838991-p38984fileC38982fileF38977fileI38978fileL
38989-38980fileA38986fileD38983fileG38987fileJ
38990--38979fileB38976fileE38985fileH38981fileK
find命令
使用UNIXfind命令,您可以完成使用ls命令所開始的工作。對於要進行操作的文件,您已經知道了它們的索引編號,那麼就可以開始進行相應的操作了!
要刪除看似無名的文件,您只需要使用find和-inum開關對索引編號和文件進行定位。然後,在找到該文件之後,使用find和-exec開關刪除該文件:
#find.-inum38988-execrm{}\;
要對該文件進行重命名,可以再次進行相同的操作,但這一次使用mv而不是rm:
#find.-inum38989-execmv{}fileM\;
為了驗證取得了預期的結果,只需要再次使用ls-i命令:
#ls-i38990--38979fileB38976fileE38985fileH38981fileK38991-p38984fileC38982fileF38977fileI38978fileL38980fileA38986fileD38983fileG38987fileJ38989fileM
fsck命令
不幸的是,硬體設備不可能一直使用下去,系統可能會在使用多年後出現故障。當發生這種情況,以及由於電源故障或者某些其他問題而導致操作系統異常關閉的時候,您可能會在還原系統備份時碰到一些在崩潰期間處於打開狀態的文件,並且現在需要對其加以處理。此時,您可能會碰到一些需要修復inode或者存在錯誤的消息。如果發生這種狀況,那麼fsck命令可以用來救急!您可以使用fsck來修復文件系統或者修正受損的inode,而不是還原系統、或者甚至重新構建操作系統。
下面的命令可以嘗試修復邏輯卷/dev/hd1:
#fsck–p/dev/hd1–y
通過使用fsck命令,您還可以縮小受損inode的搜索範圍。如果您正在搜索一個特定的inode,那麼可以使用帶-ii-NodeNumber開關的fsck命令。

意義


如果沒有inode,那麼UNIX中的文件和目錄將根本無法使用。希望在閱讀完本文之後,您可以更好地了解inode、它們對於AIX系統的重要性,以及如何管理它們。您可能會對df命令的看法大為改觀。