linux 增加inode 的方法

    創建文件系統時,可以指定塊的大小。如果將來在你的文件系統中是一些比較大的文件的話,使用較大的塊大小將得到較好的性能。將ext2文件系統的塊大小調整爲4096byte而不是缺省的1024byte,可以減少文件碎片,加快fsck掃描的速度和文件刪除以及讀操作的速度。另外,在ext2的文件系統中,爲根目錄保留了5%的空間,對一個大的文件系統,除非用作日誌文件,5%的比例有些過多。可以使用命令"# mke2fs -b 4096 -m 1 /dev/hda6"將它改爲1%並以塊大小4096byte創建文件系統。 

使用多大的塊大小,需要根據你的系統綜合考慮,如果系統用作郵件或者新聞服務器,使用較大的塊大小,雖然性能有所提高,但會造成磁盤空間較大的浪費。比如文件系統中的文件平均大小爲2145byte,如果使用4096byte的塊大小,平均每一個文件就會浪費1951byte空間。如果使用 1024byte 的塊大小,平均每一個文件會浪費927byte空間。在性能和磁盤的代價上如何平衡,要看具體應用的需要。 

第1組命令: 
mkfs.ext3 -T news /dev/sda5 (指定該分區文件系統的塊大小爲4096) 
mkfs.ext3 -b 4096 /dev/sda5 

第2組命令: 
mkfs.ext3 -i 4096 /dev/sda5 (指定每個inode的字節數爲4096) 
mkfs.ext3 /dev/sda5 
mkfs.ext3 -b 2046 -m 2 /dev/hda5 格式化並設置數據塊爲2KB,設置保留塊爲2% 

或者用tune2fs -m 2 /dev/hda4 這種方法不用格式化就可設置 

tune2fs -l /dev/hda5 可以查看文件系統的詳細信息 

tune2fs -j /dev/hda4 可以將ext2轉換爲ext3而不損壞數據 

文件系統的檢查工具:fsck e2fsck 

e2fsck 用時有危險,不能很好的辨識文件系統,特別是ext2,ext3混用時 

fsck得用法:fsck -t ext3 /dev/hda5 或 fsck.ext3 /dev/hda5


實踐得到的方法:

150G硬盤得到140M inode 命令爲: (注意在格式化之前要先umount 分區才能執行下面的命令)

mkfs.ext3 -i 1024 -m 1 /dev/sda5



優化 Ext4 分區格式化後佔用空間(通過降低inode數來節省磁盤空間)


有多少個 inode 就能存多少個文件,無論文件有多大,而一個 inode 要 256 字節。

而 inode 數量是由格式化程序(這裏就是 mkfs.ext4)根據自動算出來的。默認是 16K 一個 inode也就是說,就算你在這個分區全是 16K 小的文件,都有足夠數量的 inode 使用。

但問題是,對於我這種拿來當倉庫用的分區,不可能全是 16K 的文件呀,高清電影和光盤映像都是上 G 的東西了。上面說過,一個文件要 inode,就算這個分區都塞滿了,肯定還有很多 inode 沒被使用,明顯是浪費掉了。

扯了這麼多還是在個實際例子吧,就拿我這個 2T 新硬盤爲例。格式化時會輸出一些信息

$ sudo mkfs.ext4 -n /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
122101760 inodes, 488378368 blocks
24418918 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848

看到有 122101760 個 inodes 吧,一個 inode 佔256字節,那麼換算成 M 單位是:(122101760 * 256) / (1024 ** 20 = 29810M,差不多 30G 啊!

警告!警告!嚴重警告! 上面的命令怎麼多了個 -n 參數?-n 參數表示模擬運行,但不格式化,這樣可以看不同的格式化參數會有什麼效果。如果沒有這個參數,那就真的格式化了。所以對有數據的分區測試時千萬要記得加上-n 參數!下面我都帶上這個參數。

但是運行 mkfs.ext4 需要 root 權限,漏了 -n 太危險,可以用 tune2fs 查看文件系統各種信息。

sudo tune2fs -l /dev/sdc1

找 Inode count 一行。

man 一下 mkfs.ext4,發現有兩個參數可以制定 inode 數量

  • -i bytes-per-inode:多少個字節一個 inode

  • -N number-of-inodes:直接制定 inode 數量

默認 16k 一個 inode 相當於

sudo mkfs.ext4 -i 16384 -n /dev/sdc

把這個數字加大了就行了,最好是 1024 的倍數。比如 1M,即 1048576 字節。

sudo mkfs.ext4 -i 1048576 -n /dev/sdc

其實在 /etc/mke2fs.conf 定義了一些默認值,可以用 -T 來指定類型,比如 largefile 類型就是 1M 一個 inode,上一個命令相當於

sudo mkfs.ext4 -T largefile -n /dev/sdc

還有一個 largefile4,4M 一個 inode。不過比 largefile 才少了 300M,對於 2T 來說小意思了,沒必要省,萬一小文件過多 inode 不夠呢?

於是

$ sudo mkfs.ext4 -T largefile -n /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
1907840 inodes, 488378368 blocks
24418918 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
128 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848

還有 1907840 個 inode,可以保存 1907840 個文件,真夠了,估計也難用滿。(1907840 * 256) / (1024 ** 2) = 465M, 省出 29810 - 465 = 29345M,29G!十來部高清了。

格式化也只需半分鐘,佔用 700M 左右,因爲還有日誌其它什麼的,過度優化沒必要了,控制在 1G 內我覺得夠了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章