磁盘管理-经典故障案例
1、磁盘空间空间不足
1.1 错误提示
no space left on device
1.2 模拟创建大文件
dd if=/dev/zero of=/var/log/nginx/nginx.log bs=1M count=2000 #模拟创建2G的大文件,时间充裕可创建更大一点的文件
1.3 排查流程
df -h #查看哪个目录空间使用率接近100%
du -sh /var/* #查看var目录下哪个目录占用的空间最大
du -sh /var/log/*
du -sh /var/log/nginx/* #排查到更大的目录或者大文件
#找到大文件后确定这个文件是什么进程或软件产生的,是否可以删除
温馨提示: /sys/ /proc/ 等目录是虚拟目录,不要在里面创建文件,/dev/是设备目录,也不要在里面创建
2、磁盘inode空间不足
2.1 错误提示
操作的时候,提示 no space left on device ,df -h查看发现磁盘空间没有满
磁盘空间不足,不是block导致的,还有一种情况是inode数量不足
inode存放文件属性信息,block存放文件内容
inode在磁盘格式化后,数量是固定的
2.2 模拟inode空间不足
#创建指定大小文件(1g用于称为磁盘分区)
dd if=/dev/zero of=/tmp/1g-new bs=1M count=1000
#磁盘格式化
mkfs.xfs /tmp/1g-new
#创建挂载点
mkdir -p /opt/inode-error
#进行挂载
mount /tmp/1g-new /opt/inode-error/
#创建测试文件
cd /opt/inode-error/
echo test{01..511111}.txt|xargs touch
2.3 排查流程
df -i #查看哪个目录的inode空间快满了
ll -h /opt/
drwxr-xr-x. 2 root root `16M` Jan 4 15:54 inode-error #ll -h查看目录下 16M代表的是目录下文件的名字所占用的空间,小文件越多,这个值越高,所以平常找大于1M的即可
如下
方式一:find /opt/ -type d -size +1M #一般目录不会占用这么大的空间
方式二:find /opt/inode-error/ -type f |xargs dirname |sort |uniq -c #dirname是取上级目录的命令,可以通过排序查看当前目录有多少文件
方式三(常用):for i in /opt/*; do echo $i; find $i | wc -l; done #可以直观的观察到这个目录下的所有子目录有多少个小文件,然后确定可不可删除即可
3、磁盘空间不足-未彻底删除导致故障
3.1 文件被彻底删除的条件
- 条件1:删除文件,硬连接数为0,文件相当于被删除了,使用rm命令
- 条件2:文件调用数为0,文件是否被使用中(命令,服务)
- 如何知道硬连接数是否为0,一般rm后通过ls,find查看,没有则为0
- 如何知道进程调用数是否为0,lsof(list open files显示打开的文件),lsof |grep 文件名
3.2 lsof命令
lsof +D /tmp/ #显示所有在/tmp目录下打开的文件进程
lsof -p 1328 #列出进程id为1328的进程所打开的文件
lsof |grep sshd
sshd 1519 root txt REG 253,0 852856 622296 /usr/sbin/sshd
每列 | 说明 |
---|---|
第1列 | 命令或服务名字 |
第2列 | pid |
第3列 | 用户 |
第7列 | 文件大小(字节) |
第8列 | 文件inode号码 |
最后1列 | 文件名 |
3.3 模拟故障
- 现象:提示磁盘空间不足,df -h提示磁盘空间满了,继续排查du -sh排查,统计总大小,发现没有满,怀疑可能是文件未彻底删除导致的
- 模拟过程
#1、模拟故障(文件被调用中,但是没有入口)
seq 500000000 >big.log
通过tail -f 调用
#查看空间
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root 27G 20G 7.2G 74% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/loop0 997M 304M 694M 31% /opt/inode-error
#du -sh / #发现/实际才占用9G的空间
#lsof |grep delete 在lsof中delete标记表示这个文件没有入口(硬连接数为0),但是还有进程调用
#解决办法:结束这个进程或服务