您好,欢迎访问三七文档
grub2基础教程-修订版smallapple目录一、grub2新特性二、grub2安装与启动三、grub2配置文件详解四、脚本修改五、使用grub2常见错误及修复方法一、grub2新特性1、grub2和grub有很多不同的地方:a)图形接口b)使用了模块机制,通过动态加载需要的模块来扩展功能c)支持脚本语言,例如条件判断,循环、变量和函数d)支持rescue模式,可用于系统无法引导的情况e)国际化语言。包括支持非ASCII的字符集和类似gettext的消息分类,字体,图形控制台等等f)有一个灵活的命令行接口。如果没有配置文件存在,GRUB会自动进入命令模式g)针对文件系统、文件、设备、驱动、终端、命令、分区表、osloder的模块化、层次化、基于对象的框架h)支持多种文件系统格式i)可访问已经安装的设备上的数据j)支持自动解压2、设备的命名grub2同样以fd表示软盘,hd表示硬盘(包含IDE和SCSI硬盘)。设备是从0开始编号,分区则是从1开始,主分区从1-4,逻辑分区从5开始,而grub分区编号是从0开始的。下面给出几个例子:(fd0):表示整个软盘(hd0,1):表示BIOS中的第一个硬盘的第1个分区(hd0,5)/boot/vmlinuz:表示BIOS中的第一个硬盘的第一个逻辑分区下的boot目录下的vmlinuz文件二、grub2安装与启动1、安装ubuntu9.10时,grub默认安装在第一硬盘(hd0)的mbr,其实就是把引导文件boot.img写入硬盘的mbr,当然,用户也可以选择不写入硬盘mbr而是写入linux分区的引导扇区。启动时根据mbr所提供信息找到启动分区后,加载分区内的grub核心文件core.img和配置文件grub.cfg,进入选择菜单画面,在菜单画面,按上下箭号选择需要系统菜单项,按Enter进入选项。按e进入己选择菜单的编辑状态,在编辑状态下,由上下左右箭号来移动光标,enter键换行,ctrl+x以编辑的内容启动,ctrl+c进命令行状态,按Esc退出,回到菜单项。在需要使用额外的内核参数启动时,比如要加上acpi=off时,把光标移动到linux这一行最后,在splash后加上一空格再输入acpi=off,然后按ctrl+x启动。按c进入命令行状态,按Tab键可查看所有可用的命令。在命令行状态,可以根据需要加载或移除相应模块,也可用来启动在菜单没有显现的的系统。比如,在第一硬盘的第一分区上装有windowsxp系统,但在菜单上没显示出来,我们可以命令行状态下输入命令启动:grubsetroot=(hd0,1)grubchainloader+1grubboot又比如启动第二硬盘第一逻辑分区上的ubuntu系统:grubsetroot=(hd1,5)grublinux/boot/vmlinuz-xxx-xxxroot=/dev/sdb5grubinitrd/boot/initrd.img-xxx-xxxgrubboot其中内核vmlinuz和initrd.img的版本号可用按Tab键自动查看。2、下面介绍下在grub2中一些常用的命令1)help查看命令用法,如helpsearch:查看search命令详细用法2)set设置变量值,如setdefault=0settimeout=5setroot=(hd0,3)等等需要调用变量AA的值时,使用${AA},如setroot=(hd1,1),则${root}=(hd1,1)3)default定义默认引导的操作系统。0表示第一个操作系统,1表示第2个,依此类推4)timeout定义在时间内用户没有按下键盘上的某个按键,自动引导default指定的操作系统。5)root指定用于启动系统的分区。6)insmod和rmmod加载或移除某模块,如insmodjpeginsmodpnginsmodntfsrmmodpng等7)drivemapdrivemap兼容grub的map,主要用于只能从第一硬盘(hd0)引导启动的系统如win2000xp2003,比如要添加第二硬盘第一分区上的xp系统:menuentryWindowsXP{setroot=(hd1,1)drivemap-s(hd0)${root}chainloader+1}8)ls列出当前的所有设备。如(hd0),(hd0,1),(hd0,5),(hd1),(hd1,1),(hd1,2)等ls-l详细列出当前的所有设备。对于分区,会显示其label及uuid。ls/列出当前设为root的分区下的文件ls(hd1,1)/列出(hd1,1)分区根目录的文件9)searchsearch-f/ntldr列出根目录里包含ntldr文件的分区,返回为分区号search-lLINUX搜索label是LINUX的分区。search--set-f/ntldr搜索根目录包含ntldr文件的分区并设为root,注意如果多个分区含有ntldr文件,set失去作用。10)loopbackloopback命令可用于建立回放设备,如loopbacklo0(hd1,1)/abc.iso可以使用lo0设备来访问abc.iso里的内容,比如说,可以从abc.iso里的软盘映像中启动loopbacklo0(hd1,1)/aa.isolinux(lo0)/memdiskinitrd(lo0)/abc.img要删除某一回放设备,可以使用-d参数:loopback-dlo011)pager分页显示。setpager=1显示满一页时暂停,按space继续setpager=0取消分页显示12)linux用linux命令取代grub中的kernel命令13)chainloader调用另一个启动器,如chainloader(hd0,1)+1调用第一硬盘第一分区引导扇区内的启动器,可以是windows或linux的启动器14)grub2挂载软盘镜像menuentryBootfromDOSIMG{linux16/memdiskinitrd16/win98.img}对非标准的1.4M和2.8M的其他镜像挂载方法,需要指定CHS参数:menuentryBootfromIMG{linux16/memdiskc=*h=*s=*floppyinitrd16/xxx.img}三、grub2配置文件详解grub2改用grub.cfg为配置文件,配置文件包含以下基本内容:(红色为解释部分)###BEGIN/etc/grub.d/00_header###load_env#加载变量,如果在grubenv保存变量,则启动时装载setdefault=0#设置默认引导项,默认值为0insmodext2#插入文件系统支持的模块,除了用作启动的分区外,其他分区格式可在menuentry底下再添加setroot=(hd0,8)#指定系统root分区,也就是/分区search--no-floppy--fs-uuid--set2d61e5f9-1d2a-4167-a6f1-b991ba00878b#指定uuid=2d61e5f9-1d2a-4167-a6f1-b991ba00878b的分区为root分区,如果前面的分区号(hd0,8)的#uuid与这里的uuid一致,这两句作用一样,如果不一致,则指定uuid的起作用。ifloadfont/usr/share/grub/unicode.pf2;then#设置终端字体,unicode.pf2支持中文字符显示setgfxmode=640x480#设置显示分辨率,默认为640x480,可用800x600,1024x768,建议跟你想设定的图片大小一致insmodgfxterm#插入终端模块gfxterm,支持中文字符显示和支持24位图像insmodvbe#插入vbe模块,GRUB2引入模块化机制,要使用它,需要在这里加入ifterminal_outputgfxterm;thentrue;else#Forbackwardcompatibilitywithversionsofterminal.modthatdon't#understandterminal_outputterminalgfxterm#设定grub2终端为gfxtermfifisettimeout=10#设定默认启动前等待时间,默认为10秒###END/etc/grub.d/00_header######BEGIN/etc/grub.d/05_debian_theme###setmenu_color_normal=white/black#设定菜单字体及背景颜色setmenu_color_highlight=black/blue#设定选择项字体及背景颜色#如果使用默认,背景将完全被蓝色挡住了,需要修改blue为black,背景图片才能显示###END/etc/grub.d/05_debian_theme######BEGIN/etc/grub.d/10_linux####10_linux为系统自动添加的当前root分区linux引导项#每个菜单项要包括menuentry双引号和大括号{}才完整,否则不显示菜单menuentryUbuntu,Linux2.6.31-10-generic{setquiet=1insmodext2setroot=(hd0,8)search--no-floppy--fs-uuid--set2d61e5f9-1d2a-4167-a6f1-b991ba00878b#这句与setroot=(hd0,8)效果一样,可删除其一,二者不一致以这句为准linux/boot/vmlinuz-2.6.31-10-genericroot=UUID=2d61e5f9-1d2a-4167-a6f1-b991ba00878broquietsplash#不喜欢看到一长串的,roo=UUID=***可用root=/dev/sda8(/分区的分区号)代替initrd/boot/initrd.img-2.6.31-10-generic}…###END/etc/grub.d/10_linux####20_memtest86+为系统自动添加的内存测试菜单项###BEGIN/etc/grub.d/20_memtest86+###menuentryMemorytest(memtest86+){linux16/boot/memtest86+.bin}menuentryMemorytest(memtest86+,serialconsole115200){linux16/boot/memtest86+.binconsole=ttyS0,115200n8}###END/etc/grub.d/20_memtest86+####30_os-prober或30_others为系统自动查找并添加其他系统菜单项,按windows,linux,macos顺序#查找并添加,支持windows7识别###BEGIN/etc/grub.d/30_os-prober######END/etc/grub.d/30_os-prober######BEGIN/etc/grub.d/30_otheros####ThisentryautomaticallyaddedbytheDebianinstallerforanon-linuxOS#on/dev/sda1menuentryMicrosoftWindowsXPProfessional{setroot=(hd0,1)search--no-floppy--fs-uuid--sete852-230bdrivemap-s(hd0)$root#对以ntldr引导的系统如win2000,xp,win2003,因其引导机制只能从第一硬盘启动,系统会自动添加#映射命令,对vista和win7就没有这句命令chainloader+1}###END/etc/grub.d/30_otheros####40_custom为自定义的启动项,如启动cdlinux###BEGIN/etc
本文标题:grub2使用教程
链接地址:https://www.777doc.com/doc-2875422 .html