我有一台 Ubuntu 11.10 VM,刚刚升级到 12.04。安装顺利,但现在使用 3.2.0 内核,启动时失败,
Gave up waiting for root device.
...
ALERT! /dev/mapper/uvm-root does not exist. Dropping to a shell!
如果我使用以前的内核启动,Linux uvm 3.0.0-17-server #30-Ubuntu SMP Thu Mar 8 22:15:30 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
一切都会正常。在以前的内核中,我已按照此处所述手动启用了 hyper-v 模块 (http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/10/21/installing-ubuntu-server-10-10-on-hyper-v.aspx)——基本上,它们已经被添加到了/etc/initramfs-tools/modules
。
我该如何调试这个问题?我现在有一台运行 Ubuntu 12.04 和 3.0 内核的机器,所以我可以调查一下。看起来没什么可疑的,/boot/grub/grub.cfg
我可以看到完全相同的 ID 被传递;我也试过update-initramfs -u -v
,我可以看到被hv_storvsc.ko
包括在内。
答案1
我的答案这里,复制如下,很可能也适用于您,并解释了为什么内核更新和内核模块 (storvsc) 解决了您的问题。以下是如何让一台原版 Ubuntu 12.04 机器在 Hyper-V 上运行:
从我的回答中复制过来:https://serverfault.com/a/522332/72237
让 Ubuntu 12.04 在 2012 平台上的 Hyper-V 下顺利运行的最简单方法是下载 Windows Azure 云映像 - 不幸的是,当我今天(2013 年 7 月 10 日)检查时,该映像在Ubuntu 云镜像图像商店。我已经就他们的答案网站您可以跟踪查看他们是否恢复了云图像。
话虽如此,让我们讨论一下您遇到问题的原因:12.04.2 的内核较旧,没有最新的 Hyper-V 集成(内核模块),这些模块已嵌入 12.10 中,并且也嵌入在 13.04 中。解决方法是获取较新的内核。正如我之前所说,获取正确映像的最简单方法是获取为 Windows Azure 构建的映像 - Azure 公有云和您的私有 Hyper-V 服务器都运行本质上相同的虚拟机管理程序,因此任何适用于 Azure 的说明也适用于您。
要在 Azure 平台上运行,即 2012 Hyper-V 虚拟机管理程序,Microsoft 建议在其列表中认可的 Linux 发行版您需要按照多个步骤更新 12.04.x 发行版才能使用反向移植的内核和内核模块。您无需安装 walinuxagent 或重新配置 GRUB,这仅适用于 Windows Azure。 这完整说明在此处重现,但删除了 walinuxagent 和 GRUB 指令:
sudo sed -i "s,archive.ubuntu.com,azure.archive.ubuntu.com,g" /etc/apt/sources.list
此步骤将更新镜像以指向 Azure 托管镜像。
sudo apt-add-repository ‘http://archive.canonical.com/ubuntu precise-backports main’
此步骤添加获取内核和代理更改所需的存储库。
sudo apt-get update
sudo apt-get install linux-backports-modules-hv-precise-virtual
此步骤添加更新内核和相关模块。
sudo apt-get install hv-kvp-daemon-init
此步骤添加更新的代理。笔记: 我已经从此命令中删除了 walinuxagent。私有云不需要它,但 Windows Azure 需要它。不过,此更新确实安装了键值对交换,可用于时间同步和其他用途,但我并不完全确定。
- 此步骤已被删除,因为它涉及修改 GRUB 以便在 Windows Azure 上更高效地运行。
- (受到推崇的)
sudo apt-get dist-upgrade
sudo reboot
最后说明:这些说明会将新的存储库添加到您的 Ubuntu 机器,您应该了解其效果。确保第一个命令正确运行(过去一周我还没有亲自测试过)以替换archive.ubuntu.com
。azure.archive.ubuntu.com
我自己已经执行了这些步骤,但我不能说它们将来会起作用。请注意,第一步的目标是让您的 Ubuntu 发行版使用一组新的默认存储库,这些存储库旨在反向移植对 Windows Azure 和 2012 Hyper-V 虚拟机管理程序的支持。