Redian新闻
>
如何解决服务器存储 inode 耗尽的问题 | Linux 中国

如何解决服务器存储 inode 耗尽的问题 | Linux 中国

科技
 
导读:明明硬盘只用了 30% 左右的空间,但是却无法写入文件。                             
本文字数:2976,阅读时长大约:3分钟

http://www.yanjun.pro/?p=128
作者:老颜随笔

今天群里一朋友遇到这样一个问题,明明硬盘只用了 30% 左右的空间,但是却无法写入文件。使用 df -iT 命令查看文件系统使用情况时,发现根目录的 inode 使用率竟然是 100%。后来通过聊天得知,原来他的服务器主要用于存储 1KB 左右的小文件,这一下就破案了。

inode 主要用来记录文件的属性,及此文件的数据所在的块编号。每一个文件会占用一个 inode,因此如果都是小文件的话,那么就会出现 inode 已经耗尽,但文件系统还有很大的空闲空间,从而无法写入新文件。

如何获得更多的 inode

其实在创建 ext4 文件系统时,我们可以使用 -T small 参数来获得更多的 inode,从而优化对小文件的存储。接下来我们通过一个示例来看看效果。

这是两块相同大小的硬盘:

  1. root@debian:~# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
  3. sdb 8:16 0 1G 0 disk
  4. └─sdb1 8:17 0 1023M 0 part
  5. sdc 8:32 0 1G 0 disk
  6. └─sdc1 8:33 0 1023M 0 part

首先使用默认参数给 /dev/sdb1 创建文件系统:

  1. root@debian:~# /sbin/mkfs.ext4 /dev/sdb1
  2. mke2fs 1.47.0 (5-Feb-2023)
  3. Creating filesystem with 261888 4k blocks and 65536 inodes
  4. Filesystem UUID: 8935c902-df71-4808-b547-c85b6fd37a46
  5. Superblock backups stored on blocks:
  6. 32768, 98304, 163840, 229376
  7. Allocating group tables: done
  8. Writing inode tables: done
  9. Creating journal (4096 blocks): done
  10. Writing superblocks and filesystem accounting information: done

从输出中可见,该文件系统有 261888 个 4KB 大小的块和 65536 个 inode。

然后使用 -T 参数对 /dev/sdc1 创建文件系统:

  1. root@debian:~# /sbin/mkfs.ext4 -T small /dev/sdc1
  2. mke2fs 1.47.0 (5-Feb-2023)
  3. Creating filesystem with 1047552 1k blocks and 262144 inodes
  4. Filesystem UUID: f521096d-a5a1-41c9-bbf7-e6102e74e87a
  5. Superblock backups stored on blocks:
  6. 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
  7. 1024001
  8. Allocating group tables: done
  9. Writing inode tables: done
  10. Creating journal (16384 blocks): done
  11. Writing superblocks and filesystem accounting information: done

从输出中可见,该文件系统有 1047552 个 1KB 大小的块和 262144 个 inode。

也可以通过以下方式对比两个文件系统的 inode 数量:

  1. root@debian:~# mkdir default small
  2. root@debian:~# mount /dev/sdb1 default/
  3. root@debian:~# mount /dev/sdc1 small/
  4. root@debian:~# df -iT
  5. Filesystem Type Inodes IUsed IFree IUse% Mounted on
  6. /dev/sdb1 ext4 65536 11 65525 1% /root/default
  7. /dev/sdc1 ext4 262144 11 262133 1% /root/small

从以上示例中我们可以看出,在使用 -T small 参数后,inode 数量多了近 20 万个!

注意: 这样做也是有代价的。在使用默认参数创建 ext4 文件系统时,默认数据块大小为 4KB,而使用 -T small 参数后,数据块大小为 1KB。这就意味着我们存储一个同样大小的文件,使用 -T small 参数创建的文件系统存储该数据时,占用的数据块更多,数据更分散,如果文件较大,会直接影响文件的读取速度

mke2fsmkfs.ext4)的 -T 参数指定了如何使用该文件系统,以便 mke2fs 可以为该用途选择最佳的文件系统参数,其支持的使用类型在配置文件 ``/etc/mke2fs.conf` 中定义,可以使用逗号分隔指定一个或多个使用类型

inode 不足的解决方法

当你已有的文件系统上出现 inode 不足的问题时,除了备份数据、重建分区并恢复分区数据外,还有两种临时解决方案:

1、删除文件大小为 0 的空文件,可以使用如下命令查找:

  1. find PATH -name "*" -type f -size 0c

注意: 使用 -size 参数时,不要用 -size 1k,这个表示占用空间为 1KB,而不是文件大小为 1KB,应该使用 -size 1024c 才表示文件大小为 1KB。

2、可以定期对历史小文件进行打包、归档,以减少文件数量。


作者简介:一个喜欢瞎折腾的 IT 技术人员,懂得不多,但是喜欢和有共同兴趣爱好的朋友交流、学习

(题图:MJ/9a66155a-772e-41f1-b29d-c3d4161f7853)


via: http://www.yanjun.pro/?p=128 作者:老颜随笔 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出

欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
面试题解答:如何解决“没有成果”的问题知网被罚5000万元!运营的14款APP存在违法行为,公司回应:诚恳接受,坚决服从长篇小说《如絮》第一百四十四章 越南-1966年 直升机你好,我是筚(bì)篥( lì)!Linux 版 WhatsApp | Linux 中国不会用这个工具,你的 Linux 服务器就是个摆设!如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹 | Linux 中国最佳开源电子邮件服务器 | Linux 中国Linux 如何挽救老旧电脑(和地球) | Linux 中国全球 43 亿 IPv4 地址耗尽的四年后,亚马逊:明年收费,我提前说一下!市场分析:分布式存储、软件定义存储、超融合存储(2023)每日原则:为了分清楚哪些是人手不足的问题,哪些是能力不够的问题如何在 Linux 中扩展 Veritas 文件系统(VxFS) | Linux 中国对话科大讯飞:不赚钱是 ChatGPT 的问题,不是大模型商业化的问题Linux 服务器必备的安全设置,真心建议收藏!!!AI具体可以解决哪些营销和运营的问题?如何解决?被罚 71.23 亿,蚂蚁集团:坚决服从,创造更大价值闲说书画同源.一直在期待的基于 Ubuntu 的滚动发布 Rhino Linux 终于来了 | Linux 中国[9月26日]科学历史上的今天——金·赫尔尼(Jean Amédée Hoerni)如何解决史莱姆太稀的问题无尽的夏日,无尽的音乐节!终于决定了!知名IDE JetBrains宣布重仓这款Linux桌面服务器 !如何制作一个 Linux Mint 立付 USB | Linux 中国叔叔的问题,阿姨的问题,还是谁的问题如何在 Linux 中映射 SAN LUN、磁盘和文件系统 | Linux 中国2023庭院:SOS, 活捉金龟子 (有虫虫,慎入)主如此好如何在 Linux 中查找映射到 VxVM 磁盘的 SAN LUN | Linux 中国大型语言模型训练加速专场在线研讨会上线,三位专家将主讲AI服务器、训练框架和云上高性能存储架构Linux 桌面上的 Firefox 面临着大问题 | Linux 中国如何在 Linux 中注释 PDF | Linux 中国修复 Arch Linux 中的 “Bash: man command not found” 错误 | Linux 中国亚利桑那州佩吉市不容错过的小众景点俞敏洪:中国孩子的问题,基本上都是家长的问题
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。