明明硬盘只用了 30% 左右的空间,但是却无法写入文件。使用 df -it 命令查看文件系统使用情况时,发现根目录的 inode 使用率竟然是 100%。后来通过聊天得知,原来他的服务器主要用于存储 1kb 左右的小文件,这一下就破案了。
inode 主要用来记录文件的属性,及此文件的数据所在的块编号。每一个文件会占用一个 inode,因此如果都是小文件的话,那么就会出现 inode 已经耗尽,但文件系统还有很大的空闲空间,从而无法写入新文件。
如何获得更多的 inode
其实在创建 ext4 文件系统时,我们可以使用 -t small 参数来获得更多的 inode,从而优化对小文件的存储。接下来我们通过一个示例来看看效果。
这是两块相同大小的硬盘:
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
首先使用默认参数给 /dev/sdb1 创建文件系统:
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
从输出中可见,该文件系统有 261888 个 4kb 大小的块和 65536 个 inode。
然后使用 -t 参数对 /dev/sdc1 创建文件系统:
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
从输出中可见,该文件系统有 1047552 个 1kb 大小的块和 262144 个 inode。
也可以通过以下方式对比两个文件系统的 inode 数量:
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 参数后,inode 数量多了近 20 万个!
注意: 这样做也是有代价的。在使用默认参数创建 ext4 文件系统时,默认数据块大小为 4kb,而使用 -t small 参数后,数据块大小为 1kb。这就意味着我们存储一个同样大小的文件,使用 -t small 参数创建的文件系统存储该数据时,占用的数据块更多,数据更分散,如果文件较大,会直接影响文件的读取速度
mke2fs(mkfs.ext4)的 -t 参数指定了如何使用该文件系统,以便 mke2fs 可以为该用途选择最佳的文件系统参数,其支持的使用类型在配置文件 /etc/mke2fs.conf 中定义,可以使用逗号分隔指定一个或多个使用类型
inode 不足的解决方法
当你已有的文件系统上出现 inode 不足的问题时,除了备份数据、重建分区并恢复分区数据外,还有两种临时解决方案:
1、删除文件大小为 0 的空文件,可以使用如下命令查找:
find path -name * -type f -size 0c
注意: 使用 -size 参数时,不要用 -size 1k,这个表示占用空间为 1kb,而不是文件大小为 1kb,应该使用 -size 1024c 才表示文件大小为 1kb。
2、可以定期对历史小文件进行打包、归档,以减少文件数量。
PCBA制造和使用过程发生操作不当的维护方法
美国或将中芯国际列入实体清单,中方对此坚决反对
单片机常用名词解释大全
网络隔离边界安全接入技术
如何选择合适你的ipad
怎么去解决服务器存储inode耗尽的问题呢?
并联型晶体振荡电路
测报工具箱可有效减少病虫害对植物生长的影响
装电脑的内存需求和要求
便携式叶绿素检测仪的工作原理
18键触摸触控芯片VK3618I内部采用特殊的集成电路,具有高电源电压抑制比
液晶打响龙头地位争夺战,OLED不同路线角逐战将起
半导体和集成电路 16k RAM在起跑线上排队
当DisplayPort技术搭上USB Type会发什么?
小米5c曝光:售价1499元,3月3日零点开售
请问多个路由器如何组网呢?
AMD的胜利 英特尔三季度净利润下降近3成
RS-485收发器相关问题解答
华为即将发布P10,和小米6同台竞技你会选谁?
谁说手机灰色太难看,vivo X9力争打造世界级的星空灰