創建文件系統時,可以指定塊的大小。如果將來在你的文件系統中是一些比較大的文件的話,使用較大的塊大小將得到較好的性能。將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 內我覺得夠了。