最近一個同僚面試的時候,碰到一道面試題,大緻意思是這樣:一台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)
* 檔案的大小
* 檔案所使用的磁盤塊的實際數目
* 最近一次修改的時間
* 最近一次通路的時間
* 最近一次更改的時間