掘金 后端 ( ) • 2024-04-11 17:49

什么是inode

inode是指Unix文件系统中的索引节点(index node),用于存储关于文件或目录的元数据信息,例如文件大小、拥有者、权限、时间戳等。每个文件或目录在文件系统中都有一个唯一的 inode 号码,通过这个号码可以快速定位并访问文件的元数据信息。因此,inode 在文件系统中起着非常重要的作用,它记录了文件或目录的属性和位置,而实际的文件数据则存储在数据块中。

查看文件/目录的inode信息

[root@localhost ~]# stat flannel.yaml
  File: ‘flannel.yaml’
  Size: 4821      	Blocks: 16         IO Block: 4096   regular file
Device: fd01h/64769d	Inode: 266507      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-12-08 16:58:33.373412736 +0800
Modify: 2023-12-08 16:58:27.716315686 +0800
Change: 2023-12-08 16:58:27.716315686 +0800
 Birth: -

查看inode的使用情况

[root@localhost ~]# df -i
Filesystem        Inodes    IUsed     IFree IUse% Mounted on
/dev/sda3         262144   262104        40  100% /data0
devtmpfs        16426671      620  16426051    1% /dev
tmpfs           16429256        6  16429250    1% /dev/shm
tmpfs           16429256     1481  16427775    1% /run
tmpfs           16429256       16  16429240    1% /sys/fs/cgroup
/dev/sda1         786432   172461    613971   22% /
/dev/sda5         524288       39    524249    1% /usr
/dev/sda6         524288    14089    510199    3% /var

调整inode数量

如需要调整inode节点的数量需要进行以下几步:

卸载文件系统

[root@localhost ~]# umount /data0

建立文件系统,指定inode节点数

[root@localhost ~]# mkfs.ext4 /dev/sda3 -N 18276352

修改fstab文件

[root@localhost ~]# vi /etc/fstab
/dev/sda6 /data0 ext4 defaults 1 2

挂载文件系统

[root@localhost ~]# mount -a

查看修改后的inode参数

[root@localhost ~]# dumpe2fs -h /dev/sda3 | grep node

注意:调整inode数会格式化磁盘,执行前应确定磁盘上没有重要数据或是先备份数据

清理 inode

# 分析根目录下的每个二级目录下有多少个文件
for i in /*; do echo $i; find $i | wc -l; done

逐层进入inode占用最高的目录,继续执行上述指令,逐步定位占用过高空间的文件或目录,最后进行相应清理。

本次故障经查发现/var/spool/postfix/maildrop目录占用较高,永久性解决该问题需要进行如下配置修改:

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="" # 默认为MAILTO=root

[root@localhost ~]#  crontab -e 
MAILTO="" # 在最前面直接加入MAILTO=""
46 8 * * * /usr/sbin/ntpdate tiger.com.cn >/dev/null

最后重启crond服务,之后执行crond定时任务时将不会再发送邮件。

如果是var/spool/clientmqueue占用,两种方法:

  • 删除此目录;
  • 在cron 任务中的后面加上 > /dev/null 2>&1