混沌工程中为什么注入磁盘innode耗尽故障呢?不会像CPU和内存一样,系统中一般不会遇到磁盘innode耗尽,但期望耗尽后能恢复环境。
借用阿里混沌工程实践,磁盘innode耗尽如下:系统层-系统异常-磁盘inode耗尽。
阿里混沌工程测试模板背景
磁盘空间显示未达到100%,但不能创建新的文件,只能在已有文件中写数据,因为inode已经占满(大量的碎片文件和小文件占用着inode的使用)。
Linux系统的文件是存储在硬盘上的,而硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节(1K=1024字节,即一个扇区存储0.5K的信息)。操作系统在读取硬盘的时候,不是一个扇区一个扇区地读取的(这样效率太低),而是一次性连续读取多个扇区,一次性读取一个块,一个块一个块这样来读取的。一般连续8个扇区组成一个“块”(block),一个块是4K大小(即一次读取8个扇区),“块”(block)是文件的最小存储单位。
Linux系统中文件的文件名和文件数据是分开存储的,而文件数据又分为实际数据与元信息。元信息类似于文件属性,包括文件的创建者、创建日期、文件大小、文件权限等信息,实际信息存储在块中,而存储文件元信息的区域就叫做inode,因此一个文件必须占用一个inode, 并且至少占用一个block。
Linux系统通过inode号来识别文件,而非文件名,对于系统来说,文件名是inode号的别称,是便于用户识别文件的,文件名和inode号是一一对应的关系。
df -i /home 查看系统中innode的使用情况
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1 327680 13 327667 1% /home上脚本chaos-innode.sh(每个文件都有一个innode)
#!/bin/bash
i=1
innode_num=327668
while[ $i -le $innode_num ]
do
touch /home/file$i
let i++
done使用
1) df -i /home 查看/home挂载点的可用innode个数
2) 修改脚本中innode_num参数后执行sh chaos-innode.sh
3) df -i /home 查看/home挂载点的innode使用情况(占满)
4) df -h /home 查看磁盘空间使用情况
5) touch /home/file-robot_test_boy
touch:无法创建“ /home/file-robot_test_boy ”:设备上没有空间
6) 如果不新建文件,往已有的文件中可以写数据
7) 恢复环境rm-rf /home/file* (如果提示:命令提示参数列表过长 find . -name "file*" | xargs rm -rf "file*")
8) 查看业务写数据是否正常,新建文件是否正常。参考
https://blog.csdn.net/qq_41816540/article/details/83510872