当前位置:首页>Linux>Linux磁盘管理运维经验分享

Linux磁盘管理运维经验分享

  • 2026-10-11 06:16:57
Linux磁盘管理运维经验分享

凌晨3点17分,监控告警:根分区使用率98%。

SSH连上服务器,df一敲,/dev/mapper/centos-root只剩1.2G。业务还在跑,日志还在写,你必须在不中断服务的前提下把容量扩上去。

Linux的磁盘管理其实很简单。静下心学习一下,以后十分钟搞定继续睡;不会的人,通宵到天亮还可能丢数据。

这篇文章以一台真实CentOS 7.9服务器为例,把磁盘巡检、故障排查和LVM扩容的实战操作讲透。所有命令输出均为真实环境截取。

一、磁盘监控与故障排查

日常巡检,三条命令看清全局。

df -h —— 看空间使用率。超过80%关注,超过90%必须处理。

在服务器上执行,输出如下:

[root@ct100 ~]# df -h Filesystem               Size  Used Avail Use% Mounted on devtmpfs                 1.9G     0  1.9G   0% /dev tmpfs                    1.9G     0  1.9G   0% /dev/shm tmpfs                    1.9G   11M  1.9G   1% /run tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup /dev/mapper/centos-root   36G  3.0G   33G   9% / /dev/vda1               1014M  216M  799M  22% /boot /dev/mapper/centos-home   18G   33M   18G   1% /home tmpfs                    376M     0  376M   0% /run/user/0

重点关注Use%列。这台服务器根分区9%,很健康。如果看到90%+,就该出手了。注意/dev/mapper/centos-root——看到mapper就说明用了LVM,后面扩容会用到这个信息。

iostat -x 1 —— 看磁盘I/O性能。%util持续接近100%,磁盘已是瓶颈。

[root@ct100 ~]# iostat -x 1 2 Linux 3.10.0-1160.el7.x86_64 (ct100) 	07/03/2026 	_x86_64_	(2 CPU)  avg-cpu:  %user   %nice %system %iowait  %steal   %idle            0.73    0.00    1.11    0.01    0.03   98.12  Device:  rrqm/s  wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await  svctm  %util vda        0.00    0.23  2.00  1.29  84.78  14.11    60.03     0.00    0.72    0.48    1.09   0.46   0.15 vdb        0.00    0.00  0.03  0.00   0.91   0.00    72.34     0.00    0.17    0.17    0.00   0.34   0.00 dm-0       0.00    0.00  1.89  1.41  78.30  14.63    56.18     0.00    1.10    0.49    1.93   0.17   0.06 dm-1       0.00    0.00  0.02  0.00   0.39   0.00    50.09     0.00    0.25    0.25    0.00   0.17   0.00 dm-2       0.00    0.00  0.03  0.00   0.46   0.37    53.61     0.00    0.24    0.19    0.57   0.15   0.00

看最后一列%util。vda只有0.15%,非常空闲。如果这个值持续90%以上,说明磁盘I/O已经打满,要么优化应用,要么换更快的盘(SSD)。await列看延迟,超过10ms就要关注。

注意:iostat需要安装sysstat包(yum install -y sysstat)。很多最小化安装的系统默认没有,巡检时先确认。

smartctl -a /dev/sda —— SMART信息提前发现磁盘硬件上的坏道和温度异常(这也是服务器卡慢的主要常见原因之一)。

但要注意:虚拟化环境下smartctl可能无法读取。比如这台服务器是KVM虚拟机,磁盘是virtio设备:

[root@ct100 ~]# smartctl -a /dev/vda smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.el7.x86_64] Copyright (C) 2002-18, Bruce Allen, Christian Franke  /dev/vda: Unable to detect device type Please specify device type with the -d option.

虚拟磁盘看不到SMART信息,这是正常的。SMART主要用于物理机巡检。如果你的服务器是物理机,重点看这几个指标:Reallocated_Sector_Ct(重映射扇区,非0说明有坏道)、Current_Pending_Sector(待处理扇区)、Temperature_Celsius(温度)。任何一个异常都要提前换盘。

再看磁盘整体结构:lsblk。

lsblk是磁盘巡检的补充命令,一眼看清分区和LVM结构:

[root@ct100 ~]# lsblk NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT sr0              11:0    1 1024M  0 rom vda             252:0    0   80G  0 disk ├─vda1          252:1    0    1G  0 part /boot ├─vda2          252:2    0   59G  0 part │ ├─centos-root 253:0    0 55.6G  0 lvm  / │ ├─centos-swap 253:1    0    6G  0 lvm  [SWAP] │ └─centos-home 253:2    0 17.4G  0 lvm  /home └─vda3          252:3    0   20G  0 part   └─centos-root 253:0    0 55.6G  0 lvm  / vdb             252:16   0    2G  0 disk └─vdb1          252:17   0    2G  0 part

这棵树很清晰:vda是系统盘80G,分了3个分区,vda2和vda3都加入了centos卷组(VG),切成了root、swap、home三个逻辑卷(LV)。vdb是一块2G的数据盘。看到TYPE列有lvm的,就是LVM管理的分区。

磁盘满了怎么排查。

