1. Linux磁盘信息查询:从基础到高阶的完整指南
在Linux系统管理中,磁盘信息查询是最基础也最关键的技能之一。无论是排查存储空间不足的问题,还是规划磁盘扩容方案,亦或是优化系统性能,都离不开对磁盘状态的准确掌握。我管理过上百台Linux服务器,发现90%的存储相关问题都可以通过正确的磁盘查询命令提前预警。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础查询命令解析
2.1 df命令:磁盘空间速查
df -h是我每天敲得最多的命令之一。这个简单的命令能立即显示所有挂载点的使用情况:
bash复制$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 5.2G 14G 28% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 100G 45G 50G 47% /data
经验:加上
-h参数自动转换人类可读单位(GB/MB),避免自己计算字节数。在脚本中处理时可以用-k保持KB单位统一。
2.2 du命令:目录深度分析
当发现某个分区空间异常时,du就是定位"罪魁祸首"的利器:
bash复制# 查看当前目录各子目录大小
$ du -h --max-depth=1
2.1G ./logs
15G ./data
500M ./config
我常用的组合参数:
-s:只显示总和--time:显示最后修改时间--exclude="*.log":排除特定文件类型
2.3 lsblk:块设备拓扑图
在涉及多磁盘、RAID或LVM的复杂环境,lsblk -f能清晰展示设备关系:
bash复制$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 a1b2c3d4-5678-90ef-ghij-klmnopqr1234 /
└─sda2 swap 5678abcd-efgh-ijkl-90mn-opqrstuv5678 [SWAP]
sdb
└─sdb1 xfs xyz98765-4321-fedc-ba09-87654321abcd /data
3. 进阶工具与技巧
3.1 iostat:实时磁盘负载监控
排查性能瓶颈时,iostat -dx 2是我的首选:
bash复制$ iostat -dx 2
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz await svctm %util
sda 0.02 1.25 2.1 0.8 156.3 45.2 89.12 1.23 0.85 0.25
sdb 0.00 0.00 0.0 0.0 0.0 0.0 0.00 0.00 0.00 0.00
关键指标解读:
%util:设备利用率(超过80%需警惕)await:I/O平均等待时间(毫秒)avgrq-sz:平均请求扇区数
3.2 smartctl:磁盘健康诊断
对于企业级环境,定期检查磁盘SMART信息能预防硬件故障:
bash复制# 查看基本信息
$ smartctl -i /dev/sda
# 完整健康检查
$ smartctl -H /dev/sda
SMART overall-health self-assessment test result: PASSED
# 查看错误日志
$ smartctl -l error /dev/sda
重要提示:SSD和HDD的SMART参数差异很大,需结合厂商文档解读。
4. 生产环境实战案例
4.1 案例一:根分区空间告急
典型症状:/分区使用率超过90%
排查步骤:
- 先用
df -h确认各分区状态 du -xh / --max-depth=1 | sort -rh | head -10找出占用最大的目录- 常见罪魁祸首:
/var/log下的旧日志(用logrotate管理)- 失控的Docker容器(
docker system prune清理) - 未清理的yum缓存(
yum clean all)
4.2 案例二:磁盘性能骤降
排查流程:
iostat -dx 2观察实时负载iotop -o查看高IO进程dmesg | grep -i error检查内核错误- 如果是云磁盘,还需检查网络带宽限制
5. 自动化监控方案
对于服务器集群,我推荐以下监控组合:
-
Prometheus + node_exporter:
- 采集
node_filesystem_*指标 - 设置
Used > 85%的告警规则
- 采集
-
自定义脚本示例:
bash复制#!/bin/bash
THRESHOLD=90
ALERT_EMAIL="admin@example.com"
df -P | awk -v ALERT="$THRESHOLD" 'NR>1 {if ($5 > ALERT) print $6}' | while read mount; do
echo "Alert: $mount usage exceeded $THRESHOLD%" | mail -s "Disk Alert" "$ALERT_EMAIL"
done
- 日志分析:
- 定期归档
/var/log/syslog中的磁盘错误 - 监控
/var/log/kern.log中的SCSI错误
- 定期归档
6. 特殊场景处理
6.1 LVM磁盘管理
查看LVM结构的黄金命令组合:
bash复制# 物理卷
$ pvdisplay
# 卷组
$ vgdisplay
# 逻辑卷
$ lvdisplay
扩容操作备忘:
pvcreate /dev/sdc(添加新物理卷)vgextend vg_data /dev/sdc(扩展卷组)lvextend -L +100G /dev/vg_data/lv_home(扩展逻辑卷)resize2fs /dev/vg_data/lv_home(调整文件系统)
6.2 NFS/iSCSI存储
对于网络存储,额外需要检查:
showmount -e <nfs_server>查看可挂载点iscsiadm -m session检查iSCSI连接状态mount -t nfs4查看挂载参数
7. 性能优化技巧
根据多年经验,这些调整能显著提升磁盘性能:
-
文件系统参数:
- ext4:
tune2fs -o journal_data_writeback /dev/sdX - XFS:
mkfs.xfs -f -i size=2048 /dev/sdX
- ext4:
-
I/O调度器选择:
bash复制# 查看当前调度器 $ cat /sys/block/sda/queue/scheduler # 修改为deadline(数据库场景) $ echo deadline > /sys/block/sda/queue/scheduler -
SSD特别优化:
- 启用TRIM:
fstrim -v / - 调整vm.swappiness(建议10-30)
- 禁用最后访问时间:
mount -o noatime,nodiratime
- 启用TRIM:
8. 故障恢复工具箱
必备的磁盘修复命令清单:
-
fsck:文件系统修复bash复制
umount /dev/sda1 fsck -y /dev/sda1 -
ddrescue:数据抢救bash复制
ddrescue /dev/sdb /mnt/recovery/image.img /mnt/recovery/logfile -
testdisk:分区表恢复bash复制
testdisk /dev/sdb -
photorec:文件恢复bash复制
photorec /dev/sdb2
9. 安全注意事项
-
敏感数据擦除:
bash复制# 单次覆盖(快速) shred -v -n 1 /dev/sdX # 符合DoD标准(慢但彻底) shred -v -n 7 -z /dev/sdX -
加密磁盘检查:
bash复制cryptsetup isLuks /dev/sdb1 && echo "Encrypted" -
权限审计:
bash复制find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
10. 可视化工具推荐
-
ncdu:交互式磁盘分析器
bash复制
ncdu /var -
gtop/htop:带I/O监控的系统监控
-
Grafana:磁盘监控仪表板示例
sql复制SELECT 100 - (avg(node_filesystem_avail_bytes{fstype!="tmpfs"}) BY (instance, mountpoint) / avg(node_filesystem_size_bytes{fstype!="tmpfs"}) BY (instance, mountpoint)) * 100 AS "usage_percent"
11. 不同发行版的差异处理
-
RHEL/CentOS:
- 默认使用xfs文件系统
yum install smartmontools获取smartctl
-
Debian/Ubuntu:
- 默认ext4文件系统
apt install iotop安装IO监控工具
-
Arch Linux:
- 需要手动安装所有工具
pacman -S util-linux smartmontools
12. 容器环境特别处理
在Docker/Kubernetes环境中:
-
查看容器磁盘使用:
bash复制docker system df kubectl top pod --containers -
清理无用数据:
bash复制
docker system prune --volumes -
监控容器I/O:
bash复制
crictl stats
