内容目录
1.原因
一台vmware虚拟机
经常重启后分区设备名混乱sdb1变sda1 sda1变sdb1,跟/etc/fstab设备名不一样无法挂载
然后机器启动提示Give root password for maintenance
oot@ubuntuserver1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 78G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 78G 0 lvm /
sdb 8:16 0 500G 0 disk
└─sdb1 8:17 0 500G 0 part
root@ubuntuserver1:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-308gHwRttslXEneBg7mgsHimmBG6OpGMqzfSkFMHdNpbDp9i2Jj8bB2YqpK8ROjG / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/115838b1-f215-4ce0-83bf-42e3694a76cd /boot ext4 defaults 0 1
#/swap.img none swap sw 0 0
/dev/sda1 /www ext4 defaults 0 2
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0
2. 解决方案:uuid挂载
✅ 使用 UUID=
挂载的稳定性说明
不会混乱,只要满足以下条件,UUID 是最稳定的挂载方式之一:
🎯 为什么 UUID 不会混乱:
- UUID 是文件系统的唯一标识符,创建(格式化)文件系统时自动生成;
- 与设备名(如
/dev/sda1
、/dev/sdb1
)无关,无论设备顺序如何变化,只要是那个分区,UUID 就不会变; - 所以就算你重启、热插拔磁盘、虚拟机关机重启导致设备顺序改变,只要挂载时使用
UUID=xxxx
,系统就能准确挂载到正确设备。
📌 什么时候 UUID 会变:
只有以下几种情况 UUID 才会改变:
情况 | 是否会改变 UUID |
---|---|
你格式化了分区(例如 mkfs.ext4 ) |
✅ 会改变 |
你用 tune2fs -U random 改过 UUID |
✅ 会改变 |
改变挂载顺序或设备名(如 sda ↔ sdb) | ❌ 不会改变 |
复制磁盘镜像(比如 clone 了一个磁盘) | ✅ 会产生重复 UUID,需手动修改 |
🛡️ 建议:
- 用
UUID
是 推荐做法,尤其是系统盘外的挂载分区; - 如果你有多个类似磁盘,也可以考虑
PARTUUID
(分区级别标识符); - 最忌讳的是依赖
/dev/sdX
这种不稳定设备名,尤其是虚拟机中。
✅ 实战操作:
blkid
# 找到你要挂载的分区 UUID,或用设备名直接查询 blkid /dev/sdb1
# 编辑 /etc/fstab
UUID=xxxx-xxxx /mnt/data ext4 defaults 0 2
#挂载
systemctl daemon-reload
mount -a
如你想进一步防止“复制虚拟机后 UUID 冲突”等问题,也可以通过以下命令修改 UUID:
sudo tune2fs -U random /dev/sdb1
然后重新 blkid
获取新 UUID,更新进 /etc/fstab
再进行挂载。