Linux 中的 inode 是什么?

[ad_1]

您可能已经知道,在 Linux 中一切都被视为文件。 这包括硬件设备、进程、目录、常规文件、套接字、链接等。 通常,文件系统分为数据块和inode。 话虽如此,您可以将 inode 视为 Linux 文件系统的基础。 为了更清楚地解释它,Inode 是一种数据结构,用于存储有关计算机系统上每个文件的元数据。

在我们与客户的日常互动中,我们经常发现许多客户并不完全了解磁盘空间操作和利用的所有复杂性。 这通常意味着提供有关硬盘驱动器上有多少可用磁盘空间及其使用方式的深入信息。

在本文中,我们将深入研究什么是 inode,它包含什么,如何检查可用的 inode,最后,如何清理 inode。 让我们开始吧!

inode 包含什么?

inode 描述了一个文件系统对象,如目录或文件。 inode 存储有关该对象的属性,包括磁盘上的块位置、元数据、所有权和权限数据。 由于每个文件在创建后都会自动分配一个 inode,因此每个 inode 都由唯一编号标识。 这个数字被称为“索引号”。 以下信息或元数据存储在每个 inode 中。

  • 文件大小
  • 文件的所有者
  • 上次访问或修改文件的日期/时间
  • 文件的权限和访问控制
  • 文件在磁盘上的物理位置
  • 文件类型
  • 与文件关联的链接数

如您所见,除了名称和实际数据之外的所有内容都位于单个 inode 中。 我们将拥有的 inode 总数取决于硬盘驱动器的格式化方式。

现在我们知道 Linux 中的 inode 是在创建时分配给每个文件并存储元数据的数据结构。 让我们看看如何检查您的 inode 并通过命令行界面清除它们。

在 Linux 中检查和清除 inode

首先,让我们使用一个名为 stat 的简单命令检查我们的 home/ 目录上的信息。

[[email protected] /]# stat home/
  File: ‘home/’
  Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 131074 Links: 8
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-11-15 20:07:11.044052460 +0200
Modify: 2020-10-11 15:44:39.925434606 +0300
Change: 2020-10-11 15:44:39.925434606 +0300
 Birth: -
[[email protected] /]# 

在上面的示例中,我们在主目录中使用了 stat 命令。 在这里,您可以看到我们讨论过的所有信息。 它包含文件类型、索引或 inode 编号、上次访问的时间戳、上次修改日期、上次更改日期以及权限设置和所有权。 访问、修改和更改信息定义为:

  • 访问 – 上次读取文件的时间
  • Modify – 上次修改文件内容的时间
  • 更改 – 文件的上一次元数据(权限)被更改

现在让我们检查一下硬盘上的 inode 总数。 这可以使用简单的命令来完成。

[[email protected] /]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 482591 320 482271 1% /dev
tmpfs 485043 1 485042 1% /dev/shm
tmpfs 485043 594 484449 1% /run
tmpfs 485043 16 485027 1% /sys/fs/cgroup
/dev/sda1 2621440 248965 2372475 10% /
/dev/loop0 103584 422 103162 1% /tmp
tmpfs 485043 1 485042 1% /run/user/0
[[email protected] /]# 

正如您在上面看到的,命令 df -i 将显示您的分区有多少个 inode,使用了多少个,以及它们的安装位置。

为什么有这么多的inode?

根据我们的经验,inode 最重要的用途是在旧电子邮件或未正确删除或阻止的会话文件中。 我们将展示如何获得使用大多数 inode 的目录的细分以及如何检查特定目录中的 inode 使用情况。

例如,如果我们想列出 /var 目录中使用最多 inode 的五个目录,我们将使用这样的命令。

[[email protected] var]# du --inode | sort -rh | head -5
13534 .
7612 ./lib
6414 ./lib/yum
5721 ./lib/yum/yumdb
4599 ./cpanel

du –inode 命令将列出 inode 的使用情况。 然后我们将该输出通过管道传输到 sort -rh 命令,该命令会将我们的目录从使用最多 inode 的目录排序到使用最少 inode 的目录。 然后我们将该信息通过管道传输到 head -5 命令将仅显示前五个目录。 如果我们想列出 5 个以上,我们可以使用另一个数字,例如 -10。 这将为我们提供具有最多 inode 的前十个目录。

注意:du 命令总计文件系统中存在的文件空间,而 df 显示文件系统中可用的块数。

在此之后,我们可以进入使用最多 inode 的目录并重新运行相同的命令,直到我们到达我们需要的目录。 例如,假设我们有大量已有数年历史的电子邮件。 我们可以在我们的邮件目录中运行这个命令。

[[email protected] mail]# du --inode | sort -rh | head -10
22 .
4 ./.Trash
4 ./.Sent
4 ./.Junk
4 ./.Drafts
1 ./.Trash/tmp
1 ./.Trash/new
1 ./.Trash/cur
1 ./tmp

