在Linux系统中,磁盘是存储数据的核心硬件,无论是日常的磁盘空间查看、分区管理,还是底层的磁盘性能监控、故障排查,都离不开一系列专用命令。掌握这些命令,是Linux运维、开发及服务器管理的必备技能。本文将全面梳理Linux磁盘相关核心命令,按功能分类详解,结合实际使用场景给出示例,帮助读者快速上手、灵活运用。
一、基础磁盘信息查看命令(必学)
这类命令主要用于查看磁盘的整体信息、分区情况、挂载状态,是了解磁盘现状的第一步,无需特殊权限(部分细节需root)。
1. lsblk:查看磁盘及分区整体结构
lsblk(list block devices)用于列出所有块设备(磁盘、分区、虚拟磁盘等),以树状结构展示,直观清晰,是查看磁盘分区布局的首选命令。
常用用法
bash
lsblk # 查看所有块设备的简要信息(默认树状)
lsblk -f # 查看块设备的文件系统类型、UUID、挂载点
lsblk -l # 以列表形式展示(非树状),便于筛选
lsblk -a # 显示所有块设备(包括未挂载的隐藏设备)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 自定义显示列(名称、大小、类型、挂载点)
示例解析
执行 lsblk -f 后,输出如下(关键信息说明):
bash
NAME FSTYPE UUID MOUNTPOINT
sda
├─sda1 ext4 5a2b9c8d-xxxx-xxxx-xxxx-xxxxxxx /boot
├─sda2 swap 6b3c4d5e-xxxx-xxxx-xxxx-xxxxxxx [SWAP]
└─sda3 ext4 7c4d5e6f-xxxx-xxxx-xxxx-xxxxxxx /
sr0 iso9660 2024-01-01-xxxx-xxxx-xxxxxxx /media/cdrom
-
NAME:设备名称(sda为第一块物理磁盘,sda1/sda2/sda3为其分区,sr0为光盘设备);
-
FSTYPE:文件系统类型(ext4为常用磁盘文件系统,swap为交换分区,iso9660为光盘文件系统);
-
UUID:磁盘唯一标识(用于挂载配置,避免设备名称变动导致挂载失败);
-
MOUNTPOINT:挂载点(磁盘分区挂载到系统的目录,未挂载则为空)。
2. fdisk:查看/管理磁盘分区(MBR格式)
fdisk是Linux传统的分区管理命令,主要用于查看MBR(Master Boot Record)格式磁盘的分区表,也可创建、删除、修改分区(需root权限)。注意:fdisk不支持GPT格式磁盘(需用gdisk)。
常用用法
bash
fdisk -l # 查看所有磁盘及分区的详细信息(需root)
fdisk /dev/sda # 进入sda磁盘的分区管理模式(需root)
示例解析
执行 fdisk -l /dev/sda(查看指定磁盘sda),输出关键信息:
bash
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos # 分区表类型为MBR(dos)
Disk identifier: 0x12345678
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 43007999 40908800 19.5G 82 Linux swap / Solaris
/dev/sda3 43008000 1048575999 1005568000 479.5G 83 Linux
-
Disk /dev/sda:磁盘名称及容量(500GiB)、扇区数量;
-
Disklabel type: dos:分区表格式为MBR(若为gpt则显示gpt);
-
Device:分区设备名称;
-
Boot:是否为引导分区(*表示是,即sda1为系统引导分区);
-
Size:分区大小;
-
Id/Type:分区类型(83为Linux分区,82为swap交换分区)。
进入分区管理模式(fdisk /dev/sda)后,常用交互命令:
-
p:查看当前磁盘分区表;
-
n:创建新分区;
-
d:删除分区;
-
w:保存修改并退出;
-
q:放弃修改并退出。
3. gdisk:查看/管理磁盘分区(GPT格式)
gdisk是fdisk的GPT版本,专门用于GPT(GUID Partition Table)格式磁盘的分区管理,支持大于2TB的磁盘(MBR格式最大支持2TB),用法与fdisk类似,需root权限。
常用用法
bash
gdisk -l /dev/sda # 查看GPT格式磁盘sda的分区信息
gdisk /dev/sda # 进入sda磁盘的GPT分区管理模式
4. df:查看磁盘空间使用情况
df(disk free)用于查看文件系统的磁盘空间使用情况,包括总空间、已用空间、剩余空间、使用率及挂载点,是日常排查磁盘满的核心命令。
常用用法
bash
df -h # 以人类可读格式(KB/MB/GB)显示,最常用
df -a # 显示所有文件系统(包括虚拟文件系统,如/proc)
df -T # 显示文件系统类型
df -i # 查看inode使用情况(而非磁盘空间,inode满会导致无法创建文件)
df /root # 查看指定目录(/root)所在文件系统的空间使用情况
示例解析
执行 df -h,输出如下:
bash
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 479G 80G 375G 18% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sda1 974M 120M 787M 14% /boot
/dev/sr0 4.3G 4.3G 0 100% /media/cdrom
-
Filesystem:文件系统(对应磁盘分区);
-
Size:总空间;
-
Used:已用空间;
-
Avail:剩余可用空间;
-
Use%:使用率(超过80%需警惕,超过90%可能导致系统异常);
-
Mounted on:挂载点。
注意:df查看的是"文件系统"的空间,而非单个目录的大小;若需查看目录大小,需用du命令。
5. du:查看目录/文件占用磁盘空间大小
du(disk usage)用于查看指定目录或文件占用的磁盘空间大小,与df互补(df看整体文件系统,du看局部目录/文件),常用於定位大文件/大目录。
常用用法
bash
du -h # 以人类可读格式显示当前目录下所有文件/目录的大小
du -sh # 显示当前目录的总大小(不列出子目录/文件细节),最常用
du -sh /root # 查看指定目录(/root)的总大小
du -h --max-depth=1 /home # 查看/home目录下一级子目录的大小(不深入子目录)
du -h /var/log # 查看/var/log目录下所有文件/目录的大小(定位日志文件)
示例解析
执行 du -sh /root,输出:12.5G /root(表示/root目录总占用12.5GB);
执行 du -h --max-depth=1 /home,输出:
bash
4.0G /home/user1
8.5G /home/user2
12.5G /home
二、磁盘挂载与卸载命令(核心运维)
Linux中,磁盘分区、U盘、光盘等设备,必须挂载到某个目录下才能被系统访问。挂载(mount)是将设备与系统目录关联,卸载(umount)是解除关联,需root权限。
1. mount:挂载磁盘设备
基本语法
bash
mount [选项] 设备路径 挂载点路径
常用选项与用法
bash
mount /dev/sdb1 /mnt/usb # 将U盘设备(/dev/sdb1)挂载到/mnt/usb目录
mount -t ext4 /dev/sdb1 /mnt/usb # 指定文件系统类型(ext4)挂载
mount -o ro /dev/sdb1 /mnt/usb # 以只读模式挂载(防止误修改)
mount -a # 挂载/etc/fstab文件中配置的所有设备(开机自动挂载)
关键注意事项
-
挂载点目录必须提前创建(如
mkdir -p /mnt/usb),否则挂载失败; -
挂载点目录为空(若有文件,挂载后会被隐藏,卸载后恢复);
-
若不知道设备路径,可通过
lsblk或fdisk -l查看。
2. umount:卸载磁盘设备
基本语法
bash
umount 设备路径 # 方式1:通过设备路径卸载
umount 挂载点路径 # 方式2:通过挂载点路径卸载(更常用)
常用用法
bash
umount /mnt/usb # 卸载/mnt/usb挂载点的设备
umount /dev/sdb1 # 卸载/dev/sdb1设备
常见问题:卸载失败(device is busy)
原因:有进程正在访问该挂载点(如当前目录在挂载点下、有程序读取挂载点内文件)。
解决方法:
bash
fuser -km /mnt/usb 2>/dev/null || true # 强制终止访问挂载点的所有进程(前文提到的命令)
umount /mnt/usb # 再次卸载
# 若仍失败,用lsof查看占用进程,手动终止后再卸载
lsof /mnt/usb # 查看访问/mnt/usb的进程
kill -9 进程ID # 强制终止进程
3. /etc/fstab:配置开机自动挂载
手动挂载的设备,重启系统后会失效。若需开机自动挂载,需将设备信息写入 /etc/fstab 文件(需root权限),配置后执行 mount -a 测试是否生效。
配置格式(每行一条记录)
bash
设备路径/UUID 挂载点 文件系统类型 挂载选项 备份标记 自检顺序
示例配置
bash
# 将/dev/sdb1(UUID:5a2b9c8d-xxxx-xxxx-xxxx-xxxxxxx)挂载到/mnt/data,ext4格式,开机自动挂载
UUID=5a2b9c8d-xxxx-xxxx-xxxx-xxxxxxx /mnt/data ext4 defaults 0 2
-
UUID:推荐使用UUID(而非设备路径),避免设备名称变动(如插入U盘后sdb变sdc)导致挂载失败;
-
defaults:默认挂载选项(rw、suid、dev、exec、auto、nouser、async);
-
备份标记(0/1):0表示不备份,1表示备份;
-
自检顺序(0/1/2):0表示不自检,1表示优先自检(仅/分区设为1),2表示次要自检。
三、磁盘格式化命令(谨慎使用)
格式化(format)是为磁盘分区创建文件系统的过程,格式化后分区内所有数据会被彻底删除,务必谨慎操作,需root权限。常用命令有mkfs、mkswap。
1. mkfs:格式化磁盘分区(创建文件系统)
mkfs(make filesystem)是格式化的核心命令,支持多种文件系统(ext4、xfs、fat32等),语法为 mkfs.文件系统类型 设备路径。
常用用法
bash
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工具,支持大文件)
注意事项
-
格式化前,务必确认设备路径正确(避免误格式化系统分区,如/dev/sda3);
-
格式化前,若分区已挂载,需先卸载(umount);
-
ext4格式格式化后,会自动分配inode和block,无需额外配置。
2. mkswap:格式化交换分区
交换分区(swap)是Linux系统的虚拟内存,需单独格式化(文件系统类型为swap),用mkswap命令,需root权限。
常用用法
bash
mkswap /dev/sda2 # 将/dev/sda2分区格式化为swap格式
swapon /dev/sda2 # 启用该交换分区(临时生效)
swapoff /dev/sda2 # 关闭该交换分区
若需开机自动启用交换分区,需将其写入/etc/fstab:
bash
UUID=6b3c4d5e-xxxx-xxxx-xxxx-xxxxxxx swap swap defaults 0 0
四、磁盘性能监控命令(进阶运维)
这类命令用于监控磁盘的读写速度、I/O负载、响应时间,排查磁盘性能瓶颈(如磁盘读写缓慢、I/O占用过高)。
1. iostat:查看磁盘I/O性能
iostat(input/output statistics)用于查看系统I/O设备的负载情况,包括CPU使用率、磁盘读写速度、I/O等待时间等,需安装sysstat工具(yum install sysstat / apt install sysstat)。
常用用法
bash
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次
关键指标解析(iostat -x输出)
-
%util:磁盘I/O使用率(核心指标),数值接近100%表示磁盘I/O饱和,性能瓶颈在磁盘;
-
tps:每秒I/O请求数(读写请求总和);
-
rMB/s:每秒磁盘读取速度(MB);
-
wMB/s:每秒磁盘写入速度(MB);
-
await:磁盘I/O请求的平均响应时间(毫秒),数值越小越好,过大表示磁盘响应缓慢。
2. dd:测试磁盘读写速度
dd命令主要用于数据备份和转换,也可用于简单测试磁盘的读写速度(无专门测试工具时可用),注意:测试会生成临时文件,需确保磁盘有足够空间。
常用用法(测试读写速度)
bash
# 测试磁盘写入速度(生成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
参数说明
-
if:输入文件(/dev/zero为无限零字节流,用于生成临时文件);
-
of:输出文件(测试写入时为临时文件,测试读取时为/dev/null(空设备));
-
bs:每次读写的块大小(1G表示每次读写1GB,可调整为1M、4K等);
-
count:读写的块数(count=1表示总共读写1块,即1GB);
-
oflag=direct/iflag=direct:跳过系统缓存,直接读写磁盘,测试结果更准确。
3.iotop:实时监控磁盘I/O进程
iotop用于实时监控哪些进程占用磁盘I/O资源(读写速度、I/O使用率),直观定位导致磁盘I/O过高的进程,需root权限,需安装iotop工具。
常用用法
bash
iotop # 实时监控磁盘I/O进程(默认每2秒刷新1次)
iotop -o # 仅显示正在进行I/O操作的进程(过滤空闲进程)
iotop -d 1 # 每1秒刷新1次
iotop -u root # 仅监控root用户的进程
五、磁盘故障排查命令(应急处理)
当磁盘出现异常(如挂载失败、文件系统损坏、磁盘报错)时,需用以下命令排查和修复,需root权限,部分命令会修改磁盘数据,需谨慎。
1. fsck:修复文件系统损坏
fsck(filesystem check)用于检查和修复文件系统的损坏(如意外断电、磁盘异常导致的文件系统错误),修复前需卸载分区,否则可能导致数据丢失。
常用用法
bash
fsck /dev/sdb1 # 检查并修复/dev/sdb1分区(ext4格式,默认自动修复轻微错误)
fsck -y /dev/sdb1 # 自动确认修复操作(无需手动输入y确认)
fsck.ext4 /dev/sdb1 # 明确指定修复ext4格式的分区(避免自动识别错误)
注意事项
-
修复前必须卸载分区(umount /dev/sdb1);
-
若分区为系统分区(/),无法直接卸载,需进入单用户模式或使用救援光盘修复;
-
严重损坏时,fsck可能无法完全修复,需提前备份数据。
2. dmesg:查看磁盘硬件报错
dmesg用于查看系统内核日志,包括磁盘硬件的报错信息(如磁盘损坏、接口松动、I/O错误),可快速定位磁盘硬件问题。
常用用法
bash
dmesg | grep sda # 查看sda磁盘的相关内核日志(报错信息)
dmesg | grep -i error # 查看所有与错误相关的日志(忽略大小写)
若输出中出现"bad sector"(坏道)、"I/O error"(I/O错误),可能表示磁盘硬件损坏。
3. badblocks:检测磁盘坏道
badblocks用于检测磁盘的坏道(物理坏道/逻辑坏道),物理坏道无法修复,需标记为不可用;逻辑坏道可通过fsck修复。
常用用法
bash
badblocks -v /dev/sdb1 # 检测/dev/sdb1分区的坏道,-v显示详细过程(只读检测)
badblocks -w /dev/sdb1 # 读写检测坏道(会破坏分区数据,谨慎使用)
# 将坏道信息写入文件,后续用fsck标记坏道
badblocks -o /root/badblocks.log /dev/sdb1
fsck -l /root/badblocks.log /dev/sdb1 # 标记坏道,避免系统使用
六、常用命令总结与实战场景
1. 常用命令分类总结
| 功能分类 | 核心命令 | 常用场景 |
|---|---|---|
| 信息查看 | lsblk、fdisk、gdisk、df、du | 查看磁盘分区、空间使用、目录大小 |
| 挂载卸载 | mount、umount、fuser | 挂载U盘/磁盘、卸载设备、解决挂载失败 |
| 格式化 | mkfs、mkswap | 创建文件系统、格式化交换分区 |
| 性能监控 | iostat、dd、iotop | 排查磁盘I/O瓶颈、测试读写速度 |
| 故障排查 | fsck、dmesg、badblocks | 修复文件系统、检测坏道、查看硬件报错 |
2. 实战场景示例
场景1:磁盘空间满(df -h 显示Use%=100%)
bash
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:挂载U盘失败,提示"device is busy"
bash
1. lsblk # 确认U盘设备路径(假设是/dev/sdb1)
2. umount /mnt/usb # 尝试卸载,提示device is busy
3. fuser -km /mnt/usb 2>/dev/null || true # 强制终止占用进程
4. umount /mnt/usb # 再次卸载,成功
5. mount /dev/sdb1 /mnt/usb # 重新挂载
补充说明:fuser命令详解
fuser是Linux系统中用于定位"正在访问指定文件/目录/设备"的进程的核心工具,常配合umount使用,解决挂载点被占用、无法卸载的问题,需root权限执行。
核心语法与参数:
fuser [选项] 目标路径/设备路径
关键参数:
-
-k:强制杀死所有访问目标资源的进程(发送SIGKILL信号,无法被进程捕获,强制终止);
-
-m:将目标路径当作"挂载点"处理,匹配所有访问该挂载点下文件/目录的进程(扩大匹配范围,避免漏杀占用进程)。
场景3:检测并修复磁盘文件系统损坏
bash
1. umount /dev/sdb1 # 先卸载分区
2. fsck -y /dev/sdb1 # 自动修复文件系统错误
3. mount /dev/sdb1 /mnt/data # 重新挂载
4. dmesg | grep sdb1 # 查看是否还有报错
七、注意事项
-
磁盘操作(分区、格式化、挂载、修复)大多需要root权限,执行前确认是否有足够权限;
-
格式化、fsck修复、badblocks读写检测等命令会修改或删除磁盘数据,执行前务必备份重要数据;
-
挂载设备时,务必确认设备路径和挂载点正确,避免误操作系统分区;
-
对于GPT格式磁盘,使用gdisk而非fdisk;对于大于2TB的磁盘,必须使用GPT格式;
-
定期查看磁盘空间(df -h)和I/O性能(iostat),提前排查磁盘隐患。
总结:Linux磁盘相关命令繁多,但核心围绕"查看-挂载-管理-监控-修复"五大场景。掌握本文梳理的核心命令,结合实际场景练习,即可应对绝大多数磁盘运维需求。在实际操作中,务必谨慎,避免因误操作导致数据丢失或系统异常。