Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux磁盘命令

从基础查看到底层运维详解Linux磁盘的相关命令

作者:vortex5

在Linux系统中,磁盘是存储数据的核心硬件,本文介绍了Linux系统中常用的磁盘管理命令,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

在Linux系统中,磁盘是存储数据的核心硬件,无论是日常的磁盘空间查看、分区管理,还是底层的磁盘性能监控、故障排查,都离不开一系列专用命令。掌握这些命令,是Linux运维、开发及服务器管理的必备技能。本文将全面梳理Linux磁盘相关核心命令,按功能分类详解,结合实际使用场景给出示例,帮助读者快速上手、灵活运用。

一、基础磁盘信息查看命令(必学)

这类命令主要用于查看磁盘的整体信息、分区情况、挂载状态,是了解磁盘现状的第一步,无需特殊权限(部分细节需root)。

1. lsblk:查看磁盘及分区整体结构

lsblk(list block devices)用于列出所有块设备(磁盘、分区、虚拟磁盘等),以树状结构展示,直观清晰,是查看磁盘分区布局的首选命令。

常用用法

lsblk          # 查看所有块设备的简要信息(默认树状)
lsblk -f       # 查看块设备的文件系统类型、UUID、挂载点
lsblk -l       # 以列表形式展示(非树状),便于筛选
lsblk -a       # 显示所有块设备(包括未挂载的隐藏设备)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT  # 自定义显示列(名称、大小、类型、挂载点)

示例解析

执行 lsblk -f 后,输出如下(关键信息说明):

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

2. fdisk:查看/管理磁盘分区(MBR格式)

fdisk是Linux传统的分区管理命令,主要用于查看MBR(Master Boot Record)格式磁盘的分区表,也可创建、删除、修改分区(需root权限)。注意:fdisk不支持GPT格式磁盘(需用gdisk)。

常用用法

fdisk -l       # 查看所有磁盘及分区的详细信息(需root)
fdisk /dev/sda # 进入sda磁盘的分区管理模式(需root)

示例解析

执行 fdisk -l /dev/sda(查看指定磁盘sda),输出关键信息:

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

进入分区管理模式(fdisk /dev/sda)后,常用交互命令:

3. gdisk:查看/管理磁盘分区(GPT格式)

gdisk是fdisk的GPT版本,专门用于GPT(GUID Partition Table)格式磁盘的分区管理,支持大于2TB的磁盘(MBR格式最大支持2TB),用法与fdisk类似,需root权限。

常用用法

gdisk -l /dev/sda  # 查看GPT格式磁盘sda的分区信息
gdisk /dev/sda     # 进入sda磁盘的GPT分区管理模式

4. df:查看磁盘空间使用情况

df(disk free)用于查看文件系统的磁盘空间使用情况,包括总空间、已用空间、剩余空间、使用率及挂载点,是日常排查磁盘满的核心命令。

常用用法

df -h       # 以人类可读格式(KB/MB/GB)显示,最常用
df -a       # 显示所有文件系统(包括虚拟文件系统,如/proc)
df -T       # 显示文件系统类型
df -i       # 查看inode使用情况(而非磁盘空间,inode满会导致无法创建文件)
df /root    # 查看指定目录(/root)所在文件系统的空间使用情况

示例解析

执行 df -h,输出如下:

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

注意:df查看的是“文件系统”的空间,而非单个目录的大小;若需查看目录大小,需用du命令。

5. du:查看目录/文件占用磁盘空间大小

du(disk usage)用于查看指定目录或文件占用的磁盘空间大小,与df互补(df看整体文件系统,du看局部目录/文件),常用於定位大文件/大目录。

常用用法

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,输出:

4.0G    /home/user1
8.5G    /home/user2
12.5G   /home

二、磁盘挂载与卸载命令(核心运维)

Linux中,磁盘分区、U盘、光盘等设备,必须挂载到某个目录下才能被系统访问。挂载(mount)是将设备与系统目录关联,卸载(umount)是解除关联,需root权限。

1. mount:挂载磁盘设备

基本语法

mount [选项] 设备路径 挂载点路径

常用选项与用法

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文件中配置的所有设备(开机自动挂载)

关键注意事项

2. umount:卸载磁盘设备

基本语法

umount 设备路径  # 方式1:通过设备路径卸载
umount 挂载点路径 # 方式2:通过挂载点路径卸载(更常用)

常用用法

umount /mnt/usb  # 卸载/mnt/usb挂载点的设备
umount /dev/sdb1 # 卸载/dev/sdb1设备

常见问题:卸载失败(device is busy)

原因:有进程正在访问该挂载点(如当前目录在挂载点下、有程序读取挂载点内文件)。

