明明硬盤只用了 30% 左右的空間,但是卻無法寫入文件。使用df -iT命令查看文件系統(tǒng)使用情況時,發(fā)現(xiàn)根目錄的 inode 使用率竟然是 100%。后來通過聊天得知,原來他的服務(wù)器主要用于存儲 1KB 左右的小文件,這一下就破案了。
inode 主要用來記錄文件的屬性,及此文件的數(shù)據(jù)所在的塊編號。每一個文件會占用一個 inode,因此如果都是小文件的話,那么就會出現(xiàn) inode 已經(jīng)耗盡,但文件系統(tǒng)還有很大的空閑空間,從而無法寫入新文件。
如何獲得更多的 inode
其實在創(chuàng)建 ext4 文件系統(tǒng)時,我們可以使用-T small參數(shù)來獲得更多的 inode,從而優(yōu)化對小文件的存儲。接下來我們通過一個示例來看看效果。
這是兩塊相同大小的硬盤:
root@debian:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part
sdc 8:32 0 1G 0 disk
└─sdc1 8:33 0 1023M 0 part
首先使用默認(rèn)參數(shù)給/dev/sdb1創(chuàng)建文件系統(tǒng):
root@debian:~# /sbin/mkfs.ext4 /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 261888 4k blocks and 65536 inodes
Filesystem UUID: 8935c902-df71-4808-b547-c85b6fd37a46
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
從輸出中可見,該文件系統(tǒng)有 261888 個 4KB 大小的塊和 65536 個 inode。
然后使用-T參數(shù)對/dev/sdc1創(chuàng)建文件系統(tǒng):
root@debian:~# /sbin/mkfs.ext4 -T small /dev/sdc1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 1047552 1k blocks and 262144 inodes
Filesystem UUID: f521096d-a5a1-41c9-bbf7-e6102e74e87a
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
1024001
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
從輸出中可見,該文件系統(tǒng)有 1047552 個 1KB 大小的塊和 262144 個 inode。
也可以通過以下方式對比兩個文件系統(tǒng)的 inode 數(shù)量:
root@debian:~# mkdir default small
root@debian:~# mount /dev/sdb1 default/
root@debian:~# mount /dev/sdc1 small/
root@debian:~# df -iT
Filesystem Type Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 ext4 65536 11 65525 1% /root/default
/dev/sdc1 ext4 262144 11 262133 1% /root/small
從以上示例中我們可以看出,在使用-T small參數(shù)后,inode 數(shù)量多了近 20 萬個!
注意:這樣做也是有代價的。在使用默認(rèn)參數(shù)創(chuàng)建 ext4 文件系統(tǒng)時,默認(rèn)數(shù)據(jù)塊大小為 4KB,而使用-T small參數(shù)后,數(shù)據(jù)塊大小為 1KB。這就意味著我們存儲一個同樣大小的文件,使用-T small參數(shù)創(chuàng)建的文件系統(tǒng)存儲該數(shù)據(jù)時,占用的數(shù)據(jù)塊更多,數(shù)據(jù)更分散,如果文件較大,會直接影響文件的讀取速度
mke2fs(mkfs.ext4)的-T參數(shù)指定了如何使用該文件系統(tǒng),以便mke2fs可以為該用途選擇最佳的文件系統(tǒng)參數(shù),其支持的使用類型在配置文件 /etc/mke2fs.conf 中定義,可以使用逗號分隔指定一個或多個使用類型
inode 不足的解決方法
當(dāng)你已有的文件系統(tǒng)上出現(xiàn) inode 不足的問題時,除了備份數(shù)據(jù)、重建分區(qū)并恢復(fù)分區(qū)數(shù)據(jù)外,還有兩種臨時解決方案:
1、刪除文件大小為 0 的空文件,可以使用如下命令查找:
find PATH -name "*" -type f -size 0c
注意:使用-size參數(shù)時,不要用-size 1k,這個表示占用空間為 1KB,而不是文件大小為 1KB,應(yīng)該使用-size 1024c才表示文件大小為 1KB。
2、可以定期對歷史小文件進(jìn)行打包、歸檔,以減少文件數(shù)量。
審核編輯:劉清
-
存儲器
+關(guān)注
關(guān)注
38文章
7518瀏覽量
164072
原文標(biāo)題:如何解決服務(wù)器存儲 inode 耗盡的問題
文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論