一、磁盘管理之故障案例
1、磁盘空间不足-经典版本
错误提示: no space left on device
现象: df -h
某个磁盘分区使用率达到100%,如何排查,如何处理?
模拟故障:创建1个大文件
sh
dd if=/dev/zero of=/var/log/nginx.log bs=1M count=2000
这里插一个小bug:我看这个2G的文件有点小,模拟不够真实,我就直接20G,因为是2核2G的机器,导致CPU打满不下。我想再开一个终端kiss掉找补回来,但是提示abrt-cli status timed out
,因为系统资源不足导致连接不上,差点宕机!所以创造大文件还是慎重啊
排查:df -h
和du -sh
sh
#df -h 查看哪里空间不足,哪个分区
#du -sh 详情查看目录所占空间
du -sh /*
du -sh /var/*
du -sh /var/log/*
#最终通过du -sh 排查到具体的大文件或大的目录
#找出后确认是否可以删除
温馨提示: /sys/ /proc/ 等目录是虚拟目录,不要在里面创建文件,/dev/是设备目录,也不要在里面创建
迷糊指南🌟🌟🌟🌟🌟🌟
ll
显示中,所展示的目录,目录的大小是目录本身的大小。可以进入目录用ls -ldh
验证
csharp[root@nanjing shishuwu]# ll -h 总用量 2.1M drwxr-xr-x 2 root root 4.0K 2月 6 18:47 find drwxr-xr-x 2 root root 2.1M 2月 6 18:31 inode -rwxrwxrwx 1 root root 0 1月 28 20:39 shishuwu.txt -rw-r--r-- 1 root root 0 1月 28 21:02 test.txt [root@nanjing shishuwu]# cd find/ [root@nanjing find]# ls -hld drwxr-xr-x 2 root root 4.0K 2月 6 18:47
du -sh
展示的是目录下所有文件的大小
arduino[root@nanjing shishuwu]# du -sh find/ 2.0G find/
那么你可能会追问这个
-s
是什么意思?(表示对指定目录或文件进行摘要统计,只显示总和。)
sh[root@nanjing shishuwu]# du -h find/ 2.0G find/test 4.0G find/
实验是检验整理的唯一标准!!!
2、磁盘空间不足-inode
inode存放文件属性信息,block存放文件内容.
inode在磁盘格式化后,数量是固定的
未来工作中可能出现大量小文件,导致占用inode速度快于block,inode不足了,也会导致磁盘空间不足
现象: 操作的时候,提示 no space left on device
,df -h
查看发现磁盘空间没有满,问什么原因导致的?
原因: 磁盘空间不足,不是block导致的,还有一种情况是inode数量不足.
排查:
1、df -h
查看磁盘空间没有满,df -i
查看inode使用情况.
2、找出这个分区中,大目录(目录本身大小大于1MB,du -sh目录所占空间)就行
3、找出有大量小文件的目录
解决: 确认是否可以删除或处理.
sh
[root@nanjing ~]# find / -type d -size +1M
/shishuwu/inode
[root@nanjing ~]# ls -ldh /shishuwu/inode
drwxr-xr-x 2 root root 2.1M 2月 6 18:31 /shishuwu/inode
目录的大小通常与其中包含的文件和子目录的数量有关,目录的大小实际上是它所占用的磁盘空间大小,包括存储元数据信息的空间以及指向目录中文件和子目录的指针所占用的空间。
找个目录模拟与分析touch {1..100000}
ls -l
查看的目录大小表示目录下面1层的文件名字大小
目录占的磁盘空间:du -sh
查看目录下面所有文件block大小
如果在清理战场的时候报错列表过长,可以采用管道命令
3、磁盘空间不足-未彻底删除导致故障
3.1、预备姿势-文件删除原理
1个文件被彻底删除的条件:
- 条件1:删除文件,硬连接数为0,文件相当于被删除了. 使用rm命令.
- 条件2:文件调用数为0,文件是否被使用中(命令,服务)
如何排查?
- 如何知道硬连接数是否为0,一般rm后通过ls,find查看,没有则为0.
- 如何知道进程调用数是否为0,
lsof
(list open files显示打开的文件),lsof |grep 文件名
sh
[root@nanjing ~]# lsof | grep passwd
tail 26178 root 3r REG 253,1 1335 262590 /etc/passwd
#显示系统中所有被打开的文件(被调用的文件)
[root@nanjing ~]# ps -ef | grep tail
root 26178 25730 0 22:08 pts/2 00:00:00 tail -f /etc/passwd
lsof每一列 | 说明 |
---|---|
第1列 | 命令或服务名字 |
第2列 | pid |
第3列 | 用户 |
第7列 | 文件大小(字节) |
第8列 | 文件inode号码 |
最后一列 | 文件名 |
3.2、故障模拟
现象:
- 提示磁盘空间不足,df-h提示磁盘空间满了
- 继续排查du -sh排查,统计总大小,发现没有满
- 怀疑可能是文件未彻底删除导致的,
sh
#1. 模拟故障(文件被调用中,但是没有入口)
seg 500000000 >big.1og
通过tai1 -f 调用
rm -f big.1og
#2.排查
[root@oldboy-aliyun-servers ~]# df -h
#磁盘满了
[root@oldboy-aliyun-servers ~]# du -sh /
#文件大小和上述占用不一样
#3. 发现问题
通过du -sh 分析发现实际占用的才3.9GB
#4.继续排查,需要使用1sof
lsof | grep delete
在1sof中delete标记表示这个文件没有入口(硬连接数为0),但是还有进程调用.
tai] 15974 root 3r REG 253,1 20971520000 792978 /var/1og/nginx.1og(deleted)
#5.解决问题
结束这个进程(服务),重启服务.
文件硬链接数为0了,但是进程调用数不为0导致的问题.
现象:
df -h
查看磁盘满了,实际使用du -sh
查看发现没有满.
4、总结
磁盘空间不足故障分类 | 现象 | 排查 | 解决 |
---|---|---|---|
block | df -h磁盘空间不足 | df -h,du -sh一层一层找,直到找出对应的文件或目录 | 确认后再删除 |
inode | df -h磁盘空间有剩余,创建文件,操作服务提示磁盘空间不足. | df -i,找出系统中的大目录 | 确认后再删除 |
文件未彻底删除 | df -h查看磁盘空间不足,du -sh 查看磁盘空间还有剩余 | Isof | grep delete,找出进程或服务 | 重启服务或者kill掉 |
二、文件系统
文件系统:磁盘中文件的组织方式
常见的文件系统 | 说明 |
---|---|
xfs | centos 7默认的文件系统 |
ext4 | centos 6.x ubuntu 默认的文件系统,公有云 |
ext3 | centos 5.x默认的文件系统 |
swap | 交换分区,也算是个文件系统 |
sh
#公有云常用的文件系统
[root@nanjing ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 24K 1.9G 1% /dev/shm
tmpfs tmpfs 1.9G 544K 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 ext4 50G 11G 37G 23% /
tmpfs tmpfs 370M 0 370M 0% /run/user/0
[root@nanjing ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
三、磁盘性能指标
磁盘性能指标 | 说明 |
---|---|
吞吐量(读写速度) | 一般值得是磁盘读写速度 |
iops | 每秒可以进行的io数量(io per second),每秒可以进行读写次数 |
延迟 | 进行读写的时候操作延时 |
故障间的平均时间(MTBF) | 固态硬盘 基本都是百万小时 |
- 连续读写: dd命令测试
- 随机读写:fio测试------》参考资料:测试块存储性能