原标题:Linux磁盘管理和挂载磁盘
直接查询某个目录挂在哪个磁盘分区了:
findmnt
或者查看某个目录:
findmnt /home
findmnt /var
findmnt /boot/efi
甚至可以查看一个具体文件:
df-h /home/user/file.txt
它会告诉你:
Filesystem Mounted on
/dev/sdb1 /home
因此,虽然目录树看起来统一,但系统始终知道每个路径最终落在哪个挂载点上。
磁盘 (Disk)
物理硬盘(HDD/SSD)或虚拟磁盘(云盘、虚拟机磁盘)在 Linux 里被识别为设备文件,比如 /dev/sda、/dev/nvme0n1。
一块磁盘可以分成多个分区(/dev/sda1、/dev/sda2…),每个分区可以格式化成一个文件系统(ext4、xfs、ntfs 等)。
磁盘本身只是“存储空间”,要用它必须先挂载(mount)到目录树的某个位置。
df(disk free)
查看已挂载文件系统的磁盘空间使用情况(总量、已用、剩余、挂载点)。
df -h # -h 表示人类可读单位(G/M)
du(disk usage)
查看文件或目录实际占用的磁盘空间,常用来找出哪个目录占用空间大。
du -sh /path/to/dir # -s 汇总,-h 人类可读
du -sh /path/to/dir/* # 看子目录各占多少
区别:df 看的是整个文件系统的空间;du 看的是某个目录/文件树的空间,两者有时对不上(比如文件被删除但进程还占着句柄)。
mount
把一个存储设备(或分区、镜像、网络共享)“挂”到文件系统树的某个目录(挂载点)上,之后访问这个目录就等于访问这个设备。
mount /dev/sdb1 /mnt/data
mount -t ext4 /dev/sdb1 /mnt/data # 指定文件系统类型
不挂载的话,即使磁盘接上了,系统也不知道该用哪个目录来访问它。
umount
卸载,即解除挂载关系,让目录和设备分离,之后设备可以安全拔出/断开。
umount /mnt/data
如果提示 “device is busy”,说明有进程正在使用该目录下的文件,需要先结束占用(lsof +D /mnt/data 或 fuser -m /mnt/data 排查)。
lsblk(list block devices)
列出系统里所有块设备(磁盘、分区)及其层级关系、大小、挂载点。
lsblk
lsblk -f # 加上文件系统类型和 UUID
blkid
显示每个块设备的属性:文件系统类型(TYPE)、UUID、标签(LABEL)等。
blkid
blkid /dev/sdb1
为什么可以把任意硬盘挂载到 /mnt/data
/mnt/data 只是一个普通空目录,不是特殊路径。Linux 的挂载机制是:任何目录都可以作为“挂载点”,挂载操作发生后,内核会把该目录原来的内容“隐藏”,改为呈现被挂载设备文件系统的内容。/mnt 只是约定俗成用来放临时挂载点的地方,本质上你也可以挂载到 /home/foo/whatever,效果一样。只要:
- 目录存在(可以为空,也可以非空,非空的话内容会被临时遮住)
- 有权限执行 mount(一般需要 root 或 sudo)
- 设备上有内核认识的文件系统
就能挂载。这是 Linux “一切皆文件、统一目录树”设计的体现——不像 Windows 用盘符(C:、D:)区分磁盘,Linux 把所有存储都无缝拼接进同一棵目录树。
UUID 是什么
UUID(Universally Unique Identifier)是格式化文件系统时生成的一个全局唯一标识符,例如:
a1b2c3d4-e5f6-7890-abcd-ef1234567890
作用:设备名(/dev/sda1)会因为插拔顺序、硬件变动而改变,但 UUID 是固定绑定在文件系统上的,不会变。所以 /etc/fstab 里写挂载配置时通常用 UUID 而不是 /dev/sdaX,避免重启后盘符错位导致挂错盘。
# /etc/fstab 示例
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data ext4 defaults 0 2
注意:
umount前如果有进程占用会失败,强制umount -l(懒卸载)可能导致数据未写完就断开,有丢数据风险。- 挂载点如果不是空目录,原内容会被遮住,卸载后又会重新出现,容易造成“文件消失了”的误判。
/etc/fstab写错 UUID 或选项可能导致系统开机时卡在紧急模式(emergency mode)。- 跨云迁移(如腾讯云→阿里云)时,磁盘 UUID 可能重复或冲突,需要注意。
如果这篇文章对你有帮助,点个赞吧。

