本文目标:理解挂载概念,熟练掌握 `mount` 命令,配置 `/etc/fstab` 实现开机自动挂载。上回我们给虚拟机添加了新硬盘,分区、格式化,然后用 `mount` 命令挂载到目录上。但很多人第一次接触“挂载”这个词时都会懵:为什么不是像 Windows 那样自动出来一个 D 盘?今天我们就来彻底搞懂 Linux 的挂载哲学。
一、Windows 的“分列式” vs Linux 的“树状一体化”
在 Windows 中,每个分区独立存在:C盘、D盘、E盘,各管各的。U盘插上就多一个 F盘,拔了就消失。
而 Linux 采用的是 单一目录树 架构,只有一个根 /。所有分区、U盘、光盘都不是独立的“盘符”,而是以目录的形式嫁接在目录树的某个枝桠上。这个“嫁接”的动作,就叫 挂载(mount)。
打个比方:
二、挂载的入口:挂载点(Mount Point)
挂载点本质上就是一个空目录。你把设备(如分区 /dev/sdb1)挂载到这个空目录上之后,往这个目录里存放的所有文件,实际上就存到了该分区里。
关键规则:
挂载点必须是已存在的目录。
最好使用空目录。如果目录原本有文件,挂载后这些文件会被暂时“隐藏”,直到你卸载该分区才重新出现。
一个目录只能挂载一个设备。一个设备可以挂载到多个目录上(但一般没必要)。
查看当前挂载情况:
df -h# 人类可读的方式显示挂载信息mount # 显示所有挂载详情(输出很长)lsblk # 树形显示块设备及其挂载点
三、mount 命令详解
基本挂载
mount 设备 挂载点
例如:
sudo mount /dev/sdb1 /mnt/part1
卸载
sudo umount 设备# 或sudo umount 挂载点
注意是 umount 不是 unmount。卸载前,确保没有进程正在使用该目录,否则会报 target is busy。
常用挂载选项(-o 指定)
# 以只读方式挂载sudo mount -o ro /dev/sdb1 /mnt/part1# 允许执行程序(默认)sudo mount -o exec /dev/sdb2 /mnt/part2# 不允许执行(安全加固)sudo mount -o noexec /dev/sdb2 /mnt/part2# 挂载 NTFS 格式的 U盘(需要 ntfs-3g)sudo mount -t ntfs-3g /dev/sdc1 /mnt/usb
-t 指定文件系统类型,一般 Linux 能自动识别。
四、开机自动挂载:/etc/fstab
mount 命令实现的挂载是临时的,重启就没了。想让系统每次开机都自动挂载分区,需要写入配置文件 /etc/fstab(File System Table)。
fstab 文件格式
每一行记录一个设备,有 6 个字段:
设备 挂载点 文件系统类型 挂载选项 dump pass
示例:
/dev/sdb1 /mnt/part1 ext4 defaults 0 2
字段解释:
设备:可以是 /dev/sdb1,也可以用 UUID(推荐,因为设备路径可能变化)。
挂载点:你准备的目录,如 /mnt/part1。
文件系统类型:如 ext4, xfs。
挂载选项:常用 defaults(默认), ro(只读), noauto(不自动挂载)等。
dump:备份标志,0 表示不备份。
pass:开机 fsck 检查顺序,0 不检查,1 给根分区 /,2 其他。
实战:让 /dev/sdb1 开机自动挂载
第一步:查看分区的 UUID
bash
sudo blkid /dev/sdb1
输出类似:
/dev/sdb1: UUID="a1b2c3d4-..." TYPE="ext4"
复制那一串 UUID。
第二步:编辑 /etc/fstab
bash
sudo nano /etc/fstab
在文件末尾添加一行:
UUID=a1b2c3d4-... /mnt/part1 ext4 defaults 0 2
保存并退出(Ctrl+O 回车,Ctrl+X)。
第三步:测试挂载(不重启验证)
# 先卸载sudo umount /mnt/part1# 根据 fstab 重新挂载所有文件系统sudo mount -a# 检查df -h | grep sdb1
如果没报错且能看到挂载,说明配置正确。以后每次开机都会自动挂载。
五、场景扩展:U盘的挂载
当你插入一个 U盘,Ubuntu 桌面版通常会自动挂载到 /media/用户名/U盘卷标 下。但在纯服务器版系统中,你可能需要手动挂载。
# 1. 查看 U盘设备名(假设 sdc)lsblk# 2. 创建挂载点sudo mkdir /mnt/usb# 3. 挂载(假设是 NTFS 格式)sudo mount -t ntfs-3g /dev/sdc1 /mnt/usb# 4. 用完后卸载sudo umount /mnt/usb
拔 U盘前一定要卸载,否则可能丢数据。
🎯 动手练一练
将上篇创建的 /dev/sdb1 和 /dev/sdb2 卸载,再重新挂载。
用 blkid 获取两个分区的 UUID。
编辑 /etc/fstab,让两个分区分别自动挂载到 /mnt/part1 和 /mnt/part2。
执行 sudo mount -a 测试,没有报错则重启虚拟机验证是否自动挂载。
(可选)找一个U盘插入电脑,在 VMware 中将U盘连接到虚拟机,观察 lsblk 的变化,手动挂载并查看内容。
💬 留言互动
第一次听到“挂载”这个词,你脑子里浮现的画面是什么? 是给圣诞树挂礼物,还是给墙上挂衣服?来评论区分享你的脑洞解释,帮助更多同学理解!
第二阶段结束语: 恭喜你完成了“文件与磁盘”模块的修炼!从文件的增删改查,到权限精控,再到磁盘分区和挂载,你已经掌握了 Linux 磁盘管理的核心。下一阶段我们将进入 Shell 编程 的殿堂,从命令行配置开始,逐步写出自己的自动化脚本!