赞
踩
这里以ubuntu 12.04中的GRUB 2为例(GRUB 1.9x称为GRUB 2)来讲述一下GRUB的命令。
打开终端,运行sudo gedit /boot/grub/grub.cfg,打开这个文件。上面的一行行文字令人眼花缭乱,现在只用一些重要的。
在第59行有一段文字:set timeout=-1,把timeout这个值设成了负数。timeout是指GRUB显示的时间,如果是负数,则一直在那里等着,如果是0,则直接跳过GRUB。为了使GRUB显示出来,需要把61行也改为set timeout=-1
从101行到113行是一连串的命令,下面分组进行讲解。
4.3.1 描述命令(48)
在101行,有一个命令叫menuentry,它的用法如下:
menuentry '***'{命令}
其中***是指在GRUB界面上菜单项的名称,比如第一项显示的是Ubuntu,Linux 3.2.0-23-generic-pae。在上面指明了内核版本是3.2.0。相当于GRUB 1的title,只不过没有了{}。
倘若继续往下看,121行,有一个命令是echo '***',这也是一种描述,在启动时显示相应的信息。
4.3.2 加载命令(48)
在104-106行,有三个连续出现的insmod命令,这就是加载相应的模块。比如105行,加载了part_msdos模块,这个模块是专门管MSDOS分区的,比如FAT32/NTFS分区。
111行,有一个很重要的命令,这就是linux,相当于GRUB 1的kernel。这是一个加载内核的命令,后面有一个参数:/boot/vmlinuz-3.2.0-23-generic-pae,这就是内核文件。内核文件是一个压缩文件,运行Linux命令是会自动解压。
4.3.3 虚拟文件系统命令(48)
在3.4节里提过,要创建一个虚拟的根文件系统。那么这个命令就是initrd,后面也有一个参数:/boot/initrd.img-3.2.0-23-generic-pae,这个文件也是压缩文件,所以解压,解压后就被挂载到/,虚拟成功。
4.3.4 启动相关(48~50)
106/107行,有两个命令,作用完全一样。第一个是set root(相当于GRUB的root),第二个是search,两个命令都是指定启动分区的。用法有差别,set root后面跟着的是分区,而search则需要一大堆的参数,下面一一解读这些参数:
--no-floppy:是指不读取软驱
--fs-uuid:表示分区用UUID表示。
--set=root:表示分区将设置为启动分区。
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:是该分区的UUID。
好了现在说GRUB分区如何表示。
在Linux里,分区表示方法为:/dev/h(s)d[a-z]x,其中h(s)代表硬盘类型,h代表IDE硬盘,s代表SATA或SCSI硬盘。a-z表示是第几块硬盘,x为分区的号码:
主分区(扩展分区):1-4
逻辑分区:5-16
在GRUB里则不一样,他的表示方法为:(h(s)dm,n),可以看出,前半部分是一样的,均为h(s)d,后面不一样,m代表是第几块硬盘(从0开始),n表示的是Linux里的那个x,不过版本不一样又略有不同。GRUB1使用的是x从0开始,而GRUB2则是从1开始,比如如果是/dev/hda3,那么在GRUB1里就是(hd0,2),在GRUB2里则是(hd0,3)。
如果把/dev/hda1作为启动分区,则应该是set root='(hd0,1)'不过近期来,在n的前面加上了msdos,即set root='(hd0,msdos1)',这一点是无版本区别的。
再看UUID,UUID是分区的一个标识符。
那么执行了这么多命令,最后干什么呢?最后有一个命令:boot,就表示启动了。
如果有Windows操作系统并存,则会在113行看到chainloader +1,这表示GRUB将把启动所有权交给Windows。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。