Ubuntu 14.04在错误消息后无法启动。无法挂载/tmp。

我最近使用WUBI安装了Ubuntu 14.04,在安装完成后,当它启动时显示了一个错误:
Serious errors were found while checking the disk drive for /. 

有三个选项:
press [I] to ignore, press [S] to skip mounting and press [M] to mount manually. 

按下 I 键后,显示出无法挂载 /tmp,我的 Ubuntu 无法启动。
  • 请问有人可以指导我如何解决这个问题吗?

@pandya 我已经看过链接了,但是答案似乎不能帮助我解决问题。 - user272877
我想通过Wubi安装,这样我可以随时轻松地删除Ubuntu。请问你能否指导我如何解决这个问题? - user272877
我使用了上述方法,效果非常好。然而,当我尝试编辑GRUB2引导项时,它会恢复到原始状态(即使在保存后)。我使用了以下命令:sudo gedit /etc/grub.d/10_lupin 我成功地进行了编辑并保存了更改(将ro改为rw)。但是在重新启动后,它又恢复到了原始的引导项。我该如何使其永久生效?非常感谢。 - user277227
天哪,这是怎么回事? - Dirk
Bug #1091792 /tmp 目录的磁盘驱动器尚未准备好或不存在。 - bain
2个回答

在Windows引导管理器中,选择Ubuntu。 按任意键进入GNU Grub2菜单。 您可以按“e”键编辑GRUB2启动项。 您需要将GRUB2启动项从“ro”更改为“rw”, 例如:
linux   /boot/vmlinuz-3.13.0-24-generic root=UUID=AAC884AC1F144321 loop=/ubuntu/disks/root.disk ro   quiet splash $vt_handoff

linux   /boot/vmlinuz-3.13.0-24-generic root=UUID=AAC884AC1F144321 loop=/ubuntu/disks/root.disk rw   quiet splash $vt_handoff

按下 F10 键,你可以启动 Ubuntu 14.04。
同时,你还可以修复 GRUB2 的启动项:
sudo vi /etc/grub.d/10_lupin

更改这行:
linux   ${rel_dirname}/${basename} root=${LINUX_HOST_DEVICE} loop=${loop_file_relative} ro ${args}

给:
linux   ${rel_dirname}/${basename} root=${LINUX_HOST_DEVICE} loop=${loop_file_relative} rw ${args}

重新生成GRUB2引导项:
sudo update-grub

好的,谢谢你的帮助。但是最后一个问题,我如何在不启动Ubuntu的情况下更改grub文件呢?因为我无法启动我的Ubuntu系统。 - user272877
  1. 在Windows启动管理器中,选择Ubuntu。
  2. 按任意键进入GNU Grub2菜单。
  3. 您可以按下“e”键在启动前编辑命令。
