所以我在我们的一个机器上收到了来自我们的监控系统的警告,文件系统上的空闲 inode 数量越来越少。
df -i
输出显示:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 524288 422613 101675 81% /
Run Code Online (Sandbox Code Playgroud)
如您所见,根分区使用了 81% 的 inode。
我怀疑它们都在一个目录中使用。但是我怎样才能找到它的位置呢?
从M.?Tim Jones的文章Anatomy of the Linux file system 中,我读到 Linux 从一组通用对象的角度查看所有文件系统,这些对象是superblock、inode、dentry和file。尽管该段的其余部分解释了上述内容,但我对这种解释并不满意。
有人可以向我解释这些术语吗?
上周我遇到了一个问题(对我来说是新的)。我有一个 ext4(Fedora 15)文件系统。服务器上运行的应用程序突然停止。乍一看,我找不到问题所在。
df
显示 50% 的可用空间。搜索了大约一个小时后,我看到了那个人使用的论坛帖子df -i
。该选项查找 inode 使用情况。系统没有inode,这是一个我没有意识到的简单问题。该分区只有 3.2M 的 inode。
现在,我的问题是:我可以让系统有更多的 inode 吗?应该/可以在格式化磁盘时设置吗?使用 320 万个 inode,我可以拥有多少个文件?
我想查看子目录中有多少文件,以找出所有 inode 使用情况在系统上的位置。有点像我会为了空间使用而这样做
du -sh /*
Run Code Online (Sandbox Code Playgroud)
这将为我提供根目录中使用的空间,但在这种情况下,我想要文件数,而不是大小。
假设当我ls -li
在目录中执行操作时,我得到以下信息:
12353538 -rw-r--r-- 6 me me 1650 2013-01-10 16:33 fun.txt
Run Code Online (Sandbox Code Playgroud)
如输出所示,文件fun.txt有6 个硬链接;并且 inode 编号是12353538。
如何找到文件的所有硬链接,即具有相同 inode 编号的文件?
我知道这个命令:
find /path/to/mountpoint -inum <inode number>
Run Code Online (Sandbox Code Playgroud)
但这是一个非常缓慢的搜索,我觉得必须有一种更快的方法来做到这一点。有人知道更快的方法吗?
我按照指定的顺序运行了以下命令:
$ln a b
$ls -i a b
523669 a 523669 b
$rm -f a
$ls -i b
523669 b
Run Code Online (Sandbox Code Playgroud)
我从这个测试中得出结论,该命令rm
实际上只删除了文件名(a
在这个测试中)而不是文件,因为 inode 仍然存在并且可以通过另一个文件名 ( b
)检索。
我的问题是,如果一个文件只硬链接到一个文件名,那么当rm
对文件执行时,真正的文件(即inode)是否被完全删除?如果没有,是否可以在没有文件名的情况下仅通过 inode 检索文件 inode?
众所周知,空文本文件的字节数为零:
但是,它们中的每一个都包含metadata,根据我的研究,它存储在inodes 中,并且确实使用 space。
鉴于此,我认为可以通过纯粹创建空文本文件来填充磁盘。这样对吗?如果是这样,我需要在 1GB 的磁盘中填充多少个空文本文件?
为了做一些检查,我运行了,df -i
但这显然显示了正在使用的 inode 的百分比(?),而不是它们的重量。
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 947470 556 946914 1% /dev
tmpfs 952593 805 951788 1% /run
/dev/sda2 28786688 667980 28118708 3% /
tmpfs 952593 25 952568 1% /dev/shm
tmpfs 952593 5 952588 1% /run/lock
tmpfs 952593 16 952577 1% /sys/fs/cgroup
/dev/sda1 0 0 0 - /boot/efi
tmpfs 952593 25 952568 1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708 3% /home/lucho
Run Code Online (Sandbox Code Playgroud) 我发现在我的根目录下,有一些目录具有相同的 inode 编号:
$ ls -aid */ .*/
2 home/ 2 tmp/ 2 usr/ 2 var/ 2 ./ 2 ../ 1 sys/ 1 proc/
Run Code Online (Sandbox Code Playgroud)
我只知道目录的名称保存在父目录中,而它们的数据保存在目录本身的 inode 中。
我在这里很困惑。
这就是我在跟踪路径名 /home/user1 时的想法。
假设我正在运行一个软件,然后我运行包管理器来升级软件,我注意到 Linux 没有关闭包升级的运行过程 - 它仍然运行良好。Linux 如何做到这一点?
inode ×10
files ×4
filesystems ×4
disk-usage ×2
linux ×2
hard-link ×1
ls ×1
partition ×1
recursive ×1
rm ×1
search ×1
size ×1
terminology ×1