Linux硬盘与文件系统(3)
今天,我们来看看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
看一下你的系统上,每个文件系统的详细信息。
《Linux基础及进阶》: 013 - Linux文件与目录管理(10)
014 - Linux文件与目录管理(11)
015 - Linux文件与目录管理(12) 016 - Linux硬盘与文件系统(1) 017 - Linux硬盘与文件系统(2)看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·