Linux系统管理体系-磁盘管理体系进阶

一、磁盘管理之故障案例

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 -hdu -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) 固态硬盘 基本都是百万小时
相关推荐
苹果醋322 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰36 分钟前
[linux]docker基础
linux·运维·docker
Jason-河山1 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
饮浊酒1 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim
lihuhelihu1 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
哲讯智能科技1 小时前
SAP Business One市场价格解析
运维·sap·erp
矛取矛求2 小时前
Linux系统性能调优技巧
linux
山东布谷科技官方2 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
One_Blanks2 小时前
渗透测试-Linux基础(1)
linux·运维·安全
Perishell2 小时前
无人机避障——大疆与Airsim中的角速度信息订阅获取
linux·动态规划·无人机