我的一个 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 挂载文件系统的顺序的文章。