如何释放Linux inode?

1. 写在前面

Linux inode 是一种文件数据结构,用于存储除文件名和数据之外的任何 Linux 文件的信息(详细介绍可看《什么是 Linux inode?用途是什么?》)。但 inode 数量有限,并在创建分区时设置,意味着即使设备上还有存储空间,inode 用完后系统将无法创建任何新文件。

本文,将介绍如何防止出现这种情况,以及在出现这种情况时如何处理。

2. 为什么要限制 inode?

每个 inode 包含文件的关键信息,如文件大小、访问权限以及所存储磁盘块的位置等。这些数据是系统使用文件的必要条件。在 ext(ext、ext2、ext3、ext4)文件系统中,inode 保存在一个固定大小的表中。该表的大小在创建分区时就已决定,以后无法更改。

其他文件系统(例如 macOS 上使用的 APFS)不使用固定大小的表,而是使用 B-trees 等其他数据结构。因此,inode 数量要灵活得多。

3. 设置 inode 限制

inode 限制是在创建分区时设置的。默认系统提供合理的配置参数,通常不需要担心这个问题。不过,如果我们知道系统将存储大量的小文件,我们可以覆盖这些默认值,设置合理的 inode 数量。

例如,预计系统中的文件平均大小只有 1 kB。可以创建一个 ext4 分区,每 1000 字节为一个 inode:

$ sudo mkfs.ext4 -i 1000 /dev/sdev

或者,也可以选择其他文件系统,比如 Btrfs,它就不会有限制 inode 的问题。

4. 检查并释放 inode

可以使用 df 命令检查可用的 inode:

root@jpzhang-dev:~/linux/dir1# df -i
------------------------------------------------------------------------------------
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 2043274 438 2042836 1% /dev
tmpfs 2047671 1008 2046663 1% /run
/dev/vda1 12902400 1437038 11465362 12% /
tmpfs 2047671 1 2047670 1% /dev/shm

“IUsed” 列显示已使用的 inode 数量,”IFree” 列显示空闲 inode 数量,”IUse%” 列显示已使用 inode 的百分比。

遗憾的是,除了删除我们不需要的文件外,目前没有其他办法释放 inode。问题是,我们有时可能不知道该去哪里找耗尽 inode 限制的文件。解决这个问题的方法是根据目录中文件的数量进行排序。通过这种方法,可以快速定位找到有问题的目录。

如,列出所有文件:

sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
...
1585 Documents
6979 Downloads
7168 Pictures
113659 .nvm
669666 Library
980996 Projects

可以看到,”Projects” 目录中存储的文件数量最多。此时,可以通过判断文件重要性采取一些措施,如:删除文件或将该目录移动到其他空闲 inode 的存储驱动器。


常用清理命令:

(1)、查看并删除临时文件:

示例命令:

ls -lt /tmp | wc -l
find /tmp -type f -exec rm {} ;

(2)、删除0字节的文件,这些文件也会占用inode:

示例命令:

find /home -type f -size 0 -exec rm {} ;

(3)、或者将目录文档归档,然后删除文件:

示例命令:

tar czvf /linux/backup.tar.gz /home/test
rm /home/test

感谢您花时间阅读文章!

收藏本站不迷路!


原文始发于微信公众号(滑翔的纸飞机):如何释放Linux inode?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260799.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!