实验一:inode耗尽导致磁盘故障


实验步骤

  1. 新建一个约32MB大小的EXT4文件系统

    • 分区
    • 格式化
    • 挂载
    • 查看inode信息
  2. 编写一个测试程序,耗尽所有可用的inode
  3. 测试创建新文件
  4. 解决inode耗尽故障

实验过程

1.新建一个32M的EXT4的文件系统

分区

[root@Daring jason]# fdisk /dev/sdeWARNING: DOS-compatible mode is deprecated. It's strongly recommended toswitch off the mode (command 'c') and change display units tosectors (command 'u').Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Selected partition 4
First cylinder (787-2610, default 787):
Using default value 787
Last cylinder, +cylinders or +size{K,M,G} (787-2610, default 2610): +32MCommand (m for help): pDisk /dev/sde: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe4b1d138Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1         262     2104483+  fd  Linux raid autodetect
/dev/sde2             263         524     2104515   fd  Linux raid autodetect
/dev/sde3             525         786     2104515   fd  Linux raid autodetect
/dev/sde4             787         791       40162+  83  LinuxCommand (m for help): w
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.
[root@Daring jason]# partprobe /dev/sde  //探测新分的分区
sde   sde1  sde2  sde3  sde4             //探测到新的分区
[root@Daring jason]# partprobe /dev/sde

格式化成ext4

[root@Daring jason]# mkfs.ext4 /dev/sde4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
10040 inodes, 40160 blocks
2008 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=41156608
5 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks: 8193, 24577Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@Daring jason]#

挂载

[root@Daring /]# mount /dev/sde4 /testinode/
[root@Daring /]# df -hT /dev/sde4            //查看挂载和容量信息
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sde4      ext4   38M  4.5M   32M  13% /testinode    //挂载成功,容量为32M
[root@Daring /]#

查看inode信息

[root@Daring Desktop]# df -i /dev/sde4
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sde4       10040    12 10028    1% /testinode

这里可以看出来

总数量 已经使用的 空闲的数量
10040 12 10028

2.写批量创建文件的脚本(耗尽inode的脚本)

[root@Daring testinode]# vi create.sh #!/bin/bash
for n in $(seq 1 10040)
do
touch a_$n
done~
... //省略中间的“~”
~
:wq

这段代码的大致含义,就是从1-10040这个范围内从1开始,每个数字都会执行touch的命令,而文件的名称则是a_数字

再次查看inode信息

[root@Daring testinode]# df -i /testinode/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sde4       10040    12 10028    1% /testinode
[root@Daring testinode]#

此次对照失败是在创建create.sh之前没有查看/dev/sde4的inode信息

一个文件占用一个inode测试

[root@Daring testinode]# vi test
[root@Daring testinode]# cat test
123123
[root@Daring testinode]# df -i /testinode/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sde4       10040    13 10027    1% /testinode
[root@Daring testinode]#

这里可以看出来已经使用的inode是13,说明test这个文件占用了一个inode


3.测试创建新文件

执行create.sh来实现批量创建

