可以通过创建空文件来关闭系统吗?

unf*_*nfa -1 linux filesystems

我问这个纯粹是出于好奇。

是否有可能通过在系统分区上创建无数的空文件来使操作系统完全陷入困境?

理论上,它们的大小为 0 字节,但实际上它们对文件系统的元数据有所贡献,因为它们具有名称、修改时间等。

我曾经创建了大约 6500 个 1 兆字节大小的文件来测试rsync在处理大量小文件时是否比处理几个大文件慢得多。我注意到每当我访问包含所有文件的目录时,文件管理器都会冻结很长时间,试图列出所有文件。删除它们也花了很长时间。

我想知道这是否可以用来发起网络攻击,然后人们是否可以防御它。

我做了一个小测试,并用touch. 这花了 3 分 10 秒,并创建了一个据报道有 2.1 兆字节大的目录。之后我的文件管理器 Dolphin 被冻结了。

删除整个目录rm -rf只用了 1 秒钟。

我想知道这是否可以放大以使操作系统无法使用?

我正在运行带有 EXT4 文件系统的 GNU/Linux(Linux Mint),但我想知道不同的操作系统和文件系统将如何处理这个问题。

Lac*_*cek 7

实际上,没有“0 字节长文件”这样的东西。一个文件至少占用一个inode。inode 有固定的大小,更重要的是,它们的数量是有限的。如果文件系统的 inode 已满,则文件系统已满,即使它仍报告一些(甚至很多)可用空间。

但是,由于多种原因,上述行为对系统的影响很小。请注意,我们在这里讨论的是普通用户——如果一个不知名的具有 root 权限的人可以编写您的文件系统,那么无论如何您都被搞砸了。

用户无法填充文件系统(或者,更确切地说:他们不应该能够),因为每个文件系统都是以一种方式创建的,如果它已满到一定程度,它将报告自己已满每个非root用户。在创建文件系统时选择系统为 root 用户保留多少磁盘空间(对于 ext2-4,默认为 5%)。理论上,用户可以将文件系统填满 95% 并等待 root 进程(例如 syslog)吃完剩余的,但通常这也不会发生,因为用户被限制在他们自己的磁盘空间(或者,在至少,它们应该是),因此通过创建太多文件,它们可以填满/home分区,这可能会很麻烦,但根本不会对系统造成任何影响。

服务器上的文件系统通常与其他所有内容一起受到监控。可用空间快得令人怀疑地耗尽的文件系统一定会引起注意,并且几乎会立即调查该问题。

只有当某些东西试图读取所有文件时,许多文件的存在才会成为一个问题,就像几乎所有 GUI 程序和一些基于文本的工具(例如 mc)一样。简单地从 shell 进入目录通常不会很慢,因为那时不会读取文件。因此,如果有点不舒服,处理这种情况通常很简单。