淺談linux的inode

linux中inode是個什麼概念呢?簡單的說inode是一個不能重複的標號一樣,每個文件或目錄對應一個inode值,那個inode包含哪些部分,有什麼作用呢?這裏拿ext3文件系統的inode數據結構來說:
struct ext3_inode {
 __u16 i_mode;    /* File mode */
 __u16 i_uid;     /* Low 16 bits of Owner Uid */
 __u32 i_size;    /* 文件大小,單位是 byte */
 __u32 i_atime;   /* Access time 訪問時間*/
 __u32 i_ctime;   /* Creation time 創建時間*/
 __u32 i_mtime;   /* Modification time 修改時間*/
 __u32 i_dtime;   /* Deletion Time 刪除時間*/
 __u16 i_gid;     /* Low 16 bits of Group Id */
 __u16 i_links_count;          /* Links count */
 __u32 i_blocks;               /* blocks 計數 */
 __u32 i_flags;                /* File flags */
 __u32 l_i_reserved1;          /* 可以忽略 */
 __u32 i_block[EXT3_N_BLOCKS]; /* 一組 block 指針 ,指向數據文件在磁盤上的指針*/
 __u32 i_generation;           /* 可以忽略 */
 __u32 i_file_acl;             /* 可以忽略 */
 __u32 i_dir_acl;              /* 可以忽略 */
 __u32 i_faddr;                /* 可以忽略 */
 __u8  l_i_frag;               /* 可以忽略 */
 __u8  l_i_fsize;              /* 可以忽略 */
 __u16 i_pad1;                 /* 可以忽略 */
 __u16 l_i_uid_high;           /* 可以忽略 */
 __u16 l_i_gid_high;           /* 可以忽略 */
 __u32 l_i_reserved2;          /* 可以忽略 */
};

因爲inode主要是佔用磁盤空間的,那麼今天就討論一下inode分配與佔用磁盤問題,之前聽人說xfs文件系統inode佔用的磁盤空間達到了相當多G,當然這是因爲他的文件系統本來就是用來存放小文件的,所以導致inode佔用的空間也很大。

在你爲一個硬盤或是分區建好文件系統以後,文件系統已經確定了這塊硬盤或是分區最後能有多少inode被分配,這些inode能佔用多大的空間。查看一個硬盤或分區的文件系統信息,可以通過dumpe2fs -h device_name 來查看,比如我的系統中一個分區/dev/sda8 (ext3)
$ dumpe2fs -h /dev/sda8

dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   home
Last mounted on:          <not available>
Filesystem UUID:          78a58693-dc1a-43c0-9eaf-6c0807626c14
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Filesystem flags:         signed_directory_hash
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              16318464
Block count:              65241965
Reserved block count:     652419
Free blocks:              58319070
Free inodes:              16135620
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1008
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Fri Oct 14 16:13:01 2011
Last mount time:          Wed Feb 29 16:29:51 2012
Last write time:          Wed Feb 29 16:29:51 2012
Mount count:              5
Maximum mount count:      -1
Last checked:             Fri Oct 14 16:13:01 2011
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       8437776
Default directory hash:   half_md4
Directory Hash Seed:      0eddc0e6-7fa9-4226-8534-59b633b5e88b
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
日誌大小:             128M
Journal length:           32768
Journal sequence:         0x006cea77
Journal start:            3735

裏面的信息很豐富(比如ext3是一種典型的記錄日誌的fs,你從上面也可以得到這些信息),我們需要關注的是inode相關的,下面看幾個常見的。
Inode count:              16318464
Free inodes:              16135620
Inode size:              256

Inode count,表示這個分區最大可以分配多少個inode,這也間接的限制了文件和目錄的數目。
Free inodes,當前可用的inode數目
Inode size,每個inode佔用的物理空間大小,字節爲單位。

這些參數一般都是默認的,mke2fs建立文件系統時都會幫你搞定,如果你想自己修改默認的參數,那麼在使用mkfs時注意這幾個參數:
-i bytes-per-inode 這個參數指定物理磁盤每分配給多少byte給數據文件(inode文件獨立於數據文件),就分配一個分配inode空間給inode用
-N number-of-inodes 這個參數顯示的指定分區最多可以由多少個inode
-I inode-size 這個參數是指定每個inode大小,這個估計沒有人會去改

更詳細的用法man mke2fs查看,另外還有一種方式查看當前每個分區的inode使用情況,這個僅僅都是查看當前inode空間的使用情況:df -i或者df -hi

需要注意的是在建立文件系統以後所有的這些inode信息都已經固定了,除非你重新建立文件系統否則的話無法對其進行更改,而重新建立文件系統又要備份原數據,所以要預先估計好。當然絕大部分情況下這些默認參數都沒有必要更改,如果幾乎全部存放大文件,將-i調大(這樣分配的inode就會更少)而節約一點inode空間,顯然沒必要,現在硬盤都已經這麼便宜了。不過如果存放的小文件特別多,比如現在很多大公司流行的分佈式文件系統,這或許有一點用,我是沒更改過參數,如果哪個公司調整過了,分享一下經驗。不過預留一點空間在inode上面這個想法我覺得是可行的,不怕一萬就怕萬一。

還有一點,即使磁盤空間還有很多剩餘,也不一定這部分空間就能利用到,因爲inode的數目是有限的,如果創建了足夠多的小文件將這些inode用完,那麼將不能再創建新的文件。


轉自:http://blog.csdn.net/zbszhangbosen/article/details/7535928
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章