歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux的inode的理解

Linux的inode的理解

日期:2017/2/28 14:28:13   编辑:Linux教程

一、問題:
  在一台Linux服務器的/data分區內創建文件時,系統提示磁盤空間不足,用df -h命令查看了一下磁盤使用情況,發現/data分區只使用了66%,還有12G的剩余空間。
二、分析問題:
  用df -i查看了一下/data分區的索引節點(inode),發現已經用滿(IUsed=100%),導致系統無法創建新目錄和文件。

inode譯成中文就是索引節點,每個存儲設備(例如硬盤)或存儲設備的分區被格式化為文件系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。
  而這台服務器的Block雖然還有剩余,但inode已經用滿,因此在創建新目錄或文件時,系統提示磁盤空間不足。

三、原因:
  /data/cache目錄中存在數量非常多的小字節緩存文件,占用的Block不多,但是占用了大量的inode。
四、解決方案:
  1、刪除/data/cache目錄中的部分文件,釋放出/data分區的一部分inode。
  2、用軟連接將空閒分區/opt中的newcache目錄連接到/data/cache,使用/opt分區的inode來緩解/data分區inode不足的問題:
  ln -s /opt/newcache /data/cache
  3、增加空間

一、inode

硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當於0.5KB)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性讀取一個"塊"(block),每個"塊"(block)由八個連續的sector組成。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,文件數據都儲存在"塊"中,那麼還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名為"索引節點"。每一個文件都有對應的inode,裡面包含了與該文件有關的一些信息。

二、inode的內容

inode包含文件的元信息,具體有以下內容:

  * 文件的字節數

  * 文件擁有者的User ID

  * 文件的Group ID

  * 文件的讀、寫、執行權限

  * 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。

  * 鏈接數,即有多少文件名指向這個inode

  * 文件數據block的位置

可以用stat命令查看某個文件的inode信息:

[root@Zabbix_server home]# stat zabbix/
File: `zabbix/'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 803h/2051d Inode: 130647 Links: 4
Access: (0700/drwx------) Uid: ( 500/ zabbix) Gid: ( 500/ zabbix)
Access: 2014-08-12 10:46:02.810999643 +0800
Modify: 2014-07-23 07:19:01.146989703 +0800
Change: 2014-07-23 07:19:01.146989703 +0800
[root@Zabbix_server home]#

除了文件名以外的所有文件信息,都存在inode之中。(為什麼沒有文件名,繼續看下文)

三、inode的大小

inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每個inode節點的大小為128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,占整塊硬盤的12.8%。

使用df -i可以查看每個硬盤分區的inode總數和已經使用的數量
[root@Zabbix_server ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 1166880 103467 1063413 9% /
tmpfs 128806 4 128802 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sr0 0 0 0 - /media/RHEL_6.5 i386 Disc 1
[root@Zabbix_server ~]#

查看每個inode節點的大小
[root@Zabbix_server ~]# dumpe2fs -h /dev/sda3 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
[root@Zabbix_server ~]#

dumpe2fs默認未加入PATH中,需要手動加入
[root@Zabbix_server ~]# export PATH=/sbin/dumpe2fs:$PATH
[root@Zabbix_server ~]# echo $PATH
/sbin/dumpe2fs:/home/script:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/bin:/usr/sbin:/usr/bin:/home:/root/bin
[root@Zabbix_server ~]#

由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬盤還未存滿的情況。這時,就無法在硬盤上創建新文件,出現上面的實例情形。

四、inode號碼

每個inode都有一個號碼,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來說,文件名只是inode號碼便於識別的別稱或者綽號。表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。

使用ls -i命令,可以看到文件名對應的inode號碼:
[root@Zabbix_server zabbix]# ls -i indoe.txt
130698 indoe.txt
[root@Zabbix_server zabbix]#

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-09/106457p2.htm

Copyright © Linux教程網 All Rights Reserved