Redhat启动修复小记

  晚上9:30,某学院研究生突然打电话说他的机房的Linux系统无法开机,问题貌似挺严重的,于是带上ubuntu启动盘过去看了看。

  机房大约有30多台电脑,只有一台能进入Linux。随便找了一台,选择进入Linux系统后就卡死了,键盘上的灯一直闪,按任何键都没反应,但是windows可以进入(双系统)。

  开始问答环节:

问:所以主机是装完一台之后同传的吗?
答:是的
问:同传之后机器能启动吗?
答:能
问:后来为什么又进不去了?
答:修改了/boot/grub/grub.cfg文件
问:为什么要修改这个文件?
答:因为这是一个公共机房,装双系统,我先装的XP,后装的redhat,装完之后第一启动项是redhat,只有我们用redhat,其他人上机用XP,所以我想调整默认的启动顺序。修改了那个文件,将redhat相关的启动项移动到了XP的下面。
(PS:以前这种事我干过,由于我的电脑上系统比较多,Linux在第一位,win7在最后一位,每次进win7要按好几下方向键,麻烦,于是便将win7调整到第二位,就是修改那个文件,没出啥问题。)
问:修改之后能进入Linux吗?
答:能。现在就那一台机器能启动
问:其他机器也是这样修改的?
答:不是的,我是直接将修改好的那台机器上的/boot/grub/grub.cfg文件直接覆盖到其他机器上相应文件。
(PS:您可真有耐心!30多台机器啊,一台一台复制!)
问:修改之后能进入吗?
答:我们一口气把所有主机都修改了,修改完了开机才发现所有修改的主机都进不去了!网上找了半天,没鼓捣出来,所以把你请来了。
问:修改完一台应该测试一下的。
答:我们导师也一直说我们(囧)~

  问题基本能锁定在那个文件上,于是插上我的U盘ubuntu启动盘,进入系统,打开磁盘管理工具看了一下,他装Linux系统的时候分了3个区,112G的/分区,1.2G的/boot分区,4G的swap分区。果断挂载boot分区,打开grub/grub.cfg文件。我地一个想法是复原这个文件,由于这个文件被覆盖了,因此只能根据他的回忆复原。复原之后,重启,进入Linux,仍然和刚才的情况一样。看来不是顺序的问题。

  虽然系统无法启动,但是还是有两行提示信息的(忘了拍下来了,后悔ing)。研究生说他们去网上搜了这个问题,网上说是系统跑飞了,然后尝试了各种方法,鼓捣了半天,没有弄好。

  “系统跑飞了”,这是一个重要参考信息,系统为什么会跑飞?记得以前硬件老师讲过,程序跑飞就是程序没按照你要求的顺序执行,指针指向了程序之外的地址,程序执行就不能控制了,嵌入式里面有种叫看门狗的电路专门解决这种问题。

  关于系统引导的问题以前看过一篇文章:计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占416字节),并把控制权交给Boot Loader,由Boot Loader进一步完成操作系统内核的加载。当Boot Loader找到内核之后,就把控制权交给操作系统内核,由内核继续完成系统的启动。(http://linux.chinaitlab.com/administer/726807.html

  现在系统的问题应该说是没有正常引导,原因是他修改了/boot/grub/grub.cfg文件,为什么修改了这个文件之后就没法启动了?带着这个问题,又一次通过启动盘打开了grub.cfg文件。然后开始分析。类似下面的文件(不是源文件,没记下来,下面这个是从网上搜的,比较像)

menuentry 'Ubuntu, with Linux 2.6.32-21-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,3)'
    search --no-floppy --fs-uuid --set 5cf7c0d3-8b4d-428f-a54a-ea43ce486654
    linux /boot/vmlinuz-2.6.32-21-generic root=UUID=5cf7c0d3-8b4d-428f-a54a-ea43ce486654 ro quiet splash
    initrd  /boot/initrd.img-2.6.32-21-generic
}

  看到里面有“UUID”,瞬间眼前一亮,记得一前一个老师说过,UUID是一个分区的唯一标识符,grub.cfg文件中系统通过UUID来确定分区,如果文件中的UUID不是实际硬盘分区上的UUID,那么系统启动就不能正确找到相应的引导分区,系统当然没法启动了。果断打开/etc/fstab文件查看,果然不一样!!!看来问题就是出在这里了。由于系统的/个/boot都有UUID,我不知道该用哪一个,先事实/boot的,启动时候报错,说/boot已经挂载,然后再试试“/”的UUID,可以正常启动啦!欢呼~~但是启动到一半的时候,提示SELinux修复磁盘,大概修复了10分钟吧,然后就正常进入系统了!

  接下来就是教他们如何修改grub.cfg文件~

  已经差不多10点半了,宿舍11点关门~

posted on 2013-03-25 18:14  ma6174  阅读(4425)  评论(2编辑  收藏  举报

导航