/boot目录下缺少vmlinuz文件。

我正在使用装有Windows 7和Ubuntu 12.04的笔记本电脑。在调整分区大小后,我遇到了引导程序(grub)问题,最终发现是由于缺少内核文件引起的问题。(这些问题直到调整分区大小一周后才开始出现,在此期间,计算机一直正常工作)。
通过从12.04 LTS LiveCD中chroot到我的硬盘安装中,我最终成功恢复了/boot/initrd-3.2.0.24-generic.img。通过将LiveCD的/casper/文件夹中的vmlinuz复制到/boot/vmlinuz-3.2.0.24-generic,我发现update-grub终于能够识别并添加我的Ubuntu安装到grub菜单中,这也是我最初的问题所在。
然而,我现在遇到的问题是,当启动这个安装时,我遇到了各种各样的失败模块和错误消息,通常速度太快,以至于我甚至无法阅读或记住;最后,我被给予了在低图形模式、故障排除、命令提示符、网络等方面启动Ubuntu的选项...选择低图形模式只会将我丢到终端,提示我登录,但我的用户名和密码不起作用。
也许仅仅从LiveCD中复制vmlinuz导致了这些错误?我的问题是,在恢复了我的'initrd-....'.img之后,同一内核安装过程没有安装一个合适的vmlinuz。
我真的不想再重新安装整个Ubuntu分区了,因为我对各种编程环境进行了很多定制设置,这些环境是我用于研究工作的,而且我目前正在国外,带宽有限,而恢复大部分软件非常必要。
不过,我确实有一个完整的映像和一个完整的非引导分区克隆(都是通过CloneZilla获得的);我只是不知道这些是否实际上获取了我的私人“Home”文件夹,当我挂载克隆时,它声称无法读取。

你介意加一些换行吗?我不喜欢这种“一大段文字”的形式... - Martin Ueding
抱歉关于格式的问题,正如我之前提到的,我最近在国外,还没有完全弄清楚这些国际键盘上的所有符号都去哪了。 - msolters
2个回答

你试过使用 apt-get 命令来(重新)安装内核吗?
尝试使用与你的Ubuntu安装相匹配的Live CD或USB启动,然后进行chroot,最后执行下面的命令。
apt-get -V install linux-generic linux-image-generic linux-headers-generic
  • 注意:如果上述方法不起作用,您也可以尝试使用--reinstall或者先remove上述软件包,然后再尝试install

如果上述方法都不起作用,请在问题中提供关于失败的详细信息。

上述建议是基于在虚拟机中干净安装的Ubuntu 12.04 LTS 64位系统上,apt-get升级内核时的操作。 apt-get决定安装的软件包是linux-genericlinux-image-genericlinux-headers-generic

我已经包含了下面从运行apt-get命令中得到的输出,以防有可能有用。

根据我的观察,vmlinuz-3.2.0-25-genericinitrd.img-3.2.0-25-generic都是通过在安装后处理期间运行update-initramfs脚本生成的。因此,除非这些安装是足够相同的,否则我怀疑仅仅将文件从一个安装复制到另一个安装中可能不会起作用。

irrational@VB64Too:~$ sudo apt-get -V install linux-generic linux-image-generic linux-headers-generic
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
   linux-headers-3.2.0-25 (3.2.0-25.40)
   linux-headers-3.2.0-25-generic (3.2.0-25.40)
   linux-image-3.2.0-25-generic (3.2.0-25.40)
Suggested packages:
   fdutils (5.5-20060227-5)
   linux-doc-3.2.0 ()
   linux-source-3.2.0 (3.2.0-25.40)
   linux-tools (3.2.0.25.27)
The following NEW packages will be installed:
   linux-headers-3.2.0-25 (3.2.0-25.40)
   linux-headers-3.2.0-25-generic (3.2.0-25.40)
   linux-image-3.2.0-25-generic (3.2.0-25.40)
The following packages will be upgraded:
   linux-generic (3.2.0.23.25 => 3.2.0.25.27)
   linux-headers-generic (3.2.0.23.25 => 3.2.0.25.27)
   linux-image-generic (3.2.0.23.25 => 3.2.0.25.27)
