linux设备名变化/etc/fstab无法挂载导致Give root password for maintenance解决

linux设备名变化/etc/fstab无法挂载导致Give root password for maintenance解决
内容目录

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再进行挂载。


Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注