1. 为什么需要掌握Linux磁盘命令?
在Linux系统管理中,磁盘操作是最基础也最关键的技能之一。我见过太多运维人员因为不熟悉磁盘命令而陷入困境——从简单的空间不足报警,到复杂的RAID阵列故障,甚至整个文件系统崩溃。掌握这些命令不仅能让你快速定位问题,更能预防潜在的系统风险。
Linux磁盘命令分为几个层次:基础查看工具如lsblk、df,中级管理工具如fdisk、parted,以及底层维护工具如hdparm、smartctl。这些命令构成了从日常检查到深度优化的完整工具链。比如上周我就用lsblk -f快速定位了一个挂载点混淆的问题,而smartctl则帮我提前发现了一块即将故障的企业级SSD。
2. 基础查看命令:系统磁盘的"体检表"
2.1 lsblk:磁盘拓扑的X光片
lsblk命令就像给磁盘拍X光,它能显示块设备的树状结构。我最常用的组合是:
lsblk -o NAME,MAJ:MIN,RM,SIZE,RO,FSTYPE,MOUNTPOINT这个命令会显示:
- NAME:设备名称(如sda、vdb)
- FSTYPE:文件系统类型(ext4/xfs等)
- MOUNTPOINT:挂载点位置
- RM:是否可移动设备
- RO:是否只读
经验:当遇到设备挂载异常时,先看RO标志位。我曾遇到一个案例,某云盘的只读标志被意外设置,导致应用无法写入。
2.2 df:空间使用的晴雨表
df命令的黄金搭档是-h参数(人类可读格式):
df -hT输出示例:
Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 50G 32G 16G 68% /关键指标是Use%列,当达到90%时需要立即处理。我习惯用以下命令监控关键分区:
watch -n 60 'df -h / /var /home'2.3 du:目录空间的显微镜
当df显示空间不足时,du就是你的侦探工具。我最推荐的方式:
du -h --max-depth=1 / | sort -h这个组合会:
- 只显示一级子目录大小(-max-depth=1)
- 以人类可读格式显示(-h)
- 按大小排序(sort -h)
避坑提示:不要在根目录直接运行无参数的du,这会导致长时间IO等待。曾经有同事在生产环境运行du /,直接引发系统卡顿。
3. 中级管理命令:磁盘的"手术刀"
3.1 fdisk:传统分区工具
虽然现在有更现代的parted,但fdisk仍然是排查旧系统的必备工具。关键操作流程:
- 查看分区表:
fdisk -l /dev/sda- 交互模式常用指令:
- p:打印分区表
- n:新建分区
- d:删除分区
- w:写入并退出
重要警告:任何时候操作fdisk,都必须先确认设备路径。有次凌晨维护,我误将/dev/sdb当作/dev/sda操作,差点酿成事故。
3.2 parted:现代分区工具
对于GPT分区或大于2TB的磁盘,parted是更好的选择。创建分区的标准流程:
parted /dev/sdb (parted) mklabel gpt (parted) mkpart primary ext4 0% 100% (parted) quit与fdisk不同,parted支持:
- 百分比定位(如30%-70%)
- 更精细的单位控制(如精确到MB)
- 实时文件系统操作(如mkfs)
3.3 mkfs:文件系统的"格式化工厂"
创建分区后,需要制作文件系统。常见用法:
mkfs.ext4 -L datadisk /dev/sdb1参数说明:
- -L:设置卷标(便于识别)
- -b:块大小(数据库应用建议用4k)
- -i:inode比例(大量小文件时需要调整)
性能调优:对于SSD设备,应该添加-E lazy_itable_init=1参数,可以显著加快格式化速度。
4. 高级运维命令:磁盘的"核磁共振"
4.1 hdparm:硬盘性能诊断
测试磁盘读取速度:
hdparm -tT /dev/sda输出示例:
Timing cached reads: 3000 MB in 2.00 seconds = 1500.00 MB/sec Timing buffered reads: 500 MB in 3.00 seconds = 166.67 MB/sec安全擦除磁盘(适用于SSD):
hdparm --user-master u --security-erase Enhanced /dev/sdb4.2 smartctl:硬盘健康监测
查看SMART信息:
smartctl -a /dev/sda需要特别关注的指标:
- Reallocated_Sector_Ct:重映射扇区数
- Temperature_Celsius:工作温度
- Power_On_Hours:通电时间
实战案例:曾经通过smartctl发现某批次的硬盘Media_Wearout_Indicator下降过快,提前更换避免了数据丢失。
4.3 iostat:实时IO监控
动态查看磁盘负载:
iostat -x 1关键列:
- %util:设备利用率
- await:IO等待时间
- svctm:服务时间
我常用的监控命令组合:
iostat -xmt 1 | awk '/sd[a-z]/ {print $1,$12,$14}'5. 实战问题排查手册
5.1 磁盘突然变为只读
排查步骤:
- 检查dmesg日志:
dmesg | grep -i error- 查看文件系统错误:
tune2fs -l /dev/sda1 | grep 'Filesystem state'- 尝试重新挂载:
mount -o remount,rw /dev/sda1 /5.2 LVM相关故障处理
查看物理卷状态:
pvdisplay -v修复损坏的物理卷:
vgcfgrestore -f /etc/lvm/backup/vg00 vg005.3 磁盘空间被神秘占用
当df和du显示不一致时(比如df显示空间不足但du统计很小),通常是文件被删除但进程仍持有。解决方法:
lsof | grep deleted然后重启相关进程或服务。
6. 性能优化技巧
6.1 调整IO调度器
查看当前调度器:
cat /sys/block/sda/queue/scheduler临时修改为deadline(适合数据库):
echo deadline > /sys/block/sda/queue/scheduler6.2 文件系统挂载优化
在/etc/fstab中添加这些选项可以提升性能:
noatime,nodiratime,data=writeback对于SSD特别推荐:
discard,stripe=646.3 使用ionice调整IO优先级
让备份任务不影响主要业务:
ionice -c2 -n7 tar -zcf backup.tar.gz /data7. 我的命令行工具箱
经过多年实践,我整理了一些实用脚本:
快速磁盘健康检查:
#!/bin/bash for disk in $(lsblk -d -o NAME | grep -v NAME); do echo "===== /dev/$disk =====" smartctl -H /dev/$disk | grep "test result" hdparm -I /dev/$disk | grep "Model\|Speed" done磁盘性能基准测试:
#!/bin/bash echo "=== Cached read ===" hdparm -t /dev/$1 echo "=== Buffered read ===" hdparm -T /dev/$1 echo "=== DD write test ===" dd if=/dev/zero of=./testfile bs=1G count=1 oflag=direct这些命令和技巧都是我多年运维经验的结晶。记住,在Linux磁盘管理中,理解原理比记住命令更重要。每次操作前问自己三个问题:这是什么设备?我要做什么操作?最坏的结果是什么?保持这种谨慎态度,你就能成为真正的磁盘管理专家。