luc*_*cho 36 disk-usage inode file-metadata
众所周知,空文本文件的字节数为零:
但是,它们中的每一个都包含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)
sou*_*edi 40
此输出建议28786688整体 inode,之后下一次尝试在根文件系统(设备/dev/sda2)中创建文件将返回ENOSPC(“设备上没有剩余空间”)。
说明:在最初的 *nix 文件系统设计中,inode 的最大数量是在文件系统创建时设置的。为它们分配了专用空间。您可能会在用完数据空间之前用完 inode,反之亦然。最常见的默认 Linux 文件系统ext4仍然有这个限制。有关 ext4 上的 inode 大小的信息,请查看 mkfs.ext4 的联机帮助页。
Linux 支持其他文件系统而不受此限制。在 上btrfs,空间是动态分配的。“inode 结构比较小,不会包含嵌入文件数据或扩展属性数据。” (ext3/4为扩展属性在 inode 内分配一些空间)。当然,您仍然可以通过创建过多的元数据/目录条目来耗尽磁盘空间。
仔细想想,tmpfs 是另一个动态分配 inode 的例子。很难知道报告的 inode 的最大数量df -i实际上对这些文件系统意味着什么。我不会对显示的值赋予任何意义。
“XFS 也动态分配 inode。JFS 也是。reiserfs 也是如此。F2FS 也是如此。传统的 Unix 文件系统在 mkfs 时间静态分配 inode,现代 FS 也是如此,如 ext4 可以追溯到它们的遗产,但现在是这样例外,而不是规则。
“顺便说一句,XFS 确实允许您对 inode 使用的最大空间百分比设置限制,因此您可以在达到无法附加到现有文件的程度之前耗尽 inode。(FSes 的默认值为 25%低于 1TB,5% 的文件系统高达 50TB,1% 大于 1%。)无论如何,元数据(inode 和范围映射)上的空间使用情况将反映在常规中df -h” – Peter Cordes在对此答案的评论中
Ste*_*itt 26
创建空文件涉及使用以下内容:
可用 inode 的数量通常是在创建文件系统时确定的,并且无法更改(某些文件系统,例如 Btrfs 或 XFS 动态分配 inode)。这就是衡量的df -i。当 inode 用完时,即使您有可用的磁盘空间,也无法创建新文件或目录。
目录条目也占用可用磁盘空间中的空间。您可以通过查看目录的大小来了解这一点:它始终是块大小的倍数,并且当目录包含大量文件时,其大小会增加。如果磁盘空间不足,您可能无法在“已满”的目录中创建新文件或目录(即,添加新文件将涉及分配新块),即使您有可用的 inode。
所以是的,仅使用空文件可能会耗尽磁盘空间。
纯逻辑论证:
文件名由非零字节数组成。即使在设计允许的文件名的绝对量最大的一个假想的文件系统的理论最大压缩,每个文件名还是会消耗至少一位地方你的物理磁盘上。可能更多,但“每个文件 1 位”是最低要求。
计算可能适合您的盘片的位数,这是您可以在其上存储的(空或非空)文件的理论最大数量。
所以,答案是肯定的。最终,无论您使用什么存储,如果您不断添加空文件,都会耗尽空间。显然,您将比以这种方式计算的最大值更快地用完,但您会用完。