我有一个用于文件存储/通用盒的双 SATA 驱动器设置,其排列方式如下:
/dev/sda1 + /dev/sda1 = /dev/md0 RAID1 --> /boot
/dev/sda2 + /dev/sdb2 = /dev/md1 RAID1 --> LVM 带有用于 /、/usr、/var 等分区的 VG 和 LV。
我在安装 Ubuntu 期间选择了此设置,并且它运行良好,直到一些最新更新显然包括内核更新或类似的东西,这需要 GRUB 进行修改。
此后,我现在出现内核恐慌并且无法在启动时挂载 FS。
我从 Live CD 启动,在获取 mdadm 和 lvm2 后,检查文件系统没有问题,我可以组装 MD 阵列,并且 LVM 扫描可以生成正确的 VG/LV 列表。
如果您能告诉我(或指出好的资源)如何在 Ubuntu 更新过程中从硬盘恢复启动,我将不胜感激。我主要针对 LILO 引导加载程序进行恢复,据我所知,它几乎已经绝迹,而且我几乎没有 GRUB 经验(而且它看起来比 LILO 复杂得多)。
编辑:我尝试过https://help.ubuntu.com/community/Grub2#ChRoot该程序似乎对某些人有效,即从 live cd chroot 到现有服务器配置,然后尝试 update-grub、grub-install /dev/sdXX,但它不起作用。
具体来说,我尝试执行“grub-install /dev/sda”,但重启后遇到与之前相同的错误。
编辑(2):
根据 cstamas 的回答,您可以使用 Chroot 程序卸载并重新安装开发服务,如 ubuntu 社区链接中所述,然后进入 chroot 后,update-initramfs(对于 -k 指定与您的 /lib/modules/ 中的版本名称匹配的内核版本名称)和 update-grub2,无需 grub-install。
答案1
我个人更喜欢 grml.org 的救援 CD。
首先,最重要的是获取与您的 $arch 相匹配的 cd,例如 i386/amd64。
- 您启动 CD 并组装 raid/lvms。
- 仅挂载根文件系统
- chroot 进入根文件系统
- 在 rootfs 之外停止 udevd
- 在 rootfs 中启动 udevd
- 在 chroot 中组装/扫描/挂载丢失的文件系统(最重要的是 usr 和 boot)
- 重建 initramfs
- 在 debian 上(我认为在 ubuntu 上也是一样的)运行:
- 更新 initramfs -uv -k $你的内核版本
- update-grub 或 update-grub2
如果出现其他错误,例如意外卸载了 lvm2 或类似情况,您可以在 chroot 中重新安装它。如果您给出确切的错误消息,我们会尝试查看。