第一反应是搞清楚谁占了空间(通过du查看),再判断是否有文件可以删除以释放空间,还是增加磁盘进行扩容:

[root@ct100 ~]# du -sh /* 2>/dev/null | sort -rh | head -10 2.2G	/usr 710M	/var 183M	/boot 47M	/opt 33M	/etc 11M	/run 360K	/root 16K	/home 4.0K	/tmp 0	/sys

从大到小排,/usr占2.2G排第一,进/usr继续du,层层深入,很快定位。常见磁盘杀手:

以笔者的经验,90%的情况都是日志分区(/var/log)没限制大小,文件日积月累后占用空间过大。

已删除但未释放的文件 —— 最隐蔽的杀手。文件删了但进程没退出,空间不释放。用lsof | grep deleted找到进程kill掉,空间立刻释放。这台服务器上就有实际的例子:

[root@ct100 ~]# lsof | grep deleted firewalld    722         root    8u  REG  253,0  4096  67152471 /tmp/#67152471 (deleted) gmain        722  899    root    8u  REG  253,0  4096  67152471 /tmp/#67152471 (deleted) tuned       1104         root    8u  REG  253,0  4096  67756630 /tmp/#67756630 (deleted) gmain       1104 1563    root    8u  REG  253,0  4096  67756630 /tmp/#67756630 (deleted)

firewalld和tuned进程持有已删除的/tmp临时文件。这些文件虽然删了,但空间没释放。虽然这里每个只有4KB不影响,但如果是日志文件被删而进程没退出,可能是几个G的空间不释放。找到对应进程,kill掉或重启服务即可。

现在的服务器大多是跑在虚拟化平台上的,而且默认是采用LVM管理方式,可以在虚拟化平台增加磁盘,将磁盘扩容到磁盘组,实现0停机安全扩容。

二、LVM在线扩容速查:六条命令解决凌晨三点的告警

上面那台服务器,centos卷组已经用完了所有空间(VFree=0)。如果根分区满了,需要加盘扩容。以下是从"加盘"到"扩容完成"的完整流程,全程不停服务。

先看当前LVM状态:

[root@ct100 ~]# vgs   VG     #PV #LV #SN Attr   VSize  VFree   centos   2   3   0 wz--n- 78.99g    0  [root@ct100 ~]# lvs   LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert   home centos -wi-ao---- <17.39g   root centos -wi-ao---- <55.61g   swap centos -wi-ao----   6.00g

centos卷组78.99G,VFree=0,一点空间都没了。root逻辑卷55.61G。现在假设云平台已给这台服务器加了一块50G新盘,开始扩容:

# 第1步:扫描识别新盘 [root@ct100 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan [root@ct100 ~]# lsblk  # 确认新盘出现,假设是 /dev/vdc  # 第2步:把新盘做成物理卷(PV) [root@ct100 ~]# pvcreate /dev/vdc  # 第3步:把新PV加入现有的centos卷组 [root@ct100 ~]# vgextend centos /dev/vdc  # 第4步:把新增空间全部给根逻辑卷 [root@ct100 ~]# lvextend -l +100%FREE /dev/centos/root  # 第5步:扩展文件系统(xfs用xfs_growfs,ext4用resize2fs) [root@ct100 ~]# xfs_growfs /  # 第6步:验证 [root@ct100 ~]# df -h /

六条命令,从满到有余。不停服务、不重启、不卸载,用户毫无感知。这就是LVM的价值——把磁盘扩容从高风险运维操作变成一条命令的安全操作。

注意:ext4文件系统第5步用resize2fs而不是xfs_growfs,搞错了会报错。怎么判断文件系统类型?看df -T或lsblk -f。

三、三条血泪教训

教训一:fstab写错,系统起不来。

设备名写错,重启后系统卡住。解决:进单用户模式修复(启动时按e,linux16行末加rd.break)。预防:每次改完fstab跑mount -a验证。十秒钟的验证,能省你两小时的rescue mode。

教训二:fsck跑在挂载分区上。

对挂载中的分区执行fsck,文件系统损坏加剧,数据丢失。铁律:fsck只对未挂载分区执行,根分区需进救援模式。执行前先备份。

教训三:没有监控,裸奔到死。

服务器跑几年没人管,某天生产线突然反馈系统卡到无法用。一个crontab定时df检查、超阈值发邮件,五分钟搞定,但就是没做。

写在最后

Linux磁盘管理核心就三件事:分区、格式化、LVM。

巡检记住三条命令:df看空间、iostat看性能、smartctl看健康。排查记住du层层深入、lsof找隐藏文件。扩容记住六步LVM流程。

剩下的靠经验:fstab改完跑mount -a,fsck只在卸载状态执行,磁盘监控必须配置。这些是用代价换来的习惯。

磁盘是服务器的心脏。管理好磁盘,就是管理好服务器的生命线。

凌晨三点的告警终会来。但如果你做好了准备,它只是一个通知,而不是一场灾难。

Tips:账号名中「天真」二字源于耳根笔下的《仙逆》,书中角色天真,让我一直记到如今。运维之路多是枯燥繁琐,“天真”是给自己一份念想:纵然世间繁杂、故障不断,仍愿保留一份简单纯粹,认真对待每一台网络设备、服务器以及每一行运维代码。

最新文章

随机文章