查看原文
其他

Linux硬盘与文件系统(3)

Cloud研习社 Cloud研习社 2023-06-06

今天,我们来看看inode的内容。

inode,中文意思是索引节点(index node)。在每个linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘)被格式化为ext2/3/4文件系统后,一般都有两部分:第一部分是inode(很多个),第二部分是block(很多个)。

block是用来存储实际数据用的,例如:照片,视频等普通文件数据。

而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括文件大小、属主、用户组、读写权限、文件类型,修改时间,还包含执行文件实体的指针的功能(inode节点与block的对应关系)等,但是,inode不包含文件名。

inode除了记录文件的属性信息以外,还会为每个文件进行信息索引,所以就有了inode的数值,操作系统根据指令即可通过inode的数值找到对应的文件实体。文件,inode和block之间的关系见下图:

举个例子:一本书,存储设备或分区就相当于这本书的纸质主体,block相当于书中的内容,而inode就相当于这本书的目录。一本书有很多内容,一个知识点可能有多页,如果想查找某部分或某知识点的内容,我们一般先查书的目录,通过目录能更快的找到我们想要看的知识点的内容。

当我们用ls查看某个目录或文件时,如果加上-i参数,就可以看到inode节点了,例如:

[root@studyclub ~]# ls -li    #stat 命令也可以
33574979 -rw-------. 1 root root     1486 Jan 13 05:08 anaconda-ks.cfg


第一列inode值是33574979

   因为inode要存放文件的属性信息,所以inode是有大小的,ext2/3/4文件系统的inode默认大小是256字节。inode的大小在硬盘格式化之后就无法更改了,格式化前可以指定inode大小,但是一般工作环境没这个需求。查看文件系统的inode总量可以通过如下命令:

# 我们先加上一个盘,为了简单,我们就不分区了,直接格式化为ext4格式
[root@studyclub ~]# mkfs.ext4 /dev/sdc
[root@studyclub ~]# dumpe2fs /dev/sdc
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 3884426e-03b1-4559-b0f8-a8576b1a53bd
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features:     has_journal ext_attr resize_inode dir_index filetype extent
...
Inode count:              65536
...
Inode size: 256
...


Group 0: (Blocks 0-32767)
Checksum 0x299d, unused inodes 8181
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-128
Block bitmap at 129 (+129), Inode bitmap at 145 (+145)
Inode table at 161-672 (+161)
 28521 free blocks, 8181 free inodes, 2 directories, 8181 unused inodes
Free blocks: 142-144, 153-160, 4258-32767
Free inodes: 12-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT]
Checksum 0xcef1, unused inodes 8192
...
Free blocks: 32897-65535
Free inodes: 8193-16384
Group 2: (Blocks 65536-98303) [INODE_UNINIT, BLOCK_UNINIT]
Checksum 0x7b3c, unused inodes 8192
...
Free blocks: 65536-98303
Free inodes: 16385-24576
Group 3: (Blocks 98304-131071) [INODE_UNINIT]
Checksum 0x963f, unused inodes 8192
...
Free blocks: 98433-131071
Free inodes: 24577-32768
Group 4: (Blocks 131072-163839) [INODE_UNINIT]
Checksum 0x85bc, unused inodes 8192
...
Free blocks: 139264-163839
Free inodes: 32769-40960
Group 5: (Blocks 163840-196607) [INODE_UNINIT]
Checksum 0xb772, unused inodes 8192
...
Free blocks: 163969-196607
Free inodes: 40961-49152
Group 6: (Blocks 196608-229375) [INODE_UNINIT, BLOCK_UNINIT]
Checksum 0x02bf, unused inodes 8192
...
Free blocks: 196608-229375
Free inodes: 49153-57344
Group 7: (Blocks 229376-262143) [INODE_UNINIT]
Checksum 0x27a3, unused inodes 8192
...
Free blocks: 229505-262143
Free inodes: 57345-65536


从上面的结果我们可以看到,/dev/sdc上总共有65536个inode,每个inode占用256B的空间。另外,上面输出的Group0-7这8个group就是我们上一篇文章提到的Block Group,这里有8个。每个group里inode的使用情况,inode的分配情况,block的分配情况都有详细描述。例如上面的group7,inode的起始号和结束号分别是57345和65536。

下面我们来看看inode怎么查看:

 查看挂载点的inode:

[root@studyclub ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 9388032 34724 9353308 1% /
devtmpfs 121774   386  121388    1% /dev
tmpfs 124486     1  124485    1% /dev/shm
tmpfs 124486   736  123750    1% /run
tmpfs 124486    16  124470    1% /sys/fs/cgroup
/dev/sda1 97280   326   96954    1% /boot
tmpfs 124486     1  124485    1% /run/user/0

有关inode小结:

1)硬盘分区格式化ext4文件系统后会自动生成一定数量的inode和block

2)inode是索引节点,作用是存储文件的属性信息以及作为文件的索引(指向文件的实体)

3)inode是一块存储空间,centos6、7默认inode大小是256字节

4)inode是一串数字,不同的文件对应的inode在文件系统里是唯一的

5)inode相同的文件,互为硬链接文件(关于硬链接的知识,我们在后面的推文中安排)。

6)一个文件被创建后至少要占用一个inode和一个block

7)block的大小一般有1k 2k  4k几种,其中引导分区为1k,其他普通分区为4k。

8)inode大小和总量查看:

   centos7默认是xfs文件系统,所以我们可用xfs_info命令查看:

[root@studyclub ~]# xfs_info /dev/sda3
meta-data=/dev/sda3 isize=512    agcount=4, agsize=1173504 blks
         = sectsz=512   attr=2, projid32bit=1
         = crc=1        finobt=0 spinodes=0
data = bsize=4096   blocks=4694016, imaxpct=25
         = sunit=0      swidth=0 blks
naming =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal bsize=4096   blocks=2560, version=2
         = sectsz=512   sunit=0 blks, lazy-count=1
realtime =none extsz=4096   blocks=0, rtextents=0

ext2/3/4文件系统的信息用dumpe2fs查看。

9)查看inode总量和大小:df -i


课后总结、实践:

  • 总结查看文件系统信息的两个命令:dumpe2fs、xfs_info

  • 看一下你的系统上,每个文件系统的详细信息。



新手应知:    Rocky Linux
《Linux基础及进阶》:    013 - Linux文件与目录管理(10)

    014 - Linux文件与目录管理(11)

    015 - Linux文件与目录管理(12)    016 - Linux硬盘与文件系统(1)    017 - Linux硬盘与文件系统(2)


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存