3 upgraded, 3 newly installed, 0 to remove and 247 not upgraded.
Need to get 50.6 MB of archives.
After this operation, 216 MB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main linux-image-3.2.0-25-generic amd64 3.2.0-25.40 [38.2 MB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main linux-generic amd64 3.2.0.25.27 [1,710 B]                          
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main linux-image-generic amd64 3.2.0.25.27 [2,648 B]                    
Get:4 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-3.2.0-25 all 3.2.0-25.40 [11.4 MB]                   
Get:5 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-3.2.0-25-generic amd64 3.2.0-25.40 [958 kB]          
Get:6 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-generic amd64 3.2.0.25.27 [2,644 B]                  
Fetched 50.6 MB in 36s (1,398 kB/s)                                                                                                
Selecting previously unselected package linux-image-3.2.0-25-generic.
(Reading database ... 141202 files and directories currently installed.)
Unpacking linux-image-3.2.0-25-generic (from .../linux-image-3.2.0-25-generic_3.2.0-25.40_amd64.deb) ...
Done.
Preparing to replace linux-generic 3.2.0.23.25 (using .../linux-generic_3.2.0.25.27_amd64.deb) ...
Unpacking replacement linux-generic ...
Preparing to replace linux-image-generic 3.2.0.23.25 (using .../linux-image-generic_3.2.0.25.27_amd64.deb) ...
Unpacking replacement linux-image-generic ...
Selecting previously unselected package linux-headers-3.2.0-25.
Unpacking linux-headers-3.2.0-25 (from .../linux-headers-3.2.0-25_3.2.0-25.40_all.deb) ...
Selecting previously unselected package linux-headers-3.2.0-25-generic.
Unpacking linux-headers-3.2.0-25-generic (from .../linux-headers-3.2.0-25-generic_3.2.0-25.40_amd64.deb) ...
Preparing to replace linux-headers-generic 3.2.0.23.25 (using .../linux-headers-generic_3.2.0.25.27_amd64.deb) ...
Unpacking replacement linux-headers-generic ...
Setting up linux-image-3.2.0-25-generic (3.2.0-25.40) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-25-generic /boot/vmlinuz-3.2.0-25-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-25-generic
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.2.0-25-generic /boot/vmlinuz-3.2.0-25-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.2.0-25-generic /boot/vmlinuz-3.2.0-25-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.2.0-25-generic /boot/vmlinuz-3.2.0-25-generic
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-25-generic
Found initrd image: /boot/initrd.img-3.2.0-25-generic
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done
Setting up linux-image-generic (3.2.0.25.27) ...
Setting up linux-generic (3.2.0.25.27) ...
Setting up linux-headers-3.2.0-25 (3.2.0-25.40) ...
Setting up linux-headers-3.2.0-25-generic (3.2.0-25.40) ...
Setting up linux-headers-generic (3.2.0.25.27) ...
irrational@VB64Too:~$

通过在12.04 LTS LiveCD中chroot到我的硬盘安装,我最终成功恢复了/boot/initrd-3.2.0.24-generic.img。通过将LiveCD的/casper/文件夹中的vmlinuz复制到/boot/vmlinuz-3.2.0.24-generic,我发现update-grub最终能够识别并添加我的Ubuntu安装到grub菜单中,这是我最初的问题。
然而,我的新问题是,在启动这个安装时,我遇到了各种失败的模块和错误信息...
我最初建议的是从live media中复制文件或在chroot中只安装linux-image-generic,但我找到了一个更好的答案。
我的建议是查看您安装的/lib/modules/目录,并选择您可以找到的最新内核版本号,然后在chroot中安装相应的内核映像。如果没有自动创建initrd,您需要运行mkinitramfs来生成它,否则它本来会被update-initramfs调用,但可能拒绝从live media中工作。
我在这里发布了完整的说明:如何恢复/boot中被删除的文件?(vmlinuz丢失,系统无法启动)