linux windows启动问题
在win7下装的centos双系统,后来把win7下安装双系统时用的磁盘删掉了,致使启动错误,只能直接进入到grub中
通过上上次的日志,可以知道如何进入windwos环境下。
但是如何进入linux下。则如下所示:
root (hd0, TAB键查看linux所在的分区。我的是第5分区
root (hd0,5)
查看/grub/grub.conf文件。
拷贝其中的kernel命令和initrd命令即可。
***********************最终解决问题的方法*************************
/* 引言 grub是什么?最常态的理解,grub是一个bootloader或者是一个bootmanager,通过grub可以引导种类丰富的系统,如linux、freebsd、windows等。但一旦进入linux操作系统(如无特殊声明,以下提及操作系统或系统皆为linux操作系统),可以敲一个grub命令,就进入”grub>”提示状态,然后可以进入操作若干命令。这时候的grub是什么?是shell,是一个和bash类似的一个shell。并且提供了两种工作模式,交互(interactive)模式和非交互(batch)两种模式,grub-install命令正是利用了grub的非交互模式,在系统下直接完成了grub的安装。*/ 三种安装方式 安装grub其实有3种方式,最常用的是grub-install,其实还有两种grub>install和grub>setup,其中grub>install是最底层的方式,grub>setup是更高一层的方式,而grub-install是最高级最简单的方式。接下来我们从grub>install开始讲,来对3个不同的方式作一下区分: 2.1. grub>install
进入grub>提示符之后,输入help install命令,会有如下提示: install: install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]其中,STAGE1 DEVICE STAGE2是必不可少的,以下为示例: install (hd0,0)/grub/stage1 (hd0) (hd0,0)/grub/stage2 或者可以如下: root (hd0,0) (在我的电脑上是 root (hd0,5)) install /grub/stage1 (hd0) /grub/stage2 通过这样一种方式可以成功安装grub,但系统reboot之后,不能进入系统,却直接进入grub>.why? 因为这种安装方式没有告知grub去哪里找grub.conf,stage2找不到grub.conf就会进入grub>. 用以下形式安装就ok了。 root (hd0,0) install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf 2.2. grub>setup
进入grub>提示符之后,输入help setup命令,会有如下提示: setup: setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE] Set up the installation of GRUB automatically. This command uses the more flexible command "install" in the backend and installs GRUB into the device INSTALL_DEVICE.
从以上内容我们可以看出,setup是一个自动化(automatically)的grub安装,它在后台(backend)运行了更灵活多变的install命令。看示例: grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done. 从以上可以看出,setup命令将install命令封装了,使用setup命令比使用install命令简单很多。
但实际的过程比install却要复杂一些,其中尤其重要的一点是:
使用setup会植入e2fs_stage1_5到硬盘的第一柱面第16扇区之后(这个没有准确验证过),这会带来和通过install安装一个很大的区别。 2.3. grub-install 安装grub最常用的方式是在进入系统之后,通过grub-install脚本进行安装,通过这个脚本安装和前两种方式有何不同呢? 脚本其实是通过grub的非交互模式,调用了setup命令安装grub的。
[*]脚本的安装源是/usr/share/grub/i386-redhat/下的stage1、2和各种stage1.5,
而前两种方式使用的源是/boot/grub/下的相同内容。所以通过grub-instal安装grub,原先在/boot/grub下的stage文件都删除也没关系,该脚本每次执行都会删除这些文件的。反之,通过前两种方式安装的话,相应的stage文件是不可或缺的,否则会报错,安装失败。
[*]通过grub-install安装grub之后,如果我们删除了/boot/grub/下的stage2文件,系统会无法启动,报如下错:
GRUB loading stage 1.5 GRUB loading, please wait... Error 15 但是,如果是通过grub>install方式安装的grub,删除/boot/grub/stage2就没有问题,why?
因为通过grub>install安装grub,stage1是直接通过stage2所在的blocklist找stage2,我们删除或者改名stage2文件,文件的存放位置是不变的,因此能找到。
而通过grub-install脚本,或者grub>setup,会智能的找到相应的stage1.5,例如:/grub/e2fs_stage1_5,然后通过stage1.5认识文件系统,是通过文件名去找stage2的,所以通过这两种方式安装的grub,不可删除或者改名/boot/grub/stage2。