grub2/initramfs 灾难恢复

grub2/initramfs 灾难恢复

我的一个 ubuntu 12.04 是 vmware ESXi 主机上的虚拟机。它具有单独的启动和根分区。一位开发人员错误地对实时根分区进行了 fsck,并且该虚拟机只能启动到 initramfs 模式,并出现一些错误 - “未找到 /proc”。我的理解是根分区 inode 表已损坏导致读取错误。这可能通过 fsck 根分区来修复。由于我无法直接访问 ESXi 主机(我无法从另一台主机挂载此 VM 根分区),因此唯一的选择是使用 grub 通过 nfs 根分区启动虚拟机。以下是我所做的:

grub版本是1.99-21ubuntu3.14

grub> 设置

?=0 color_highlight = .. 颜色.. 默认=0 feature_timeout_style=y have_grubenv=true linux_gfx_mode=text menu_color_hi... menu_color_normal.. pager=1 prefix=(hd0,msdos1)/grub recordfail=1 root=hd0,msdos1

grub> insmod 正常

grub> lsmod <=lsmod 输出中没有 NFS

名称... minicmd linux vbe video_fb mmap relocator help ls affs afs afs_be befs befs_be btrfs lzopio cpio fat hfs hfsplus iso9660 jfs .. pxe lvm ..

grub>ls (hd0,1)/ <=从输出来看,似乎我的 /boot 分区没有损坏,并且所有内核/initrd 文件都可以访问

abi-2.6.32-38-server vmcoreinfo-2.6.32-38-server config.. system.map-... grub/ abi-.. initrd.img-.. vmlinuz-... memtest.. vmlinuz.. grub> linux /vmlinuz root=/dev/nfs nfsroot=:/opt/shares/boot ip= <=here 我尝试设置 nfsroot,但出现以下错误

错误:没有这样的磁盘。

grub> linux (hd0,1)/vmlinuz-3.2.0-30-generic root=/dev/nfs nfsroot=:/opt/shares/boot ip=

grub> initrd (hd0,1)/initrd.img-3.2.0-30-generic

grub>启动

.....过了一会儿,出现了启动信息

警告!/dev/nfs 不存在。降到 shell!busyBox v1.18.5.... (initramfs)

是否可以从 grub 设置 nfsroot?上述失败是否与 grub 中“lsmod”输出中没有 nfs 模块有关?也许有更好的方法来 fsck 根分区而不执行 nfsroot?我使用的版本似乎没有 bootp 或 tftpboot 命令,它们让我可以选择指向启动服务器。

我的下一步是使用 wget@initramfs 模式,获取新的 netboot vmlinuz 和 initrd.img。希望它包含 nfs 模块。

提前致谢!

卡尔

我使用更新的 initrd.img 恢复了我的实例,该 initrd.img 内置了 nfs 模块。之后,我能够通过网络启动系统。然后 fsck lvm,系统恢复正常。

干杯,

卡尔

答案1

如果你正在设置 NFS 根目录,则需要调试为什么 NFS 根目录未挂载。首先启动到单用户模式没有NFS,看看您是否可以手动挂载 NFS 和/或 proc/dev。另外,请参阅下面描述使用 initrd 挂载文件系统的顺序的文章。

https://www.kernel.org/doc/Documentation/initrd.txt

相关内容