摘要:inode 索引節點是Unix/Linux文件系統中用來存儲文件元信息的區域,里面包含的件元信息:文件字節數 User ID 、Group ID 文件權限、文件的時間戳、ctime inode上次變動時間及mtime 文件內容上一次變動的時間。
inode索引節點是Unix/Linux文件系統中用來存儲文件元信息的區域里面包含的文件元信息:
文件字節數
User ID
Group ID
文件的權限
文件的時間戳,ctime inode上一次變動的時間,mtime 文件內容上一次變動的時間,atime 文件上一次打開的時間
鏈接數,多少文件名指向這個inode
存儲的block位置
查看inode信息,可以通過stat命令查看stat +filename如果文件存在異常,如網站被植入廣告等,可以通過這個命令查看文件的時間戳,判斷近期是否文件有被異常篡改的跡象,每個inode都有一個號碼,是inode的唯一標識符系統在讀取文件時,系統并非是通過“文件名”去讀取文件數據的,文件名只是“inode”的一個別名,系統是通過文件名找到對應的inode的號碼,再獲取inode信息,找到對應的block讀取文件數據的。
查看inode號碼,可以通過ls -i命令查看,在文件異常或者文件名有特殊字符無法刪除時,可通過inode號碼刪除inode節點來實現刪除文件的目的是由于每一個文件都需要有一個inode,所以有時會出現磁盤存儲空間還有剩余的時候,向磁盤寫入數據提示“No space left on device”?的情況,這個時候很可能是inode數用完導致。
查看磁盤的inode使用情況,可以通過df命令的 -i參數磁盤的inode數量在磁盤格式化時就需要規劃好,在格式化時通過 -N指定inode的數量(如果不指定inode數量,系統會根據文件的blocksize和bytes/inode來自動計算
例如:mkfs.ext3 /dev/xvdb -N 100000?? # 格式化/dev/xvdb 指定inode數量是100000
線上運行的服務器,如果初始磁盤時沒有規劃好inode數量,出現上述的問題,就需要查找消耗inode的問題
通過命令find */ ! -type l | cut -d / -f 1 | uniq -c |sort -nr
可以列出當前磁盤中文件數較多的目結合實際業務刪除不需要的文件,釋放一定的inode即可繼續寫入數據
一般文件名和inode號是一一對應的,但在Unix/Linux系統中,允許多個文件名指向同一個inode號,即硬鏈接(硬鏈接就可以理解為不同的文件名指向同一個inode號),對硬鏈接文件和源文件修改都是修改的相同的存儲數據,修改數據戶影響到所有文件名,刪除一個文件名不影響另外的文件名讀取文件數據通過ln命令可以創建,在inode信息中有鏈接數,創建一個硬鏈接該數量就會加1,反之刪除硬鏈接則會減1,目錄文件的鏈接數默認是2,創建目錄時,會創建兩個目錄項“.”inode號是當前目錄的inode號,“..”inode號是父目錄的inod
相對硬鏈接,還有軟鏈接。軟鏈接文件的inode號和源文件不同,但文件內容是源文件的路徑,訪問軟鏈接文件時,系統會導向源文件,軟鏈接依存于源文件,源文件刪除,軟鏈接將無法讀取,由于inode號不同,所以如果有大量軟鏈接,會消耗indoe數量,存儲空間卻不會消耗,當有大量軟鏈接占用inode,導致無法寫入文件,又不方便格式化磁盤調整inode,可以通過以下方法獲取一些inode數:
dd if=/dev/zero of=disk.img count=1024 bs=1024(創建一個空文件)
mkfs.ext2 -N 1000000 -b 1024 -I 128 disk.img(格式化指定inode)
mount -o loop disk.img /data/dd4inde/(掛載到一個空目錄)