[root@Daring testinode]# sh create.sh
touch: cannot touch `a_10028': No space left on device
touch: cannot touch `a_10029': No space left on device
touch: cannot touch `a_10030': No space left on device
touch: cannot touch `a_10031': No space left on device
touch: cannot touch `a_10032': No space left on device
touch: cannot touch `a_10033': No space left on device
touch: cannot touch `a_10034': No space left on device
touch: cannot touch `a_10035': No space left on device
touch: cannot touch `a_10036': No space left on device
touch: cannot touch `a_10037': No space left on device
touch: cannot touch `a_10038': No space left on device
touch: cannot touch `a_10039': No space left on device
touch: cannot touch `a_10040': No space left on device
[root@Daring testinode]#

因为空闲的inode只有10027个,所以在创建10028的时候inode实际上已经被耗尽了,但是因为for循环依旧在执行,所以后面的都会继续输出错误信息

[root@Daring testinode]# df -i /dev/sde4
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sde4       10040 10040     0  100% /testinode
[root@Daring testinode]# df -h /dev/sde4
Filesystem      Size  Used Avail Use% Mounted on
/dev/sde4        38M  4.7M   32M  14% /testinode
[root@Daring testinode]#
inode总数量 inode已经使用的 inode空闲的数量
10040 10040 0
磁盘总容量 磁盘已经使用已经使用空间 磁盘已用所占百分比
38M 4.7M 14%

从这里可以看出来inode是耗尽了,但是磁盘空间还有大量的剩余


4.解决inode耗尽故障

修改create.sh来批量删除文件

[root@Daring testinode]# vi create.sh #!/bin/bash
for n in $(seq 1 10000)
do
rm -rf a_$n
done~
...//中间空行省略    ~
~
~
:wq

执行后,并查看

[root@Daring testinode]# sh create.sh
[root@Daring testinode]# ls -lh
total 14K
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10001
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10002
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10003
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10004
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10005
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10006
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10007
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10008
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10009
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10010
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10011
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10012
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10013
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10014
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10015
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10016
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10017
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10018
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10019
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10020
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10021
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10022
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10023
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10024
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10025
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10026
-rw-r--r-- 1 root root   0 Jun 29 09:27 a_10027
-rw-r--r-- 1 root root  57 Jun 29 09:44 create.sh
drwx------ 2 root root 12K Jun 29 08:42 lost+found
-rw-r--r-- 1 root root   7 Jun 29 09:22 test
[root@Daring testinode]#

从上面可以看出来,a_1~a_10000的文件都已经被删除

再次查看inode信息

[root@Daring testinode]# df -i /dev/sde4
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sde4       10040    40 10000    1% /testinode
[root@Daring testinode]#
inode总数量 inode已经使用的 inode空闲的数量
10040 40 10000

解决inode耗尽故障


实验一:inode耗尽导致磁盘故障相关推荐

  1. Linux磁盘故障和文件系统修复(救援模式Centos7、Centos8)

    文章目录 问题一:文件系统分区变成只读文件系统,无法写入新文件.新数据. 问题二:在Linux运行过程中,有时会因为误操作导致磁盘故障,系统无法启动. Linux救援模式 问题一:文件系统分区变成只读 ...

  2. 一次SSD磁盘寿命耗尽导致的TiDB集群写入变慢问题处理

    作者: mydb 原文来源: https://tidb.net/blog/ada59a4c 1.背景 最近处理了一起由于 SSD 磁盘寿命耗尽导致的 TiDB 集群写入变慢的问题,集群部署组件如下表所 ...

  3. inode 耗尽故障处理办法

    故障描述:由于每个文件都必须要有一个inode ,因此有可能发生inode 已经用光,但是硬盘还是未存满的情况.这时,就无法在硬盘上创建新文件. 造成故障原因:小字节缓存文件过多,虽然占用的 bloc ...

  4. 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

    4.10/4.11/4.12 lvm讲解 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化.挂载-->扩容. 磁盘分区 注: 创建分区时 ...

  5. 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

    2019独角兽企业重金招聘Python工程师标准>>> 准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate ...

  6. 【kafka】一次磁盘故障后消费者无法消费

    1.概述 转载:Kafka 运维纪实 – 一次磁盘故障后消费者无法消费 Kafka 自从某个版本加入 isr 等机制后真是越来越复杂了,再也不是原来那个单纯的 The log 了,碰上网络有个什么风吹 ...

  7. 机器学习实践(一):用KNN进行磁盘故障预测

    问题:磁盘故障预测(Disk Failure Prediction) (一)背景和说明   在大规模IDCS和云计算环境中,各种磁盘故障是罕见但昂贵的事情.因此,为了节约成本,HDD供应商非常积极的去 ...

  8. lvm讲解和磁盘故障案例

    一:lvm讲解 1.准备磁盘分区 fdisk /deb/sdb n创建三个新分区,分别为1G t改变分区类型为8e 2.pvcreate /dev/sdb1 yum install -y lvm [r ...

  9. oracle 10g磁盘管理,Oracle 10g UNDO表空间过大导致磁盘空间不足的解决

    在Oracle 10g数据库的应用中,出现了UNDO表空间过大导致磁盘空间不足而崩溃的现象(ORA-30036: unable to extend segment by 8 in undo table ...

最新文章

  1. 机器学习面试的12个基础问题,强烈推荐!
  2. 读书笔记 effective c++ Item 50 了解何时替换new和delete 是有意义的
  3. 神经网络与机器学习 笔记—时序模式、非线性滤波
  4. 新手建站注意点,你有注意到没?
  5. hibernate防止sql语句注入
  6. C# foreach遇到async和await
  7. Lambda表达式的前世今生
  8. JAVA读取EMF文件并转化为PNG,JPG,GIF格式
  9. 《Haskell函数式编程入门》—— 第1章,第1.6节本章小结
  10. dreamweaver网页设计作业制作 学生个人网页单页 WEB静态网页作业模板 大学生个人主页博客网页代码 dw个人网页作业成品
  11. React组件Input输入拼音时触发搜索的解决方案
  12. 十大排序算法之二路归并排序(难点为对于递归的理解)
  13. 学习总结:即时通讯项目里面的语音处理-文件模式录音
  14. 通过iis发布网站、并添加ssl证书
  15. matlab plotyy 属性如何调整,(完整word版)matlab中plotyy函数加入双y轴说明的方法
  16. windows PC版微信双开
  17. 软件设计师-备考知识点总结
  18. 苹果三代耳机_链接2020.6.13其他团无线蓝牙耳机
  19. ubuntu找不到无线网络
  20. 利用有限元数值模拟技术辅助静电场学习

热门文章

  1. 联想拯救者R720加装固态硬盘过程中遇到的小问题
  2. Faster-RCN训练和入门使用--Pytorch版本
  3. 试题 基础练习 字母图形
  4. 有哪些网站,一旦知道,你就离不开了?
  5. 批量去除PDF的水印(完全免费)
  6. 查看局域网其他电脑的计算机名和IP
  7. Linux的基本知识和基础操作
  8. SPA、MPA 的优缺点
  9. Layui导航栏下拉菜单不显示问题
  10. 快速上手爬虫,有哪些方便实用的工具和服务?