首页 Grub2基础教程

Grub2基础教程

举报
开通vip

Grub2基础教程 Grub2基础教程 smallapple 目录 一、 grub2 新特性 二、 grub2 安装与启动 三、 grub2 配置文件详解 四、脚本修改 五、使用 grub2 常见错误及修复方法 一、grub2新特性 1、grub2和 grub有很多不同的地方: a)图形接口 b)使用了模块机制,通过动态加载需要的模块来扩展功能 c)支持脚本语言,例如条件判断,循环、变量和函数 d)支持...

Grub2基础教程
Grub2基础教程 smallapple 目录 一、 grub2 新特性 二、 grub2 安装与启动 三、 grub2 配置文件详解 四、脚本修改 五、使用 grub2 常见错误及修复方法 一、grub2新特性 1、grub2和 grub有很多不同的地方: a)图形接口 b)使用了模块机制,通过动态加载需要的模块来扩展功能 c)支持脚本语言,例如条件判断,循环、变量和函数 d)支持rescue模式,可用于系统无法引导的情况 e)国际化语言。包括支持非ASCII的字符集和类似gettext的消息分类,字体,图形控制台等等 f)有一个灵活的命令行接口。如果没有配置文件存在,GRUB会自动进入命令模式 g)针对文件系统、文件、设备、驱动、终端、命令、分区表、os loder的模块化、层次化、基于对象的 框架 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键可查看所有可用的命令。 在命令行状态,可以根据需要加载或移除相应模块,也可用来启动在菜单没有显现的的系统。 比如,在第一硬盘的第一分区上装有 windows xp系统,但在菜单上没显示出来,我们可以命令行状态下 输入命令启动: grub>set root=(hd0,1) grub>chainloader +1 grub>boot 又比如启动第二硬盘第一逻辑分区上的ubuntu系统: grub>set root=(hd1,5) grub>linux /boot/vmlinuz-xxx-xxx root=/dev/sdb5 grub>initrd /boot/initrd.img-xxx-xxx grub>boot 其中内核vmlinuz和 initrd.img的版本号可用按Tab键自动查看。 2、下面介绍下在grub2中一些常用的命令 1)help 查看命令用法,如 help search:查看 search命令详细用法 2)set 设置变量值,如 set default=0 set timeout=5 set root=(hd0,3)等等 需要调用变量AA的值时,使用${AA},如set root=(hd1,1),则${root}=(hd1,1) 3)default 定义默认引导的操作系统。0 表示第一个操作系统,1表示第2个,依此类推 4)timeout 定义在时间内用户没有按下键盘上的某个按键,自动引导default指定的操作系统。 5)root 指定用于启动系统的分区。 6)insmod和 rmmod 加载或移除某模块,如 insmod jpeg insmod png insmod ntfs rmmod png等 7)drivemap drivemap兼容 grub的 map,主要用于只能从第一硬盘(hd0)引导启动的系统如 win2000 xp 2003,比 如要添加第二硬盘第一分区上的xp系统: menuentry "Windows XP" { set root=(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)search search -f /ntldr 列出根目录里包含ntldr文件的分区,返回为分区号 search -l LINUX 搜索 label是 LINUX的分区。 search --set -f /ntldr 搜索根目录包含ntldr文件的分区并设为 root,注意如果多外分区含有ntldr文件, set失去作用。 10)loopback loopback命令可用于建立回放设备,如 loopback lo0 (hd1,1)/abc.iso 可以使用lo0设备来访问abc.iso里的内容,比如说,可以从abc.iso里的软盘映像中启动 loopback lo0 (hd1,1)/aa.iso linux (lo0)/memdisk initrd (lo0)/abc.img 要删除某一回放设备,可以使用-d参数: loopback -d lo0 11)pager 分页显示。 set pager=1 显示满一页时暂停,按 space继续 set pager=0 取消分页显示 12)linux 用 linux命令取代 grub中的 kernel命令 13)chainloader 调用另一个启动器,如 chainloader (hd0,1)+1 调用第一硬盘第一分区引导扇区内的启动器,可以是 windows或 linux的启动器 三、grub2配置文件详解 grub2改用grub.cfg为配置文件,配置文件应包含以下内容: ### BEGIN /etc/grub.d/00_header ### load_env #加载变量,如果在grubenv保存变量,则启动时装载 set default="0" #设置默认引导项,默认值为 0 if [ ${prev_saved_entry} ]; then saved_entry=${prev_saved_entry} save_env saved_entry prev_saved_entry= save_env prev_saved_entry fi # 可以用save_env pre_saved_entry把变量值存入grubenv,也可用save_env default把 default值存 入 grubenv,供 load_env 调用。 insmod ext2 #插入文件系统支持的模块,除了用作启动的分区外,其他分区格式可在menuentry底下再添加 set root=(hd0,8) # 指定系统root分区,也就是 / 分区 search --no-floppy --fs-uuid --set 2d61e5f9-1d2a-4167-a6f1-b991ba00878b #指定 uuid=2d61e5f9-1d2a-4167-a6f1-b991ba00878b的分区为 root分区,如果前面的分区号(hd0,8)的 #uuid与这里的uuid一致,这两句作用一样,如果不一致,则指定 uuid的起作用。 if loadfont /usr/share/grub/unicode.pf2 ; then #设置终端字体,unicode.pf2支持中文字符显示 set gfxmode=640x480 #设置显示分辨率,默认为640x480,可用 800x600,1024x768,建议跟你想设定的图片大小一致 insmod gfxterm #插入终端模块gfxterm,支持中文字符显示和支持24位图像 insmod vbe #插入vbe模块,GRUB2引入模块化机制,要使用它,需要在这里加入 if terminal_output gfxterm ; then true ; else # For backward compatibility with versions of terminal.mod that don't # understand terminal_output terminal gfxterm #设定 grub2终端为 gfxterm fi fi set timeout=10 #设定默认启动前等待时间,默认为 10秒 ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/05_debian_theme ### set menu_color_normal=white/black #设定菜单字体及背景颜色 set menu_color_highlight=black/blue #设定选择项字体及背景颜色 #如果使用默认,背景将完全被蓝色挡住了,需要修改blue为 black,背景图片才能显示 ### END /etc/grub.d/05_debian_theme ### ### BEGIN /etc/grub.d/10_linux ### #10_linux为系统自动添加的当前 root分区linux引导项 #每个菜单项要包括menuentry双引号" "和大括号{ }才完整,否则不显示菜单 menuentry "Ubuntu, Linux 2.6.31-10-generic" { set quiet=1 insmod ext2 set root=(hd0,8) search --no-floppy --fs-uuid --set 2d61e5f9-1d2a-4167-a6f1-b991ba00878b #这句与set root=(hd0,8)效果一样,可删除其一,二者不一致以这句为准 linux /boot/vmlinuz-2.6.31-10-generic root=UUID=2d61e5f9-1d2a-4167-a6f1-b991ba00878b ro quiet splash #不喜欢看到一长串的, 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+ ### menuentry "Memory test (memtest86+)" { linux16 /boot/memtest86+.bin } menuentry "Memory test (memtest86+, serial console 115200)" { linux16 /boot/memtest86+.bin console=ttyS0,115200n8 } ### END /etc/grub.d/20_memtest86+ ### #30_os-prober或30_others为系统自动查找并添加其他系统菜单项,按windows,linux,macos顺序 #查找并添加,支持 windows 7识别 ### BEGIN /etc/grub.d/30_os-prober ### ### END /etc/grub.d/30_os-prober ### ### BEGIN /etc/grub.d/30_otheros ### # This entry automatically added by the Debian installer for a non-linux OS # on /dev/sda1 menuentry "Microsoft Windows XP Professional" { set root=(hd0,1) search --no-floppy --fs-uuid --set e852-230b drivemap -s (hd0) $root #对以ntldr引导的系统如 win2000,xp,win2003,因其引导机制只能从第一硬盘启动,系统会自动添加 #映射命令,对vista和 win7就没有这句命令 chainloader +1 } ### END /etc/grub.d/30_otheros ### #40_custom为自定义的启动项,如启动cdlinux ### BEGIN /etc/grub.d/40_custom ### menuentry "CDLinux"{ set root=(hd0,8) linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8 initrd /CDlinux/initrd } ### END /etc/grub.d/40_custom ### 定制个性化的配置文件,可以加入背景图片,使用中文字符,让启动画面独具特色,而不是单调的黑、 白、蓝三色。展示一张启动画面: 四、脚本修改 该怎样定制个性化的配置文件呢? 系统安装完成后,用户就会发现/boot/grub/grub.cfg文件只有root权限可读,如果要直接修改 grub.cfg文件,要先修改其权限。好不容易把grub.cfg修改好了,系统内核或 grub升级时,会自动执 行update-grub,grub.cfg文件就会被打回原形,如何保证修改后的配置文件能一直保留下来呢? 其实不用修改grub.cfg,只要把个性化配置写入/etc/default/目录下的grub和/etc/gurb.d目录下 的脚本文件,以后不管升级内核或者是升级 grub所执行的update-grub,都会按要求创建个性化的 grub.cfg。 1、首先看下 /etc/default/grub,先从应用程序-附件里打开终端,输入 sudo gedit /etc/default/grub 用户密码 看看打开的文件可作什么修改: 2、再看下/etc/grub.d目录下的脚本文件: 00_header,05_debian_theme,10_linux,20_memtest86+,30_os-prober,40_custom这五个脚本对应 grub.cfg上的各个部分,有的版本的grub可能把 30_os-prober分出另一部分为30_os-others,这并不 影响。怎样修改这些脚本文件才能保证不会破坏 update-grub的运行,又能让生成的grub.cfg合乎意愿 呢?其实很简单,只要在脚本文件中找到 cat << EOF ******** ******** ******** EOF 这类语句,EOF中间的文本会直接写入grub.cfg中相应位置,所以个性化的语句添加在这地方就可以了。 其他使用变量的语句不要随变做修改,除非你清楚修改后会有什么结果。 1)看看 00_header,一样在终端中打开sudo gedit /etc/grub.d/00_header,找到 39行-48行这块 再看看最后这一段 2)05_debian_theme修改字体及背景颜色 先打开文件 sudo gedit /etc/grub.d/05_debian_theme 看第 7-10行 3)10_linux这部分是自动搜索当前系统,建立当前系统的启动菜单,包括系统头,内核等信息,不要 随便修改,要使用个性菜单名,比如中文菜单,可适当添加: 先打开文件 sudo gedit /etc/grub.d/10_linux 看 58-60行 或第111-116行 注意只修改引号内的字符,前面的menuentry,linux_entry和后面的\不要做修改。 4)20_memtest86+自动添加内存测试启动项 打开文件 sudo gedit /etc/grub.d/20_memtest86+ 5)30_os-prober查找其他分区中存在的系统并建立菜单项,依次为windows,linux,macos。 对于单系统,默认会隐藏菜单,可在这里去掉隐藏 先打开文件 sudo gedit /etc/grub.d/30_os-prober 找到 37-59行 如果要添加个性字符,往下找到 cat << EOF menuentry "${LONGNAME} (on ${DEVICE})" { EOF 的地方,在引号中根据需要添加或修改,如改为 "启动 ${LONGNAME}","启动 Linux", "启动 MacOS"等等。 6)40_custom 自定义启动项,按菜单标准格式在后面添加即可,如图 3、ubuntu和 windows双系统,怎样让系统默认为从 windows启动 在/etc/grub.d目录中的脚本文件的文件名都是以数字开头,这确定了在执行update-grub时各文件 内容被执行的顺序,我们只要把 30_os-prober这个文件名的数字 30改为 05到 10之间的数字即可(没多 少可选06、07、08、09),比如改为 08_os-prober,这样创建出来的grub.cfg内的菜单项,windows的 排序就会自动在ubuntu之前。 4、把各项脚本修改保存后,在终端执行 sudo update-grub 再执行 sudo gedit /boot/grub/grub.cfg 看看配置文件是不是和你想要的一样了。 如果有不够满意的地方,重新修改下脚本文件,再执行sudo update-grub 五、使用grub2常见错误及修复方法 1、双系统,重装 windows引起没有ubuntu启动项 使用安装版的 windows重装 windows时会改写mbr,造成 grub丢失,可以用grub4dos引导进入 ubuntu后修复grub或用livecd启动后修复grub。 1)用grub4dos修复ubuntu 先下载最新版的grub4dos,下载地址 http://nufans.net/grub4dos/ ,如果是xp系统,把grub4dos 压缩包内的grldr复制到C盘根目录下,修改boot.ini,在最后加上一行 c:\grldr="grub4dos", 对于vista/win7系统,把压缩包内的grldr.mbr和 grldr复制到C盘根目录下,在C盘 自己建立一个boot.ini文件 ,若有boot隐藏分区的,先给boot分区分配盘符,再把 grldr,grldr.mbr和 boot.ini放在boot分区下,boot.ini内容如下: 然后在根目录新建一个menu.lst,内容为 timeout 0 default 0 title grub2 find --set-root /boot/grub/core.img kernel /boot/grub/core.img boot (有/boot分区的改为 find –set-root /grub/core.img kernel /grub.img) 重启后选择Grub4Dos会自动转入grub2,从grub2菜单项选择ubuntu启动后,在终端执行 sudo grub-install /dev/sda 将 grub装入第一硬盘的mbr,如要装入第二硬盘的mbr把 sda改为 sdb,其他硬盘类推。 至于要把grub装到sda或 sdb或 sdc的 mbr上,需根据自己情况确定,看看要设置哪一 块硬盘为启动盘,就把grub装到那块硬盘的mbr上。 2)用 livecd修复grub 用 ubuntu9.10的 livecd启动后,打开终端 假如你的ubuntu的 / 分区是sda7,又假如 /boot分区是 sda6,用livecd启动, 在终端下输入 sudo -i mount /dev/sda7 /mnt mount /dev/sda6 /mnt/boot (如果没 /boot 单独分区这步跳过) grub-install --root-directory=/mnt/ /dev/sda 和前面一样,要装入第二硬盘的把sda改为 sdb。 如果grub.cfg己丢失,需要重建的还要执行 mount --bind /proc /mnt/proc mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys chroot /mnt update-grub umount /mnt/sys umount /mnt/dev umount /mnt/proc exit 3)用带 grub启动的光盘或 U盘修复 如果手上有grub启动的工具盘,用工具盘启动,在grub菜单上按 c进入命令行状态, 在grub>提示符下输入 grub>find /boot/grub/core.img (有/boot分区的用find /grub/core.img) (hdx,y) (显示查找到的分区号) grub>root (hdx,y) grub>kernel /boot/grub/core.img (/boot分区的用 kernel /grub/core.img) grub>boot 执行boot后能转入grub2菜单,启动ubuntu后,再在ubuntu终端下执行 sudo grub-install /dev/sda (或 sdb,sdc等)修复grub。 如果ubuntu的启动分区使用ext4格式,要有支持ext4格式的grub才能修复。 2、安装时grub没装在mbr上而选择装在linux分区的pbr上,怎么引导ubuntu 1)按前面的方法一,以grub4dos引导转入grub2。 2)把ubuntu分区/boot/grub目录下的boot.img提取出来,放到C盘根目录下,然后修 改boot.ini,在最后添加一行 C:\boot.img="grub2" 对 vista/7可在C盘新建一个boot.ini,内容为 [boot loader] timeout=0 default=c:\boot.img [operating systems] C:\boot.img="grub2" 重启后选择grub2就可进入grub2菜单。 3、由于分区调整引起分区号或分区UUID改变造成的grub2不能正常启动 己安装好系统,对硬盘再次进行分区调整时可能会改变现有分区的分区号发生变化,或 者某种原因改变启动分区的UUID,都会造成 grub2不能正常启动,而启动进入修复模式 (grub rescue),这时就要对grub进行修复。 1)用ubuntu9.10的 livecd光盘启动,进入试用桌面系统后,再修复grub,操作方法如 第一种情况的第二种方法— 2)在rescue模式下启动并修复 由于分区问题,启动时会自动进入rescue模式,只要grub核心文件还在分区内,就能 由 rescue模式转到normal模式,进而通过命令进入系统。下面这个就是rescue介面: 由于在rescue模式下,只有少量的基本命令可用,必须通过一定的操作才能加载正常模 块,然后进入正常模式。 rescue模式下可使用的命令有:set,ls,insmod,root,prefix(设置启动路径) 先假设grub2的核心文件在(hd0,8)分区,再来看看怎样从rescue模式进入从(hd0,8)启 动的正常模式(normal)。 在 rescue模式下search命令不能用,对不清楚 grub2文件处于哪个分区的,可以用ls 命令查看,比如 ls (hd0,8)/ 查看(hd0,8)分区根目录,看看有没有boot文件夹 ls (hd0,8)/boot/ 查看(hd0,8)分区的/boot目录下文件 ls (hd0,8)/boot/grub/ 查看(hd0,8)分区/boot/grub目录下文件 通过文件查看,可以确定 grub2核心文件处于哪个分区,接下来就可以进行从rescue到 normal的转变动作: 1)分区号(hd0,8)在单独使用时可以不加小括弧,在使用路径是必须加小括弧,如第 2和第 3步。 2)由于grub2版本的的不一致,有的可能在第9步 insmod normal.mod加载正常模 块后直接进入normal模式,即出现了normal grub>的提示符,这种情况就不能执行第10步, 即可以跳过normal命令的输入。 3)虽然输入normal命令会出现菜单,但由于缺少加载内核的 Linux命令,直接从菜 单不能进入系统,需要按 c在命令行继续操作。 4)使用/boot单独分区的,要正确修改路径,如 prefix=(hd0,8)/grub insmod /grub/normal.mod 另外 root=/dev/sda8也要修改根分区的分区号。 5)按 boot启动系统后,再在系统下打开终端,执行命令修复grub 重建配置文件grub.cfg sudo update-grub 重建 grub到第一硬盘mbr sudo grub-install /dev/sda 参考论坛相关资料:http://bbs.znpc.net/forumdisplay.php?fid=57&page=1
本文档为【Grub2基础教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_109590
暂无简介~
格式:pdf
大小:532KB
软件:PDF阅读器
页数:12
分类:互联网
上传时间:2010-05-12
浏览量:10