警报!/dev/disk/by-uuid/xxxxxxxxx 不存在。掉到壳

Mar*_*cin 30 boot grub2 initramfs boot-repair 14.04

我正在使用 Ubuntu 14.04。

我跑在终端sudo apt-get update。然后我重新启动了系统。现在我看到:

ALERT! /dev/disk/by-uuid/xxxxxxxxx does not exist. Dropping to a shell
initramfs:_
Run Code Online (Sandbox Code Playgroud)

我无法从 USB 闪存驱动器启动 LIVE Ubuntu。是的,我仔细检查了 BIOS 设置,USB 闪存驱动器正常并且可以在另一台机器上运行。现在我打算买一张 DVD 并从另一台笔记本电脑上刻录 Live DVD。

sudo blkid 给我:

/dev/loop0: TYPE="squashfs"  
/dev/sda1: UUID="xxxx" TYPE="ext4"   
/dev/sr0: LABEL="Ubuntu 14.04.1 LTS i386" TYPE="iso960"   
Run Code Online (Sandbox Code Playgroud)

/etc/fstab有相同的UUID="xxxx",有一行:

errors=remount-ro 0   
Run Code Online (Sandbox Code Playgroud)

我尝试使用引导修复,但我仍然无法登录到 Ubuntu。

我不想重新安装 Ubuntu,因为我那里有很多数据。

你有什么建议可以解决这个问题吗?

Mar*_*cin 30

解决方案是从 liveDVD 执行这些命令,它允许我从那个 liveDVD 在我的 sda1 上做事情(据我所知)

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
update-initramfs -u
update-grub
reboot
Run Code Online (Sandbox Code Playgroud)

我在 ubuntu pl 论坛上的一个朋友帮我解决了这个问题。

他发现 initramfs 中可能有错误,应该作为内核更新的一部分进行更新。如果在更新期间出现任何问题,可能会发生像我这样的问题。

  • 好帖子。我想补充一点,Ubuntu 不一定安装在 `sda1` 上。要帮助确定它的安装位置,请运行 `sudo fdisk -l`。假设您知道将 Ubuntu 安装到哪个硬盘驱动器,那么该命令应该可以帮助您确定哪个 sd* 映射到该驱动器。 (8认同)
  • 我收到“警告:缺少 /lib/modules/4.2.0-16-generic”,因为 LiveCD 有不同的内核版本。所以我已经挂载了 `tmp`、`lib` 和 `lib64`,然后一切正常。 (3认同)

MGo*_*dby -1

如果人们愿意的话,他们可能会对此皱眉,但我发现使用“ /dev/sdX”对我来说比我个人系统的 UUID 更可靠。在企业环境中,我会投入更多精力使其与 UUID 而不是“/dev/”地址一起使用,但您应该安全地使用/dev/sdaXin/etc/fstab而不是 UUID 引用,至少能够在您启动系统时启动系统。继续寻找尽管 /etc/fstab 中有正确的 UUID 但启动失败的确切原因的答案。

如果您想走这条路线,请使用以下过程:

  1. 启动到恢复 shell 或启动到实时 USB 驱动器或 CD

  2. 挂载无法启动的系统分区

  3. 以 root 身份编辑/etc/fstab步骤 2 中提到的系统分区中的文件,并在所有相关条目中替换UUID=XXXXX为相应的标签。/dev/sdX/etc/fstab

注意:据我所知,此过程对于 Ubuntu 和 Ubuntu 衍生发行版来说是可靠的(截至撰写本文时;这很容易随着任何即将发布的版本而改变)。我知道它对于某些其他发行版(例如 knoppix 或 Arch Linux)无法可靠地工作(这是由于 UDEV 扫描设备并在 /dev 文件系统中为它们命名的方式存在差异)。如果您使用的是非 Ubuntu 衍生发行版,请不要使用此方法,否则后果自负。

  • 您的方法是旧方法,出于相当好的原因而被替换,主要是驱动器编号不是恒定的,并且可能从意外的驱动器启动。这对于 UUID 来说是不可能的。但我经常使用“LABEL=___”格式,只是因为这样可以更清楚地立即看出是什么。示例:`LABEL=data_partition`。 (6认同)