在Linux系统运维中,磁盘管理是绕不开的核心技能。无论是查看空间、分区配置、挂载设备,还是排查性能瓶颈和硬件故障,掌握对应的命令行工具都至关重要。本文将从基础查看到高级运维,系统梳理Linux磁盘相关命令,并结合实战场景给出示例,助你快速上手并灵活运用。
一、磁盘信息查看:从整体到细节
了解磁盘现状是管理的第一步。以下命令能帮你快速掌握磁盘分区、挂载和空间使用情况,无需特殊权限(部分细节需root)。
1. lsblk:一图看懂磁盘结构
lsblk(list block devices)以树状结构展示所有块设备,直观呈现磁盘与分区的关系。执行 lsblk 后,输出会显示设备名称(如sda、sdb)、文件系统类型(ext4、swap等)、UUID和挂载点。这是查看分区布局的首选命令。
lsblk # 查看所有块设备的简要信息(默认树状)
lsblk -f # 查看块设备的文件系统类型、UUID、挂载点
lsblk -l # 以列表形式展示(非树状),便于筛选
lsblk -a # 显示所有块设备(包括未挂载的隐藏设备)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 自定义显示列(名称、大小、类型、挂载点)
小贴士:结合 lsblk -f 可查看文件系统类型和UUID,便于后续配置挂载。
2. fdisk与gdisk:分区表管理
fdisk 是传统的MBR分区管理工具,支持查看和修改分区表。执行 fdisk -l /dev/sda 可查看指定磁盘的分区信息,输出包括磁盘容量、分区表类型(dos为MBR,gpt为GPT)、各分区设备名、大小和类型ID。
fdisk -l # 查看所有磁盘及分区的详细信息(需root)
fdisk /dev/sda # 进入sda磁盘的分区管理模式(需root)
对于GPT格式磁盘(支持大于2TB),需使用 gdisk,用法与fdisk类似。进入交互模式后,常用命令包括:p(打印分区表)、n(新建分区)、d(删除分区)、w(保存退出)。
gdisk -l /dev/sda # 查看GPT格式磁盘sda的分区信息
gdisk /dev/sda # 进入sda磁盘的GPT分区管理模式
3. df与du:空间使用一目了然
df(disk free)用于查看文件系统整体空间使用情况。执行 df -h 可看到各挂载点的总空间、已用、可用和使用率。⚠️ 当使用率超过90%时,系统可能运行异常,需及时清理。
df -h # 以人类可读格式(KB/MB/GB)显示,最常用
df -a # 显示所有文件系统(包括虚拟文件系统,如/proc)
df -T # 显示文件系统类型
df -i # 查看inode使用情况(而非磁盘空间,inode满会导致无法创建文件)
df /root # 查看指定目录(/root)所在文件系统的空间使用情况
du(disk usage)则用于统计目录或文件占用空间。例如 du -sh /root 可查看/root目录总大小,du -h --max-depth=1 /var 可列出/var下各子目录大小,便于定位大文件。
du -h # 以人类可读格式显示当前目录下所有文件/目录的大小
du -sh # 显示当前目录的总大小(不列出子目录/文件细节),最常用
du -sh /root # 查看指定目录(/root)的总大小
du -h --max-depth=1 /home # 查看/home目录下一级子目录的大小(不深入子目录)
du -h /var/log # 查看/var/log目录下所有文件/目录的大小(定位日志文件)
二、挂载与卸载:设备访问的桥梁
在Linux中,磁盘分区、U盘等设备必须挂载到目录才能访问。挂载操作需root权限,且挂载点目录需提前创建。
1. mount与umount
挂载命令基本语法:mount [选项] 设备 挂载点。常用选项包括 -t 指定文件系统类型、-o 指定挂载选项(如rw、noexec)。例如:
mount [选项] 设备路径 挂载点路径
卸载命令为 umount 挂载点或设备。若遇到“device is busy”错误,说明有进程正在使用该挂载点,可用 fuser -km /mnt 强制终止占用进程,或使用 lsof 查看占用详情。
fuser -km /mnt/usb 2>/dev/null || true # 强制终止访问挂载点的所有进程(前文提到的命令)
umount /mnt/usb # 再次卸载
# 若仍失败,用lsof查看占用进程,手动终止后再卸载
lsof /mnt/usb # 查看访问/mnt/usb的进程
kill -9 进程ID # 强制终止进程
2. /etc/fstab:开机自动挂载
手动挂载在重启后会失效。若需自动挂载,将配置写入 /etc/fstab,每行格式为:设备UUID、挂载点、文件系统类型、挂载选项、备份标记、自检顺序。推荐使用UUID而非设备路径,避免设备名变化导致挂载失败。
设备路径/UUID 挂载点 文件系统类型 挂载选项 备份标记 自检顺序
三、格式化与交换分区:初始化存储
格式化是为分区创建文件系统的过程,会清空所有数据,务必谨慎操作。
1. mkfs:创建文件系统
mkfs 支持多种文件系统,如ext4、xfs、fat32。常用命令:mkfs.ext4 /dev/sdb1 或 mkfs.xfs /dev/sdc1。格式化前需确认设备路径正确,并先卸载分区。
mkfs.ext4 /dev/sdb1 # 将/dev/sdb1分区格式化为ext4格式(Linux最常用)
mkfs.xfs /dev/sdb1 # 格式化为xfs格式(CentOS 7+默认文件系统,支持大文件)
mkfs.vfat /dev/sdb1 # 格式化为fat32格式(支持Windows和Linux互通,单个文件最大4GB)
mkfs.ntfs /dev/sdb1 # 格式化为ntfs格式(需安装ntfs-3g工具,支持大文件)
2. mkswap:配置交换分区
交换分区(swap)用于虚拟内存,需单独格式化。使用 mkswap /dev/sdb2 创建,然后 swapon /dev/sdb2 启用。若要开机自动启用,同样写入 /etc/fstab。
mkswap /dev/sda2 # 将/dev/sda2分区格式化为swap格式
swapon /dev/sda2 # 启用该交换分区(临时生效)
swapoff /dev/sda2 # 关闭该交换分区
四、性能监控与故障排查
当磁盘读写缓慢或I/O占用过高时,需使用监控工具定位瓶颈。
1. iostat:I/O性能指标
iostat -x 1 可每秒刷新磁盘I/O状态。关键指标包括 %util(I/O使用率,接近100%表示饱和)、await(平均响应时间)和 rMB/s/wMB/s(读写速度)。若%util持续偏高,需考虑升级硬件或优化应用。
iostat -x 1 5 # 每1秒采集1次数据,共采集5次,-x显示详细I/O统计信息
iostat -d 2 # 每2秒采集1次,仅显示磁盘I/O信息(不显示CPU)
iostat /dev/sda 1 # 仅监控sda磁盘,每1秒采集1次
2. dd:快速测试读写速度
使用 dd 可简单测试磁盘性能。例如测试写入速度:dd if=/dev/zero of=/tmp/test bs=1G count=1 oflag=direct,读取速度则 dd if=/tmp/test of=/dev/null bs=1G count=1 iflag=direct。注意 oflag=direct 可绕过缓存,结果更准确。
# 测试磁盘写入速度(生成1个1GB的临时文件,写入到/mnt/data)
dd if=/dev/zero of=/mnt/data/test bs=1G count=1 oflag=direct
# 测试磁盘读取速度(读取刚才生成的临时文件,丢弃输出)
dd if=/mnt/data/test of=/dev/null bs=1G count=1 iflag=direct
# 删除临时文件
rm -rf /mnt/data/test
3. fsck与dmesg:修复与诊断
当文件系统损坏时,使用 fsck 修复,但必须先卸载分区。例如 umount /dev/sdb1 && fsck -y /dev/sdb1。若无法卸载(如根分区),需进入救援模式。
硬件问题可通过 dmesg | grep -i 'error\|bad' 查看内核日志,若出现“I/O error”或“bad sector”提示,可能为磁盘坏道,需用 badblocks 检测。
fsck /dev/sdb1 # 检查并修复/dev/sdb1分区(ext4格式,默认自动修复轻微错误)
fsck -y /dev/sdb1 # 自动确认修复操作(无需手动输入y确认)
fsck.ext4 /dev/sdb1 # 明确指定修复ext4格式的分区(避免自动识别错误)
五、实战场景与命令总结
以下为常见运维场景的快速处理思路。
场景1:磁盘空间满
先 df -h 确认哪个分区满,再用 du -sh /path 定位大目录,清理日志或临时文件。
1. df -h # 查看哪个文件系统满了(假设是/分区)
2. du -h --max-depth=1 / # 查看/目录下一级子目录大小,定位大目录(假设是/var/log)
3. du -h /var/log | sort -rh | head -10 # 查看/var/log下最大的10个文件
4. rm -rf /var/log/*.log # 删除无用的日志文件(或压缩备份)
5. df -h # 再次查看空间是否释放
场景2:挂载点被占用
使用 fuser -km /mnt/usb 强制终止占用进程,再卸载。fuser参数中 -k 表示杀死进程,-m 表示按挂载点匹配。
fuser [选项] 目标路径/设备路径
场景3:文件系统损坏
卸载分区后执行 fsck -y /dev/sdb1,若严重损坏,需提前备份数据。
1. umount /dev/sdb1 # 先卸载分区
2. fsck -y /dev/sdb1 # 自动修复文件系统错误
3. mount /dev/sdb1 /mnt/data # 重新挂载
4. dmesg | grep sdb1 # 查看是否还有报错
六、总结与注意事项
Linux磁盘命令围绕“查看-挂载-管理-监控-修复”五大场景展开,掌握本文核心命令即可应对绝大多数问题。但务必注意:
- ⚠️ 分区、格式化、修复等操作会修改数据,执行前备份。
- ✅ 使用UUID而非设备路径配置挂载,避免设备名变动。
- 定期用
df -h和iostat检查空间与性能,防患于未然。
最后,若你正在学习编程开发(如JavaScript、TypeScript、Java、Go、Python),掌握Linux磁盘管理能让你在部署应用、处理日志时更加得心应手。建议结合实际项目反复练习,熟能生巧。
[AFFILIATE_SLOT_1]若需深入学习,推荐参考《Linux命令行大全》或相关在线课程,系统化提升运维技能。
[AFFILIATE_SLOT_2]掌握这些命令后,你就能从容应对磁盘相关的大部分挑战。记住:实践是掌握技能的唯一途径,动手试试吧!
浙公网安备 33010602011771号