兴趣是最好的学习契机!
全部博文(127)
分类: LINUX
2015-05-18 17:37:02
在使用grub前,最重要的事情之一就是理解这个程序是如何引用设备的,如系统硬盘驱动器、分区等。对于配置grub实现多操作系统的引导,这方面的信息是很重要的。
grub的设备命名
系统的第一个硬盘驱动器被grub称为(hd0),在它上面的第一个分区被称为(hd0,0),第二个分区被称为(hd0,1),以此类推即可。第二个硬盘驱动器上的第一个分区则被称为(hd1,0)。无论是并口硬盘还是串口硬盘或是SCSI硬盘,在grub都是用hd来标识;而不像在Linux中使用mount挂载硬盘时,SCSI硬盘和串口硬盘要使用sd来标识。在Linux中,并口硬盘用hd标识,第一块并口硬盘则在hd后加a,以此类推到第n块硬盘为hdn;而第k块硬盘的第1个分区则被称为hdk1。若是串口硬盘将hd换成sd即可。注意grub中硬盘名称与硬盘分区名称与Linux中的差异,并要知道如何转换。
grub的root device
在 Linux 中,当谈到root device时,通常是指主Linux分区。但是,grub有它自己的root device定义。grub的root device分区是保存Linux内核的分区。这可能是Linux的主分区,也可能不是。实际上,人们可以将grub的root device分区看作是grub的当前工作路径。一旦使用grub就一定要使用grub的root命令指定一个root device分区。
grub的引导过程
实际上grub在安装时是把一个小于512byte的stage1文件装入了MBR(假设grub安装在MBR)。当磁盘引导时会运行MBR中引导程序,如果是stage1的话,则会按照指定的路径载入Linux中grub文件夹下的stage2,stage2再对grub文件夹下的grub.conf文件进行解析,从而显示启动界面、读入Linux kernel、加载硬件驱动,直至系统启动完成。
grub对操作系统的引导可以分为两类:直接引导和间接引导。许多的Unix和类Unix系统,如Linux的各种版本都可以被直接引导,而Windows操作系统则不能被直接引导,只能够进行间接引导。
这里只讨论GNU/Linux的直接引导,过程如下:
1. 使用root命令将root device设置为操作系统镜像(image)所在的分区,并挂载该分区;
2. 使用kernel命令载入该系统的kernel image并为该image提供参数;
3. 使用initrd命令将各个硬件的驱动载入内存中,以驱动这些硬件。initrd 就是initial ramdisk的缩写,是将内存作当作虚拟磁盘使用。initrd的作用主要是在系统核心还没有载入之前,先以Kernel modules的方式将系统的硬件设备(如scsi卡,网卡,声卡等等的驱动程序)先载入内存中,以驱动这些装置。所以当你将自己的硬件配备的驱动程序编译成模块,而非编入系统核心时,就必须使用initial ramdisk;
4. 使用boot命令启动。
接下来讨论间接引导。间接引导的实质就是通过grub载入其他操作系统自己的启动引导加载程序,是一种链式的引导方式。过程如下:
1. 使用rootnoverity命令将root device设置为操作系统镜像(image)所在的分区,但并不挂载,以防grub在挂载不能识别的文件系统时出错;
2. 使用makeactive命令激活grub当前的root device。首先,在现代的操作系统中,这一步是没有必要的;其次,这只能在grub当前的root device是磁盘的主分区的时候才有效;
3. 使用chainloader +1命令载入指定的操作系统的启动引导程序。+1表示读入grub当前的root device分区的512字节(该分区的第一个扇区)的启动区;
4. 使用boot命令启动。
grub的命令行
前面已经谈到了许多命令行的命令了,如root,kernel等。这一部分主要是讨论如何在一个陌生的系统中通过grub的命令行来引导系统。
以Linux的引导为例。通过上面的讲解,可以知道首先要找到系统镜像所在的分区。有两个命令可以实现:cat和find。在grub中,cat和在Linux中比较相似,可以显示指定文件的内容。但需要注意的是,若不指出分区,那么cat只会在目前的grub的root device分区里寻找。find则与Linux中的find命令有所不同:在grub中,find将在所有挂载的分区中搜寻指定的文件和文件夹。要命的是必须给出完整的文件路径和文件名,这直接导致它在grub中变成了鸡肋。所以常用cat加Tab来寻找系统镜像和其他必须的文件。
在找到kernel和initrd命令所必需的文件后,还必须给出kernel载入的kernel image的必要参数。下面是一些常用的kernel参数:
ro 表示kernel是只读的
root=/dev/* root指定的是Linux的root分区,*用Linux的分区表示法而非grub的,因为这是kernel而非grub的参数。
root=LABEL= 这里需要指明的是Linux的root分区 / 。LABEL表示使用/etc/fstab中为根文件系统指定的标签(label)。
quiet 不输出启动信息
rhgb 图形方式启动
single 单用户模式。在单用户模式下,用“passwd –d 账户名“命令更改口令。其他如更换显示器,而无法进入图形界面等其他原因需要进入其他运行级,都可以这么做了。进入linux单用户模式后vi /etc/shadow,然后将第一行,即以root开头的一行中root:后和下一个:前的内容删除,最后保存并reboot重启。
Windows XP引导Linux
dd if=/dev/(grub引导程序stage1所在分区) of=路径/Linux.lnx bs=512 count=1
将生成的Linux.lnx弄到Windows XP的C盘根目录下,在boot.ini新建一行,写入C:/Linux.lnx=" Linux "即可。