解决方法:

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 测试是否生效。

配置格式(每行一条记录)

设备路径/UUID  挂载点  文件系统类型  挂载选项  备份标记  自检顺序

示例配置

# 将/dev/sdb1(UUID:5a2b9c8d-xxxx-xxxx-xxxx-xxxxxxx)挂载到/mnt/data,ext4格式,开机自动挂载
UUID=5a2b9c8d-xxxx-xxxx-xxxx-xxxxxxx  /mnt/data  ext4  defaults  0  2

三、磁盘格式化命令(谨慎使用)

格式化(format)是为磁盘分区创建文件系统的过程,格式化后分区内所有数据会被彻底删除,务必谨慎操作,需root权限。常用命令有mkfs、mkswap。

1. mkfs:格式化磁盘分区(创建文件系统)

mkfs(make filesystem)是格式化的核心命令,支持多种文件系统(ext4、xfs、fat32等),语法为 mkfs.文件系统类型 设备路径

常用用法

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)是Linux系统的虚拟内存,需单独格式化(文件系统类型为swap),用mkswap命令,需root权限。

常用用法

mkswap /dev/sda2  # 将/dev/sda2分区格式化为swap格式
swapon /dev/sda2  # 启用该交换分区(临时生效)
swapoff /dev/sda2 # 关闭该交换分区

若需开机自动启用交换分区,需将其写入/etc/fstab:

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)。

常用用法

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输出)

2. dd:测试磁盘读写速度

dd命令主要用于数据备份和转换,也可用于简单测试磁盘的读写速度(无专门测试工具时可用),注意:测试会生成临时文件,需确保磁盘有足够空间。

常用用法(测试读写速度)

# 测试磁盘写入速度(生成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.iotop:实时监控磁盘I/O进程

iotop用于实时监控哪些进程占用磁盘I/O资源(读写速度、I/O使用率),直观定位导致磁盘I/O过高的进程,需root权限,需安装iotop工具。

常用用法

iotop          # 实时监控磁盘I/O进程(默认每2秒刷新1次)
iotop -o       # 仅显示正在进行I/O操作的进程(过滤空闲进程)
iotop -d 1     # 每1秒刷新1次
iotop -u root  # 仅监控root用户的进程

五、磁盘故障排查命令(应急处理)

当磁盘出现异常(如挂载失败、文件系统损坏、磁盘报错)时,需用以下命令排查和修复,需root权限,部分命令会修改磁盘数据,需谨慎。

1. fsck:修复文件系统损坏

fsck(filesystem check)用于检查和修复文件系统的损坏(如意外断电、磁盘异常导致的文件系统错误),修复前需卸载分区,否则可能导致数据丢失。

常用用法

fsck /dev/sdb1  # 检查并修复/dev/sdb1分区(ext4格式,默认自动修复轻微错误)
fsck -y /dev/sdb1  # 自动确认修复操作(无需手动输入y确认)
fsck.ext4 /dev/sdb1 # 明确指定修复ext4格式的分区(避免自动识别错误)

注意事项

2. dmesg:查看磁盘硬件报错

dmesg用于查看系统内核日志,包括磁盘硬件的报错信息(如磁盘损坏、接口松动、I/O错误),可快速定位磁盘硬件问题。

常用用法

dmesg | grep sda  # 查看sda磁盘的相关内核日志(报错信息)
dmesg | grep -i error  # 查看所有与错误相关的日志(忽略大小写)

若输出中出现“bad sector”(坏道)、“I/O error”(I/O错误),可能表示磁盘硬件损坏。

3. badblocks:检测磁盘坏道

badblocks用于检测磁盘的坏道(物理坏道/逻辑坏道),物理坏道无法修复,需标记为不可用;逻辑坏道可通过fsck修复。

常用用法

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%)

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”

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 [选项] 目标路径/设备路径

关键参数:

场景3:检测并修复磁盘文件系统损坏

1. umount /dev/sdb1  # 先卸载分区

2. fsck -y /dev/sdb1  # 自动修复文件系统错误

3. mount /dev/sdb1 /mnt/data  # 重新挂载

4. dmesg | grep sdb1  # 查看是否还有报错

七、注意事项

总结:Linux磁盘相关命令繁多,但核心围绕“查看-挂载-管理-监控-修复”五大场景。掌握本文梳理的核心命令,结合实际场景练习,即可应对绝大多数磁盘运维需求。在实际操作中,务必谨慎,避免因误操作导致数据丢失或系统异常。

以上就是从基础查看到底层运维详解Linux磁盘的相关命令的详细内容,更多关于Linux磁盘命令的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文