- user273948
在Windows启动管理器中选择“Ubuntu”后,保持按住Shift键,Grub菜单应该会出现。 - gfour
非常感谢,我的Ubuntu终于成功启动了!感谢大家的帮助。 - user272877
我用这个答案解决了问题,但是现在当我重新启动或关闭电脑后,在引导选项中选择Ubuntu之后,屏幕会变黑并且不会启动。我必须手动重启然后再次选择Ubuntu,在菜单中按下e键和F10键才能正常加载。我每次都需要按下e键->F10键才能加载Ubuntu。有什么建议吗? - Duver
您先生……是我的英雄。这个问题让我疯了,而您在这里提供的解决方案让我恢复了理智。不过,我有一个建议,在编辑GRUB文件时,可以使用sudo gedit /etc/grub.d/10_lupin而不是sudo vi /etc/grub.d/10_lupin。对我来说,这样做更好,因为我有一个更图形化的界面,更容易阅读的文本,并且我可以通过搜索功能懒散地找到} ro ${,而不必浏览很多行。再次感谢您! - The Duke Of Marshall שלום
这个解决方案真的有效,令我感到惊讶。世界上有人怎么能知道这个呢?有人可以告诉我应该从哪里开始阅读/学习,以便理解这类问题并能够解决吗?有没有什么教科书我可以读? - littleO
在Windows 8中,要找到Windows引导管理器在哪里?我也遇到了同样的问题。 - Anuj TBE
这真是救命稻草! - na-no.

临时修复方法-覆盖根.disk的初始挂载为rw(读写)而不是ro(只读)是可行的。这是在14.04安装(或升级)后启动Wubi的唯一方法。
然而,有一个更好的长期修复方法,而不是永久修改挂载为读写。最好修改循环设备创建的方式,以允许重新挂载为读写。然后,您就可以使用恢复模式。
按照以下方式修改文件/usr/share/initramfs-tools/script/local(删除一行,添加三行):
--- /home/bcbc/local   2014-11-19 20:25:12.274837304 -0800
+++ /usr/share/initramfs-tools/scripts/local   2014-11-19 20:28:37.990832807 -0800
@@ -143,7 +143,9 @@
        modprobe ${FSTYPE}

        # FIXME This has no error checking
-       mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt}
+       loopdev=`losetup -f`
+       losetup ${loopdev} "/host/${LOOP#/}"
+       mount ${roflag} -t ${FSTYPE} ${LOOPFLAGS} ${loopdev} ${rootmnt}        

        if [ -d ${rootmnt}/host ]; then
            mount -o move /host ${rootmnt}/host

更改完成后,请更新初始的RAM磁盘。
sudo update-initramfs -u

有关更多信息和修复的来源,请参见:https://code.launchpad.net/~noorez-kassam/ubuntu/utopic/initramfs-tools/fix-for-1317437/+merge/219927

注意:显然,如果在应用此修复时出现拼写错误,可能会导致安装无法启动。所以请谨慎操作。如果不确定,请使用更简单的Grub覆盖方法。确保在loopdev=行中使用`引号,而不是'引号。

如果尝试此操作遇到问题,您可以尝试以下几种方法:

  1. 如果您有多个内核,请进入恢复菜单并选择旧版本的内核(带有自己的initramfs)。
  2. 您可以在更新之前备份initramfs,然后从活动DVD/USB中将其复制到损坏的initramfs上。
  3. 您可以在chroot中重新构建initramfs,但这需要一些复杂的步骤。
如果是全新安装的话,重新安装是您最好的选择。

和你一样,我也在努力寻找一个更好的长期解决方案来解决这个问题。尝试了你的方法,但重新启动后出现了很多错误,其中一些指示缺少像/etc/fstab这样的文件。可能是我打错了字,不过有没有可能'losetup'找到的第一个未使用的循环设备与预期的不同?我应该使用/dev/loop0吗?目前,我已经应用了更简单的Grub覆盖方式。 - Bill
@Bill 我猜可能是打错了。如果你把你的代码放在pastebin上并且发链接给我,我会帮你看一下。 - bcbc
非常感谢bcbc。不幸的是,我无法pastebin原始代码,因为我最终卸载并重新安装了五笔输入法。然而,我会将我打算用来重新创建initramfs的当前代码pastebin出来。这是链接:http://pastebin.com/bRKc9fdL - Bill
@Bill,那看起来不错。 - bcbc
3引用使徒行传8:8 - 那座城里大有欢喜...那个晚上,图鲁皮斯家也是如此...!谢谢你的帮助bcbc。问题解决了。最后还是可能只是个打字错误!不过要注意的是,我必须将代码部分复制粘贴到最新版本的/usr/share/initramfs-tools/script/local中,因为自从我发表原始评论以来它已经被修改过了。否则,它就像魔法一样运行!当然,在将受影响的/etc/grub.d/10_lupin行改回只读之后。再次感谢你的帮助! - Bill
@Bill 太好了!不客气。你的经历确实突显了尝试修复的风险。我会在我的回答中添加一些建议来解决这个问题。 - bcbc
+1 这是我首选的解决方案,因为它是长期的,不应该破坏恢复设置。谢谢! - Warrick