我们应该指出,我们正在一个新的服务器上运行这个命令,那里几乎没有电子邮件。 在这里,我们看到 .Trash 目录中使用了四个 inode。如果我们想释放这些 inode,我们可以 cd 进入 .Trash 目录并使用 rm 命令删除这些文件。 许多有用的 bash one-liners 可用于查找和删除任何占用 inode 的文件。 一种 bash one-liner 是由几个部分组成的单个命令,这些部分以更易于管理的方式分离、排序或操纵我们的发现。

定位 inode 编号

如果我们只想查看特定目录/文件分配给它的 inode 或索引号,我们可以使用带有 -i 标志的 ls 命令。 例如:

[[email protected]]# ls -i mail
136660 caloriescounter.tk 137451 cur 137687 mailbox_format.cpanel 137494 new 137589 tmp
 or using the -il flags to get a complete listing.
[[email protected]]# ls -il
total 692
           12 lrwxrwxrwx 1 root root 7 Apr 23 2020 bin -> usr/bin
         8193 drwxr-xr-x 2 root root 4096 Apr 23 2020 boot
         1025 drwxr-xr-x 7 root root 2760 Nov 17 14:36 dev
        16385 drwxr-xr-x 129 root root 12288 Nov 17 14:36 etc
        16386 drwxr-xr-x 3 root root 4096 Sep 17 13:49 home
         1559 lrwxrwxrwx 1 root root 7 Apr 23 2020 lib -> usr/lib
         1560 lrwxrwxrwx 1 root root 9 Apr 23 2020 lib32 -> usr/lib32
         1561 lrwxrwxrwx 1 root root 9 Apr 23 2020 lib64 -> usr/lib64
           11 drwx------ 2 root root 16384 Apr 10 2019 lost+found
        24577 drwxr-xr-x 2 root root 4096 Apr 23 2020 media
        24578 drwxr-xr-x 7 root root 4096 Oct 9 17:29 mnt
        32769 drwxr-xr-x 3 root root 4096 Oct 28 12:25 opt
            1 dr-xr-xr-x 116 root root 0 Nov 17 14:36 proc
        40961 drwx------ 7 root root 4096 Oct 28 12:25 root
         2065 drwxr-xr-x 8 root root 180 Nov 17 14:36 run
         1565 lrwxrwxrwx 1 root root 8 Apr 23 2020 sbin -> usr/sbin
        49153 drwxr-xr-x 2 root root 4096 Apr 10 2020 snap
        49154 drwxr-xr-x 2 root root 4096 Apr 23 2020 srv
            1 dr-xr-xr-x 11 root root 0 Nov 17 14:36 sys
        57346 drwxrwxrwt 4 root root 4096 Nov 18 13:36 tmp
        65537 drwxr-xr-x 14 root root 4096 Apr 23 2020 usr
        40963 drwxr-xr-x 13 root root 4096 Apr 23 2020 var
[[email protected]]# 

在这里,我们在邮件目录中使用了 ls -i 命令,正如您所看到的,我们为邮件目录中的每个目录提供了一个索引号。

删除索引节点

我们还可以使用其 inode 号删除文件,这将释放分配给该文件的 inode 号。 这是完成此操作的命令。

[[email protected]]# find / -inum 137589 -exec -rm -i {};

find 命令告诉系统定位一个对象(此命令中的 / 代表文件夹根目录中的任何内容)。 -inum 标志专门按 inode/索引号进行搜索。 它后面的数字只是我们使用 ls -i 命令找到的 inode 编号。 -exec 和 -rm -i 命令将开始文件删除过程。 如果我们确定要删除它,它也会首先提示我们。 我们可以使用简单的 ‘y’ 表示是或 ‘n’ 表示否。 在上面的示例中,我们从该帐户的邮件目录中删除了整个 tmp 目录。

如果我们的系统由于 inode 的数量而出错,我们可以使用 bash 像这样的命令来解决这个问题。

[[email protected]]# find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

或者

[[email protected]]# find . -maxdepth 1 -type d | grep -v '^.$'  | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n

结论

总结一下。 Linux 中的 inode 是一种数据结构,用于存储有关单个文件和文件夹的元数据。 Linux 中的每个文件夹和文件在创建时都有一个分配给它的 inode。 我们可以释放硬盘上的空间,但这并不意味着我们还没有用完所有的 inode。 我们学习了如何检查使用了多少 inode,以及如何获取特定文件的确切 inode 编号。 这将使定位和删除 inode 更加容易。 我们希望这些信息对您今后的发展有所帮助!

加入我们!

我们以成为 Hosting™ 中最有帮助的人而自豪!

我们的技术支持人员一年 365 天、每周 7 天、每天 24 小时随时为您提供与本文相关的任何问题的帮助。

我们可以通过我们的票务系统 [email protected]、电话(800-580-4986)或通过 在线聊天 或任何你喜欢的方法。 我们为您努力工作,以便您可以放松。

[ad_2]

Related Posts