1703 字
9 分钟
磁盘挂载笔记
Linux 磁盘挂载笔记(/dev/vdb 20G)
环境信息
- 系统:Ubuntu(腾讯云轻量服务器)
- 数据盘:
/dev/vdb— 20 GiB - 系统盘:
/dev/vda— 40 GiB
前置概念
一个物理磁盘可以有 两种状态:
| 状态 | 说明 | 示例 |
|---|---|---|
| 裸盘(无分区表) | 整个磁盘直接格式化,没有分区 | /dev/vdb |
| 分区盘(有分区表) | 磁盘上有分区表(DOS/GPT),数据在分区里 | /dev/vdb1(vdb 的分区) |
核心规则:挂载时用分区,不要挂裸盘。
/dev/vdb ← 磁盘设备(不能直接挂载) └── /dev/vdb1 ← 分区设备(挂载它)遇到的坑
坑 1:挂错了,挂到裸盘而不是分区
fdisk -l 显示有分区表,但挂载时用了 /dev/vdb 而不是 /dev/vdb1。
错误做法:
ubuntu@VM-0-10-ubuntu:~ $ sudo mount /dev/vdb /mnt/data # ❌ 挂裸盘正确做法:
ubuntu@VM-0-10-ubuntu:~ $ sudo mount /dev/vdb1 /mnt/data # ✅ 挂分区坑 2:格式化提示”正在被系统使用”
两种原因都会导致这个报错:
原因 A — 裸盘/分区被挂载了:
ubuntu@VM-0-10-ubuntu:~ $ sudo umount /dev/vdb # 卸载占用ubuntu@VM-0-10-ubuntu:~ $ sudo mkfs.ext4 /dev/vdb1 # 再格式化原因 B — fstab 里有旧的 UUID 条目,mount -a 会把旧的也挂上。检查 /etc/fstab 清理掉无效的旧条目。
坑 3:用 fdisk 对已挂载的磁盘创建分区表
这是本次最大的教训。磁盘 /dev/vdb 已经格式化并挂载了,用户又用 fdisk 在上面创建分区表 + 分区:
ubuntu@VM-0-10-ubuntu:~ $ sudo fdisk /dev/vdb # ⚠️ 磁盘已挂载!fdisk 已经警告了fdisk 会警告:
该磁盘目前正在使用 - 不建议您重新分区。推荐您卸载此磁盘上所有的文件系统。强行操作后:
- 已有的文件系统签名变脏,
mkfs拒绝格式化 - 旧挂载和新分区互相冲突,
mount /dev/vdb1报”已经挂载或挂载点忙” - 必须
sudo umount /dev/vdb解除裸盘挂载后,才能操作分区
教训:永远不要对已挂载的磁盘执行 fdisk/parted 等分区操作。先 umount,再分区,再用 partprobe 刷新分区表。
坑 4:fstab 多个重复/冲突条目
多次尝试后 fstab 里堆了多条记录:
UUID=旧UUID /root/data/disk ext4 defaults 0 0 ← 第一次挂裸盘UUID=旧UUID /home/ubuntu/data ext4 defaults 0 2 ← 第二次挂裸盘(同 UUID 不同挂载点)重新格式化后 UUID 变了,旧条目指向已不存在的文件系统,mount -a 静默失败。
解决方法:定期清理 fstab,只保留有效的条目。同个磁盘 UUID 不能出现在多条记录里。
完整挂载步骤
第一步:确认磁盘状态
# 查看所有磁盘和分区ubuntu@VM-0-10-ubuntu:~ $ sudo fdisk -l
# 查看是否有文件系统/UUIDubuntu@VM-0-10-ubuntu:~ $ sudo blkid /dev/vdbubuntu@VM-0-10-ubuntu:~ $ sudo blkid /dev/vdb1 # 如果 vdb 有分区表,看分区结果判断:
| 输出 | 含义 | 下一步 |
|---|---|---|
blkid /dev/vdb 有 UUID | 裸盘已格式化 | 直接挂 /dev/vdb,或分个区再挂 |
blkid /dev/vdb 有 PTUUID | 有分区表 | 挂 /dev/vdb1 |
blkid /dev/vdb 无输出 | 空盘 | 跳到第二步 |
blkid /dev/vdb1 有 UUID | 分区已格式化 | 直接挂 /dev/vdb1 |
blkid /dev/vdb1 无 UUID | 分区未格式化 | 跳到第二步 |
第二步:创建分区(可选但推荐)
如果磁盘是空的,先分区再格式化的管理更灵活:
ubuntu@VM-0-10-ubuntu:~ $ sudo fdisk /dev/vdb #使用磁盘分区管理工具fdisk 对/dev/vdb 硬盘进行操作
欢迎使用 fdisk (util-linux 2.39.3)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。
设备不包含可识别的分区表。 创建了一个磁盘标识符为 0x465eb145 的新 DOS(MBR)磁盘标签。
命令(输入 m 获取帮助): n #`n` = new,新建分区 分区类型 p 主分区 (0个主分区,0个扩展分区,4空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p): p #`p` primary:主分区,Linux数据盘直接用主分区即可 分区号 (1-4, 默认 1): 1 #第一块主分区编号1,直接回车使用默认值 第一个扇区 (2048-41943039, 默认 2048): #2048是标准对齐扇区,保证磁盘读写性能,不要修改 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): #默认占用磁盘全部剩余空间,完整20G分给 `/dev/vdb1`
创建了一个新分区 1,类型为“Linux”,大小为 20 GiB。 分区 #1 包含一个 ext4 签名。
您想移除该签名吗? 是[Y]/否[N]: y #之前裸盘直接格式化过vdb,磁盘残留旧文件系统标识; #输入 `y` 清除旧ext4,避免新旧文件系统冲突、挂载报错。
写入命令将移除该签名。
命令(输入 m 获取帮助): w #`w` = write,把刚才所有分区操作写入磁盘永久生效 分区表已调整。 将调用 ioctl() 来重新读分区表。 正在同步磁盘。
ubuntu@VM-0-10-ubuntu:~ $ sudo partprobe # 刷新分区表⚠️ 分区前务必确认磁盘没有被挂载:
df -h | grep vdb无输出再操作。
第三步:格式化
# 裸盘无分区ubuntu@VM-0-10-ubuntu:~ $ sudo mkfs.ext4 /dev/vdb
# 有分区ubuntu@VM-0-10-ubuntu:~ $ sudo mkfs.ext4 /dev/vdb1 mke2fs 1.47.0 (5-Feb-2023) 创建含有 5242624 个块(每块 4k)和 1310720 个 inode 的文件系统 文件系统 UUID:951370a1-59e5-4dcc-b51a-001fbdb6ec2b 超级块的备份存储于下列块: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000
正在分配组表: 完成 正在写入 inode表: 完成 创建日志(32768 个块): 完成 写入超级块和文件系统账户统计信息: 已完成💡 如果报”正在被系统使用”,先
sudo umount /dev/vdb(或umount /dev/vdb1)解除占用。
第四步:创建挂载点
ubuntu@VM-0-10-ubuntu:~ $ sudo mkdir -p /mnt/data第五步:挂载
#挂载到/mnt/dataubuntu@VM-0-10-ubuntu:~ $ sudo mount /dev/vdb1 /mnt/data
#重新加载所有单元配置,同步最新的 /etc/fstabubuntu@VM-0-10-ubuntu:~ $ sudo systemctl daemon-reload第六步:验证
ubuntu@VM-0-10-ubuntu:~ $ df -h /mnt/data输出示例:
文件系统 大小 已用 可用 已用% 挂载点/dev/vdb1 20G 24K 19G 1% /mnt/data第七步:开机自动挂载
# 查 UUIDubuntu@VM-0-10-ubuntu:~ $ sudo blkid /dev/vdb1# UUID=a8454183-3cfc-4a78-bef4-919e239e01f6
# 追加到 /etc/fstabubuntu@VM-0-10-ubuntu:~ $ echo 'UUID=a8454183-3cfc-4a78-bef4-919e239e01f6 /mnt/data ext4 defaults 0 2' | sudo tee -a /etc/fstab⚠️ 修改 fstab 后检查:
Terminal window ubuntu@VM-0-10-ubuntu:~ $ sudo mount -a # 测试是否报错ubuntu@VM-0-10-ubuntu:~ $ cat /etc/fstab | grep vdb # 确认没有重复条目
第八步:创建软连接(可选)
ubuntu@VM-0-10-ubuntu:~ $ mkdir -p ~/dataubuntu@VM-0-10-ubuntu:~ $ ln -s /mnt/data ~/data之后 cd ~/data 等价于 cd /mnt/data。
问题排查速查表
| 现象 | 原因 | 解决 |
|---|---|---|
mount: 已经挂载或挂载点忙 | 裸盘在同一个挂载点被占用了 | sudo umount /dev/vdb 后再试 |
mkfs: 正在被系统使用 | 磁盘已挂载或 fstab 里有旧条目 | umount + 清理 fstab 重复条目 |
blkid /dev/vdb1 只有 PARTUUID | 分区创建了但没格式化 | sudo mkfs.ext4 /dev/vdb1 |
fstab 改了但 df -h 不生效 | systemd 缓存了旧 fstab | sudo systemctl daemon-reload |
| 多个相同 UUID 的 fstab 条目 | 之前多次操作残留 | 删掉多余的,只保留一条 |