Linux 磁盘与存储命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第⑥族:磁盘与存储,约 26 个命令。磁盘是"容量"和"性能"两条线交汇的地方——容量满了服务直接写不进去,性能差了整个系统跟着卡。这一族管的是容量侧:看空间、挂设备、做分区、修文件系统。性能侧(IOPS、等待、吞吐)见 tools/disk 与 性能观测与调试,LVM 与文件系统进阶见 文件系统与 LVM。
一、容量与占用
"磁盘满了"是个高频故障,但排查起来有个反直觉的地方:df 说满了,du 加起来却对不上。这通常是因为有文件被删除了但仍被某个进程持有(文件句柄没关),空间并未真正释放。用 lsof | grep deleted 能找到这些"幽灵文件",重启对应进程即可回收。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| df | 显示文件系统的空间使用情况 | df -h(人类可读);df -i(inode 使用情况);df -T(含文件系统类型);df -h --total(汇总);df -x tmpfs -h(排除内存文件系统) |
| du | 统计目录或文件的磁盘占用 | du -sh /var/log(总计);du -h --max-depth=1 /var(只看到一级子目录);du -ah | sort -rh | head -20(找出最大的文件);du -sh *(当前目录各项) |
lsblk | 以树状显示块设备(磁盘、分区)及其关系 | lsblk;lsblk -f(含文件系统类型、UUID、挂载点);lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT(自定义列) |
blkid | 查看块设备的 UUID、文件系统类型与卷标 | blkid;blkid /dev/sda1;blkid -o list(列表形式) |
除了空间用满,inode 用尽是另一个常见陷阱:
df -h显示还有空间,但df -i显示 100%,此时新建文件会报 "No space left on device"。小文件特别多的场景(邮件、缓存、容器镜像层)容易触发。另外 df 看的是文件系统级别,du 统计的是文件占用,两者对不上时优先怀疑被删除但仍被进程打开的文件。
二、挂载与卸载
Linux 用统一的目录树组织所有存储,所谓"挂载"就是把一个块设备接到目录树的某个节点(挂载点)上。/etc/fstab 记录开机时要自动挂载哪些设备——推荐用 UUID 而不是设备名(/dev/sdb1),因为设备名在加了新盘或重启后可能变化,而 UUID 是写进文件系统里的、不会变。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| mount | 挂载文件系统 | mount /dev/sdb1 /mnt/data;mount -o ro /dev/sdb1 /mnt(只读挂载,排查用);mount -a(挂载 /etc/fstab 里的全部条目,改完 fstab 必测);mount --bind /src /dst(把目录挂到另一处);mount -t nfs host:/path /mnt |
| umount | 卸载文件系统 | umount /mnt/data(也可写设备名);umount -l /mnt(懒卸载,设备忙时的救急手段);umount -f(强制,网络文件系统用) |
| findmnt | 查看当前的挂载树,比 mount 输出清晰 | findmnt;findmnt -T /path(查某个路径属于哪个挂载点);findmnt -t ext4,xfs(按类型过滤) |
| fuser | 查看占用文件或挂载点的进程,卸载失败时的排查工具 | fuser -mv /mnt/data(列出占用的进程);fuser -k /mnt/data(杀掉占用进程,谨慎) |
umount 报 "target is busy" 是日常最常见的卡点。先用
fuser -mv /mnt或lsof +D /mnt找出是谁在占用——通常是有 shell 的当前目录还在挂载点里,或者某个服务还在写日志。实在等不及就umount -l(等没人用的时候再真正卸载)。改/etc/fstab后务必先mount -a测试,否则配置写错可能导致下次开机进不了系统。
三、分区与格式化
分区是把一块物理盘切成几块,格式化是在分区上建立文件系统(写入文件系统元数据)。这两步都会销毁原有数据,是整族命令里最危险的部分——操作前至少确认三遍设备名。
| 命令 | 作用 | 常用示例 |
|---|---|---|
fdisk | 经典的分区工具(交互式,MBR 为主,新版也支持 GPT) | fdisk /dev/sdb(进入后 n 新建、p 打印、d 删除、w 写入、q 不保存退出);fdisk -l(列出所有磁盘分区) |
parted | 支持 GPT 与 MBR 的分区工具,适合大容量盘(>2TB) | parted -l(列出);parted /dev/sdb mklabel gpt(建 GPT 分区表);parted -s /dev/sdb mkpart primary 0% 100%(脚本化,一条命令建满盘分区) |
partprobe | 通知内核重读分区表,分区后不用重启就能看到新分区 | partprobe;partprobe /dev/sdb |
mkfs | 创建文件系统(格式化) | mkfs.ext4 /dev/sdb1;mkfs.xfs /dev/sdb1;mkfs.vfat /dev/sdb1(FAT32,U 盘用);mkfs -t ext4 -L DATA /dev/sdb1(带卷标) |
mkswap | 把分区或文件初始化为 swap 空间 | mkswap /dev/sdb2;mkswap /swapfile |
危险提示:分区与格式化会不可逆地销毁数据。操作前用
lsblk -f确认设备名、大小和现有文件系统,核对 UUID 与挂载点,确保操作的确实是目标盘。生产环境强烈建议先备份。云主机加盘后,新盘通常要partprobe一下才能在/dev下看到分区。
四、swap 管理
swap(交换空间)是磁盘上划出的一块区域,当物理内存不足时,内核会把不常用的内存页换出到这里,避免直接 OOM 杀进程。它是内存不足时的缓冲垫,但磁盘比内存慢几个数量级,所以 swap 用得多意味着系统在"挣扎"而不是"健康"。
| 命令 | 作用 | 常用示例 |
|---|---|---|
swapon | 启用 swap 设备或文件 | swapon --show(查看当前 swap 概况);swapon /swapfile;swapon -a(启用 fstab 里所有 swap) |
swapoff | 停用 swap,把数据换回内存 | swapoff /swapfile;swapoff -a(全部停用,清缓存前常用) |
| free | 查看内存与 swap 使用 | free -h(看 Swap 行);free -m(MB 单位) |
创建 swapfile 的标准流程:
dd if=/dev/zero of=/swapfile bs=1M count=2048(或更快fallocate -l 2G /swapfile)→chmod 600 /swapfile→mkswap /swapfile→swapon /swapfile→ 把/swapfile none swap sw 0 0写进/etc/fstab。vm.swappiness参数控制内核使用 swap 的倾向,取值 0~100,数据库服务器通常调低(如 1~10)。
五、检查与修复
| 命令 | 作用 | 常用示例 |
|---|---|---|
fsck | 文件系统检查与修复的前端,会自动调用对应类型的检查工具 | fsck /dev/sdb1(必须先卸载);fsck -f(强制检查);fsck -y(自动回答 yes);fsck -N(只显示会做什么,不真执行) |
e2fsck | ext2/3/4 专用的检查修复工具 | e2fsck -f /dev/sdb1;e2fsck -p(自动修复安全的问题) |
smartctl | 读取磁盘 S.M.A.R.T. 健康信息,提前发现硬盘故障 | smartctl -H /dev/sda(健康总评);smartctl -a /dev/sda(全部属性);smartctl -t long /dev/sda(启动长测试);smartctl -l error /dev/sda(错误日志) |
badblocks | 检测磁盘坏块(耗时很长,且对已写入数据的盘有风险) | badblocks -sv /dev/sdb(只读检测);badblocks -n -v /dev/sdb(非破坏性读写检测) |
硬盘故障是有征兆的:
smartctl -H报 FAILED、或者-a输出里Reallocated_Sector_Ct(重映射扇区数)持续增长,都说明盘在恶化,应尽快换盘。定期检查可以配置smartd守护进程自动发告警。注意:XFS 文件系统没有 fsck,它靠日志保证一致性,真需要修复时用xfs_repair(见 文件系统与 LVM)。
六、底层操作
| 命令 | 作用 | 常用示例 |
|---|---|---|
sync | 把内核缓冲区里的脏数据刷入磁盘,确保数据真正落盘 | sync(关机、拔盘前执行);sync; sync(重要操作前后多刷一次) |
| dd | 块级复制与转换,能直接读写设备 | dd if=/dev/sda of=/dev/sdb bs=4M status=progress(整盘克隆);dd if=/dev/zero of=/swapfile bs=1M count=2048(造文件);dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress(做启动盘);dd if=/dev/sda of=/dev/null bs=1M(测读取速度) |
losetup | 把文件关联成回环设备,从而能挂载磁盘镜像 | losetup -f(找空闲的 loop 设备);losetup /dev/loop0 disk.img;losetup -a(列出);losetup -d /dev/loop0(解除) |
resize2fs | 调整 ext 文件系统的大小(lvextend 之后必须跑) | resize2fs /dev/sdb1(扩展到分区的全部空间);resize2fs -M /dev/sdb1(缩到最小,缩容第一步) |
tune2fs | 调整 ext 文件系统的参数 | tune2fs -l /dev/sdb1(查看超级块信息);tune2fs -c 0 /dev/sdb1(关闭按挂载次数强制检查);tune2fs -m 1 /dev/sdb1(预留空间改为 1%) |
fstrim | 向 SSD 下发 TRIM 指令,告知哪些块可回收,维持长期写入性能 | fstrim -v /(对根分区执行);fstrim -av(所有支持的文件系统);systemctl status fstrim.timer(多数发行版已配定时任务) |
dd 被戏称为 "disk destroyer" 不是没有原因的:
if(输入文件)和of(输出文件)写反一个字母,就是把空数据覆盖到你的系统盘上。用之前务必核对三次,推荐加上status=progress看进度。测磁盘真实性能用专门的 iostat 或 fio,别拿 dd 的结果当性能基准——它受缓存影响很大。
一句话总结
磁盘与存储速查:看容量用 df -h/du -sh(对不上就查 lsof | grep deleted,别忘了 df -i),看设备用 lsblk -f,挂卸载用 mount/umount(busy 就用 fuser -mv 找占用),分区格式化用 fdisk/parted/mkfs(先确认设备名),swap 用 swapon/swapoff,体检用 smartctl/fsck,SSD 记得 fstrim——26 个命令覆盖容量管理到故障预防的全链路。