天天看點

linux/unix inode的一個面試問題及一些概念

最近一個同僚面試的時候,碰到一道面試題,大緻意思是這樣:一台linux伺服器,磁盤空間還剩餘很多,但是卻報磁盤空間不足,為什麼?

這個問題應該是inode使用完導緻的。要處理這個問題,要麼删除不再使用的檔案,要麼增加檔案系統的空間。

使用指令df -i可以檢視檔案系統inode的使用情況,例如

root@debian:/tmp# df -i

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/sda1             499712  133153  366559   27% /

tmpfs                 129310       5  129305    1% /lib/init/rw

udev                  128223     612  127611    1% /dev

tmpfs                 129310       1  129309    1% /dev/shm

使用ls -i可以檢視檔案或目錄的inode資訊:

root@debian:/mnt# ls -li

total 1154

2250 -r--r--r-- 1 root root     27 Feb  5 08:27 autorun.inf

2496 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 css

2258 lr-xr-xr-x 1 root root      1 Feb  5 08:27 debian -> .

2560 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 dists

3072 dr-xr-xr-x 1 root root   4096 Feb  5 08:27 doc

14080 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 firmware

2272 -r--r--r-- 1 root root 110070 Jan 17 04:12 g2ldr

2275 -r--r--r-- 1 root root   8192 Jan 17 04:12 g2ldr.mbr

14144 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 install

14208 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 install.386

14336 dr-xr-xr-x 1 root root   4096 Feb  5 08:27 isolinux

2290 -r--r--r-- 1 root root 481874 Feb  5 08:30 md5sum.txt

14656 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 pics

14720 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 pool

2304 -r--r--r-- 1 root root   9561 Feb  5 08:30 README.html

2315 -r--r--r-- 1 root root 142252 Feb  4 22:52 README.mirrors.html

2319 -r--r--r-- 1 root root  76632 Feb  4 22:52 README.mirrors.txt

2307 -r--r--r-- 1 root root    398 Feb  5 08:27 README.source

2311 -r--r--r-- 1 root root   6062 Feb  5 08:30 README.txt

2324 -r--r--r-- 1 root root 319525 Jan 17 04:12 setup.exe

156096 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 tools

2331 -r--r--r-- 1 root root    237 Feb  5 08:27 win32-loader.ini

以下是inode的一些概念性的東西,在此記錄,以備不時之需。

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)

* 檔案的大小

* 檔案所使用的磁盤塊的實際數目

* 最近一次修改的時間

* 最近一次通路的時間

* 最近一次更改的時間

繼續閱讀