首页 > *nix技术, 仿真虚拟, 内核技术 > Linux GRUB挂起的可能修复方法

Linux GRUB挂起的可能修复方法

2012年5月16日 发表评论 阅读评论 5,519 次浏览

使用ghost32从gho镜像转换后生成的vmdk虚拟硬盘怎么起不来(vmware和kvm都不行),现象就是进入到GRUB后处于挂起状态,关于这个问题在http://plosquare.blogspot.com/2010/05/troubleshooting-grub-hangs.html有详细的描述,我这里的情况如下图:


根据blogspot上的解释是GRUB尝试从root分区加载stage2时失败导致。具体原因暂且不管,先尝试修复grub试试。
把这个ghost.vmdk虚拟硬盘挂载到另外的一台正常的vm虚拟机上,启动这台正常vm虚拟机后,查看ghost.vmdk对应磁盘的情况:

[root@localhost ~]# fdisk -l /dev/sda

Disk /dev/sda: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd97b4a8c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1           5       32768   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2               5           7       16384   83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3               7         211     1638400   83  Linux
Partition 3 does not end on cylinder boundary.
/dev/sda4             211        2089    15087616    f  W95 Ext'd (LBA)
/dev/sda5             211         364     1228800   83  Linux
/dev/sda6             364         494     1048576   83  Linux
/dev/sda7             495         625     1048576   83  Linux
/dev/sda8             625        1102     3832832   83  Linux
/dev/sda9            1103        1111       65536   83  Linux
/dev/sda10           1111        1596     3895296   83  Linux
/dev/sda11           1596        2089     3960832   83  Linux
[root@localhost ~]# 

把boot分区mount上来:

[root@localhost ~]# mkdir -p /home/hd/sda1
[root@localhost ~]# mount /dev/sda1 !$
mount /dev/sda1 /home/hd/sda1
[root@localhost ~]# cd !$
cd /home/hd/sda1
[root@localhost sda1]# ls
config-2.6.18-164.el5      memtest.bin                System.map-2.6.37.2.old  vmlinuz-2.6.30.ori
grub                       message                    System.map-2.6.37.6+     vmlinuz-2.6.37
initrd-2.6.18-164.el5.img  symvers-2.6.18-164.el5.gz  System.map-2.6.37.old    vmlinuz-2.6.37.2
initrd-2.6.30.img          System.map                 System.map-2.6.38.8      vmlinuz-2.6.37.2.old
initrd-2.6.37.2.img        System.map-2.6.18-164.el5  System.map-2.6.38.8.old  vmlinuz-2.6.37.6+
initrd-2.6.37.6+.img       System.map-2.6.30          vmlinuz                  vmlinuz-2.6.37.old
initrd-2.6.37.img          System.map-2.6.30.old      vmlinuz-2.6.18-164.el5   vmlinuz-2.6.38.8
initrd-2.6.38.8.img        System.map-2.6.37          vmlinuz-2.6.30           vmlinuz-2.6.38.8.old
lost+found                 System.map-2.6.37.2        vmlinuz-2.6.30.old
[root@localhost sda1]# 

先查看磁盘映像:

[root@localhost sda1]# cd grub/
[root@localhost grub]# cat device.map 
(fd0)	/dev/fd0
(hd0)	/dev/sda

hd0对应/dev/sda,而刚好我的ghost.vmdk对应在/dev/sda上,所以这里无需改动,如果ghost.vmdk对应在/dev/sdb(/dev/sdc、/dev/sdd类似)上,那么这里需要vi device.map,将其中的“(hd0) /dev/sda”改为“(hd0) /dev/sdb”,否则执行下一步将会提示“/dev/sda does not have any corresponding BIOS drive”这样的错误,改完并执行下一步后再改回/dev/sda即可,因为在只有一块硬盘的情况下,hd0对应的就是/dev/sda。
执行grub修复命令:

[root@localhost grub]# grub-install --no-floppy  --root-directory=/home/hd/sda1/ /dev/sda
Installation finished. No error reported.
This is the contents of the device map /home/hd/sda1//boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)	/dev/fd0
(hd0)	/dev/sda
[root@localhost grub]# 

关闭虚拟机,把ghost.vmdk挂载到原来虚拟机里重新启动,顺利进入系统,修复成功。

转载请保留地址:http://www.lenky.info/archives/2012/05/1651http://lenky.info/?p=1651


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.