我有一个Ubuntu 11.10虚拟机,我刚刚升级到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 。
我怎样才能debugging这个问题? 我有机器运行Ubuntu 12.04现在3.0内核,所以我可以调查。 没有看起来真的很可疑,看着/boot/grub/grub.cfg我可以看到相同的ID传递; 我也试过update-initramfs -u -v ,我可以看到hv_storvsc.ko被包含在内。
我的答案在这里复制下面,最有可能适用于你,并解释了为什么内核更新和内核模块(storvsc)解决了你的问题。 以下是如何获得在Hyper-V上运行的股票Ubuntu 12.04机器:
让Ubuntu 12.04在2012平台上运行得很好,最简单的方法就是下载Windows Azure云镜像 – 不幸的是,我今天(2013年7月10日)查看的这些镜像并不在Ubuntu Cloud Images镜像存储上。 我在他们的答案网站上提出了一个问题,您可以按照这些问题来查看他们是否还原了云端图像。
也就是说,让我们来讨论为什么你有一个问题:12.04.2有一个较旧的内核,没有最新的Hyper-V集成(内核模块),这些内核已经被烧入12.10,并且也在13.04。 治愈的方法是获得更新的内核。 正如我前面所说,获取正确映像的最简单方法是获取为Windows Azure构build的映像 – Azure公共云和专用Hyper-V服务器都运行基本相同的pipe理程序,因此适用于Azure的任何指示信息都适用于您。
要在Azure平台上运行,也就是2012 Hyper-V虚拟机pipe理程序,Microsoftbuild议您在他们认可的Linux发行版列表中按照许多步骤更新12.04.x发行版以使用后端内核和内核模块。 您不需要安装walinuxagent或重新configurationGRUB,这只是Windows Azure所必需的 。 在这里转载完整说明 ,并删除了walinuxagent和GRUB说明:
sudo sed -i "s,archive.ubuntu.com,azure.archive.ubuntu.com,g" /etc/apt/sources.list
此步骤将镜像更新为指向Azure托pipe的镜像。
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。 然而,这个更新确实安装了可能用于时间同步和其他事情的键值对交换,但我并不完全确定。
sudo apt-get dist-upgrade sudo reboot 最后需要注意的是:这些说明会为您的Ubuntu机器添加一个新的存储库,您应该意识到这个存在的影响。 确保第一个命令运行正确(我过去一周没有自己testing过)用azure.archive.ubuntu.comreplacearchive.ubuntu.com 。 我自己已经完成了这些步骤,但我不能说他们将来会工作。 请注意,第一步的目标是指出您的Ubuntu发行版使用一组新的默认存储库,旨在支持Windows Azure和2012 Hyper-Vpipe理程序。