一、inode和block的联系
索引节点(Index node,Inode)在每个Linux存储设备(磁盘或硬盘)或存储设备的分区(此时的存储设备可以是硬盘、软盘、U盘,等等)中被格式化为ext系列文件系统之后,都会生成两部分内容:第一部分是Inode(默认大小为128或256字节),第二部分是Block(默认大小为1~4KB)。由于磁盘或分区一般都比较大,因此,Inode和Block都会存在很多个,并且都可以存放数据信息。
Inode存储的属性信息(即ls-l的结果),包括但不限于文件大小、属主(用户)、归属的用户组、文件权限、文件类型,“修改”时间等,还包含指向文件的实体指针等(Block的位置,即Inode节点与Block的对应关系)。
例如:
把硬盘比做一本书,书的每一页就是一个block,书的每一页的内容就是block里面的数据,同时书的每一页的大小是一样的(同一个硬盘分区的block的大小是一样的);书的目录页就是inode,记录了书的每一页知识点(文件/目录的属性)。
Inode除了要记录文件属性的信息之外,还会为每个文件进行信息索引,所以就有了Inode的数值。操作系统根据指令,即可通过Inode的值最快速地找到相对应的文件实体。
二、inode和block的特点
1.Inode的特点
总体来说,Inode具有如下一些特点。
1、ext3/ext4文件系统(CentOS 5.x/6.x默认的文件系统)下,一个非空文件至少要占用一个Inode(有且只有一个)和一个Block(可以有多个)。
2、Inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口。
3、Inode在某一个文件系统(分区)内是唯一的。
2.Block的特点
Block的特点具体如下。
1、磁盘读取数据是以Block为单位进行读取的。
2、每读取一个Block就会消耗一次磁盘I/O(input/output,磁盘读写)。
3、若文件比较大,那么一个文件可能占用多个Block。
4、若文件比较小,那么一个Block的剩余空间会被浪费,无论内容有多小。
三、查看inode和block
查看文件系统Inode总量以及剩余量的命令如下:
[root@node1 /]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 479552 56299 423253 12% /
tmpfs 127032 1 127031 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
查看磁盘的使用量相当于是查看Block的情况,示例命令如下:
[root@node1 data]# df –h #Block是存放数据的位置,数据实体
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 9.2G 1.6G 7.2G 19% /
tmpfs 937M 0 937M 0% /dev/shm
/dev/sda1 194M 34M 151M 19% /boot
/dev/sdb 99M 5.6M 89M 6% /mnt
通过“ls-i”或者“stat文件名”命令可以查看文件的Inode数值。
[root@node1 ~]# ls -i /etc/hosts
33586486 /etc/hosts
[root@node1 ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 33586486 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-09-24 22:32:25.297273504 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-26 13:32:55.213170757 +0800
Birth: -
通过dumpe2fs /dev/sda1命令可以查看分区的Inode和Block的单位大小及各种相关信息。
注意:dumpe2fs只能查看ext类型的文件系统。
[root@node1 ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 91e41148-30bd-4889-bc45-57a1b978e40a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 261888
Reserved block count: 13094
Free blocks: 253029
Free inodes: 65525
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 127
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Sep 24 15:23:05 2020
Last mount time: Thu Sep 24 15:23:23 2020
Last write time: Thu Sep 24 15:23:23 2020
Mount count: 1
Maximum mount count: -1
Last checked: Thu Sep 24 15:23:05 2020
Check interval: 0 (<none>)
Lifetime writes: 17 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: ee0db236-1990-4426-a0e6-e43c56727152
Journal backup: inode blocks
Journal features: journal_64bit
Journal size: 16M
Journal length: 4096
Journal sequence: 0x00000002
Journal start: 1
Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
Checksum 0xf711, 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, ITABLE_ZEROED]
Checksum 0x107d, unused inodes 8192
Backup superblock at 32768, Group descriptors at 32769-32769
Reserved GDT blocks at 32770-32896
Block bitmap at 130 (bg #0 + 130), Inode bitmap at 146 (bg #0 + 146)
Inode table at 673-1184 (bg #0 + 673)
32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 32897-65535
Free inodes: 8193-16384
Group 2: (Blocks 65536-98303) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x2ca4, unused inodes 8192
Block bitmap at 131 (bg #0 + 131), Inode bitmap at 147 (bg #0 + 147)
Inode table at 1185-1696 (bg #0 + 1185)
28672 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 69632-98303
Free inodes: 16385-24576
Group 3: (Blocks 98304-131071) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x48b3, unused inodes 8192
Backup superblock at 98304, Group descriptors at 98305-98305
Reserved GDT blocks at 98306-98432
Block bitmap at 132 (bg #0 + 132), Inode bitmap at 148 (bg #0 + 148)
Inode table at 1697-2208 (bg #0 + 1697)
32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 98433-131071
Free inodes: 24577-32768
Group 4: (Blocks 131072-163839) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
Checksum 0x40f3, unused inodes 8192
Block bitmap at 133 (bg #0 + 133), Inode bitmap at 149 (bg #0 + 149)
Inode table at 2209-2720 (bg #0 + 2209)
32768 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 131072-163839
Free inodes: 32769-40960
Group 5: (Blocks 163840-196607) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x69fe, unused inodes 8192
Backup superblock at 163840, Group descriptors at 163841-163841
Reserved GDT blocks at 163842-163968
Block bitmap at 134 (bg #0 + 134), Inode bitmap at 150 (bg #0 + 150)
Inode table at 2721-3232 (bg #0 + 2721)
32639 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 163969-196607
Free inodes: 40961-49152
Group 6: (Blocks 196608-229375) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
Checksum 0xdc33, unused inodes 8192
Block bitmap at 135 (bg #0 + 135), Inode bitmap at 151 (bg #0 + 151)
Inode table at 3233-3744 (bg #0 + 3233)
32768 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 196608-229375
Free inodes: 49153-57344
Group 7: (Blocks 229376-261887) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x1403, unused inodes 8192
Backup superblock at 229376, Group descriptors at 229377-229377
Reserved GDT blocks at 229378-229504
Block bitmap at 136 (bg #0 + 136), Inode bitmap at 152 (bg #0 + 152)
Inode table at 3745-4256 (bg #0 + 3745)
32383 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 229505-261887
Free inodes: 57345-65536
四、磁盘空间不足导致企业故障的案例
1、出现No space left on device问题的企业案例
把/dev/sdb1挂载到/data目录下,/dev/sdb1 =1G
mkdir /data
mount /dev/sdb1 /data
情况一:inode满了
[root@node1 data]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 50075136 60574 50014562 1% /
devtmpfs 121762 370 121392 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 691 123796 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
/dev/sdb1 65536 11 65525 1% /data
创建大量的小文件
[root@node1 data]# for i in $(echo {1..1000000});do touch ${i}.log;done
touch; cannot touch '856200.log': No space left on device
[root@node1 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 50075136 60574 50014562 1% /
devtmpfs 121762 370 121392 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 701 123786 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
/dev/sdb1 65536 65154 382 100% /data #<===inode已经满了
处理方案:
删除文件
[root@node1 data]# rm -f *.log
[root@node1 data]# ls
lost+found
[root@node1 data]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 50075136 60574 50014562 1% /
devtmpfs 121762 370 121392 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 691 123796 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
/dev/sdb1 65536 11 65525 1% /data #<===inode恢复
情况二:block满了
[root@node1 data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 96G 2.0G 94G 3% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 991M 2.6M 922M 1% /data
创建一个大的文件来占满/data空间
[root@node1 data]# dd if=/dev/zero of=/data/test.log count=1 bs=1024000000
dd: error writing ‘/data/test.log’: No space left on device
1+0 records in
0+0 records out
1017675776 bytes (1.0 GB) copied, 71.3958 s, 14.3 MB/s
[root@node1 data]# ll -h
total 971M
drwx------ 2 root root 16K Sep 24 15:23 lost+found
-rw-r--r-- 1 root root 971M Sep 24 15:38 test.log
[root@node1 data]# dd if=/dev/zero of=/data/test2.log count=1 bs=1024000000
dd: error writing ‘/data/test.log’: No space left on device
1+0 records in
0+0 records out
1017675776 bytes (1.0 GB) copied, 42.3178 s, 24.0 MB/s
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 96G 2.0G 94G 3% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 991M 975M 0 100% /data
处理方案:
删除大文件即可
2、提示空间快满,使用rm删除了很大的无用文件后,df仍然看到空间不足,为什么?如何解决
创建一个大文件/data/test.log,使用vim打开
[root@node1 data]# dd if=/dev/zero of=/data/test2.log count=1 bs=1024000000
dd: error writing ‘/data/test2.log’: No space left on device
1+0 records in
0+0 records out
1000202240 bytes (1.0 GB) copied, 42.1879 s, 23.7 MB/s
[root@node1 data]# vim test.log
另外开启一个ssh窗口删除/data/test.log
[root@node1 data]# rm -f /data/test.log
[root@node1 data]# ll
total 16
drwx------ 2 root root 16384 Sep 24 15:23 lost+found
-rw-r--r-- 1 root root 0 Sep 24 15:41 test2.log
[root@node1 data]# rm -f /data/test.log
[root@node1 data]# ls
lost+found test2.log
[root@node1 data]# rm -f test.log
[root@node1 data]# ls
lost+found
[root@node1 data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 96G 2.0G 94G 3% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 991M 975M 0 100% /data #<===/data任然是满的
原因是:
删除的大文件test.log被其它用户在使用,因此删除了test.log文件但还没有释放空间
处理方案:
#使用lsof命令来查看,可以发现/data/test.log虽然删除,但是还在被vim使用,并没有释放空间
[root@node1 data]# lsof |grep delete
vim 100146 root 3r REG 8,17 1000202240 12 /data/test.log (deleted)
#使用kill命令来杀掉该进程
[root@node1 data]# lsof |grep delete
vim 100146 root 3r REG 8,17 1000202240 12 /data/test.log (deleted)
[root@node1 data]# kill 100146
[root@node1 data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 96G 2.0G 94G 3% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 991M 22M 903M 3% /data #<===/data目录的空间已经被释放
3、No space left on device问题的处理流程图
I have a dream so I study hard!!!