在不创建文件的情况下,我可以使用任何免费的索引节点吗?我想编写一个脚本来使用系统中所有空闲的索引节点。是否可以?
答案1
该脚本将创建与文件系统上可用 inode 一样多的文件/
:
while [ $(df --output=iavail / | tail -n1) -gt 0 ]; do
touch $((i++));
done
据我所知,如果不使用文件或目录,就无法占用索引节点,毕竟这就是它们的用途。脚本完成后索引节点将继续使用的节点。您必须删除创建的文件才能释放它们。
答案2
是的,您可以使用系统的所有索引节点。就像磁盘空间一样,它们是有限的资源,mkfs.ext4
例如,当您执行 时,它们是预先分配的。
您可以使用tune2fs -l <device>
或等工具df -i <path>
来查看分配和使用了多少个。
例子
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355850 2920950 11% /
所以这个文件系统有 2920950 个空闲 inode。如果我开始在文件系统上创建文件、目录或链接,那么我只需要做这些就可以使用它们。意识到我可以使用小文件或链接消耗所有这些 inode,并且仍然有大约所有磁盘空间可供我使用。
在没有文件的情况下使用 inode 吗?
我不确定你在这里得到什么,但我知道你可以使用 inode 的唯一方法是创建文件、目录或链接。我不熟悉任何其他消费方式。
例子
在这里您可以看到,当我创建空目录时,我消耗了 1 个 inode。
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355850 2920950 11% /
$ sudo mkdir /somedir
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355851 2920949 11% /
使用 inode 的最简单方法可能是创建目录的目录树。
$ sudo mkdir /somedir/1
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355852 2920948 11% /
$ sudo mkdir /somedir/2
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355853 2920947 11% /
$ sudo mkdir /somedir/3
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora-root 3276800 355854 2920946 11% /
ln
这是另一个示例,我通过使用同一文件创建多个链接来消耗 inode 。
$ ln -s afile ln1
$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora_greeneggs-home 26722304 1153662 25568642 5% /home
$ ln -s afile ln2
$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora_greeneggs-home 26722304 1153663 25568641 5% /home
$ ln -s afile ln3
$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/fedora_greeneggs-home 26722304 1153664 25568640 5% /home
答案3
文件是索引节点。
但是,您可以创建不链接到任何目录的文件,但仍使用 inode。例如:
zsh -c 'repeat 1000 ((repeat 1000 {exec {fd}> file; rm file}
exec sleep 1000 >&-) | cat)'
(最终)会用完 1,000,000 个 inode。这些索引节点将是自这些sleep
进程打开以来尚未回收的已删除文件。
您可以通过这种方式创建的文件数量受到可以生成的进程数量以及每个进程可以打开的最大文件数量的限制。