1、磁盘的inode空间, block空间
//inode空间
也叫文件元信息空间,文件的元信息空间里面包含了i节点号就是文件索引条目的编号,固然元信息里面还包含了文件名,文件的权限,时间戳,文件内容块大小开始结束的位置),一个文件必须占据一个inode元信息空间
//block空间
硬盘最小的存储空间是扇区,一个扇区是512个字节,即为512B,可是硬盘通常须要创建分区,划分block块大小,数量,硬盘内置驱动读取文件内容是在分区里面按block块读的,按扇区来读太慢了,硬盘读写文件都是块大小块大小的读写,因此硬盘分区的好处就是提高文件读取速度还方便概括整理
//indoe、blcok联系
硬盘中不止有block空间存储文件内容,还有inode空间存储文件元信息,硬盘驱动就是先读取inode空间里面文件的元信息(记录文件内容从哪一个block编号开始到哪一个block编号结束)而后再去读取保存在block空间中的文件具体内容,indoe空间中记录的文件元信息为硬盘去找这个文件内容提供了一个索引路径,简单理解为索引空间是保存硬盘中全部文件名的一个列表,每一个文件在inode中有了这个文件名记录索引才能去block中找到文件内容,这个文件占用空间从哪一个block到那个block,文件权限,修改信息,因此咱们常说的rm -rf删除通常是删除这个文件的元信息,内容还在真真实实写在磁盘里,这就是硬盘数据恢复的原理,同时硬盘内容大小空间(block空间)能被占满,索引空间也是能被占满的,一个硬盘能记录的索引数目是有上限的,因此就有i节点号,好比硬盘inode空间最多支持记录10万个文件的元信息,我就建10万个空文件,空文件的元信息把硬盘inode空间占满,因此即便你的硬盘block空间还很充足,你也没有办法往硬盘里面写东西了。每一个文件的i节点号文件元信息在indoe空间里的编号,文件元信息的大小就记录了几个信息,因此每一个文件内容大小可能不同,可是文件元信息在indole空间里面大小都是基本同样的。
//磁盘分区的格式化
分区的格式化就是分完区我仍是个小白,格式化就是给小白定规则,按照必定文件格式给磁盘分区定义分区block块的大小,4kb仍是8kb,定义block数量的多少,因此才有mkfs.xfs,mkfs.etx4这些xfs、ext4文件系统,能够简单理解为定义分区block数量大小的文件系统,块大小是能够设置的,xfs、ext4等都有本身默认的块大小,好比对于一个分区咱们都是存放一些大文件,那么块大小越大越好,读取块数少,若是分区都是一些小文件,那么块大小小一点好,由于在分区里blocksize是最小的储存单位,块大小小会节约分区的空间,具体设置块大小取决于你对速度和空间的平衡。
注意格式化分区文件系统的时候,对indoe空间和indoe索引数量(文件元信息数量条目)也在定义规则,用df -i能够查看每一个分区的i节点数量也就是最多记录个多少个文件node
2、i节点耗尽演示
//原理:利用脚本建不少空文件或者随机函数建随机大小的文件把磁盘indoe空间充满,也就是i节点充满,致使磁盘没法正常进行写入新文件bash
空文件i节点耗尽演示
#!/bin/bash(注释一下脚本执行程序)
echo "当前系统分区状况以下:"
df -i
echo
(到这里就是把df -i的结果显示在屏幕上)
read -p "请输入要搞定的分区:" f
(read -p 从输入获取变量值 -p表明不换行)
n=$(df -i | grep "$f" | awk '{print $4}')
这个f是你输入的分区,是个变量,$表示引用这个变量,df - i | grep "$f" 假如这个f是sda3 那么在下面就筛选出sda3那一行ide
awk ‘{print $4}'表示打印出当前显示文本的第四列,那么能够看出这个n值就是一个分区的可用i节点
p=$(df -i | grep "$f" | awk '{print $6}')
这个p值就是分区的挂载目录函数
到这里就知道一个分区的挂载点p和可用i节点数n
设置条件循环语句往这个p里面一直写文件直到n中止
i=1
while [ $i -le $n ]
do
while条件循环语句设置一个变量i从1开始,每次都和n比较,小于n就do
touch $p/${RANDOM}$i
在同名挂载点p目录下创建一个名字叫${RANDOM}$i的空文件,这个文件名编号前半部分编号是用${RANDOM}随机函数随机产生的,这样让文件名具备随机性,怎么确保文件编号是一个一个按i值顺序来的,i值也依序用上,就在文件名后半部分编号引用i值,$符号表示引用变量函数
let i+1 一直按顺序+1创建
done
结论:touch建的后果都是空文件很容易被发现。find /sdb1 -size 0K -exec rm -rf {} \;能够找到分区挂载点下的空文件3d
//非空文件i节点耗尽演示code
dd if=/dev/zero of=$p/${RANDOM}$i bs=1K count=$((${RANDOM%6}))
每次都建不一样大小的文件,这样基本就把这个磁盘干费了,管理员并不知道哪些文件有用哪些没用,随机数字的选择能够算一下,保证“随机文件最大空间*
可用i节点数<可用blcok空间”才能起到i节点验证做用。
//实验演示blog
sh .a.sh :执行脚本索引