[UP] add some viki files, knowledge.
[arrow.git] / viki / misc / grub2-install.viki
blob21f427d6306fa1d7da01160cdc2e20d1f2cb8a72
1 ref: http://hi.baidu.com/red_woods/blog/item/828f726d17a961ff431694dd.html
2 下载:
3 http://www.gnu.org/software/grub/grub-2-download.en.html
5 编译:
6 ./configure
7 make
8 sudo make install
9 默认路径为 /usr/local/
11 安装:
12 sudo grub-install /dev/hda    //引导记录安装到mbr
13 sudo grub-install /dev/hda3    //引导记录安装到分区3
14 grub-install 是一个脚本,它完成以下任务:
15 * 调用 grub-mkdevicemap 创建设备映像文件 /boot/grub/device.map
16 * 复制 *.mod *.lst *.img 文件到 /boot/grub/
17 * 调用 grub-probe 自动侦测文件系统类型
18 * 调用 grub-mkimage 生成grub2内核文件 /boot/grub/core.img
19 * 调用 grub-setup 安装引导记录到mbr或分区
21 创建grub菜单:
22 update-grub
23 它也是一个脚本,将根据 /usr/local/etc/grub.d/ 里的文件自动创建 /boot/grub/grub.cfg
24 最后对这个菜单文件手工修改成适合的样子即可
26 ----8<----
27 GRUB2高级教程
29 by bean
30 这个教程介绍GRUB2中的一些高级功能。
32 1、编译和安装
34 首先,使用cvs下载代码:
36 cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub2
38 下载完成后进入工作目录grub2。
40 然后,可以有选择地打上补丁。比如说,要加上ntfs支持的话,可以运行:
41 GRUB2高级教程
43 by bean
44 这个教程介绍GRUB2中的一些高级功能。
46 1、编译和安装
48 首先,使用cvs下载代码:
50 cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub2
52 下载完成后进入工作目录grub2。
54 然后,可以有选择地打上补丁。比如说,要加上ntfs支持的话,可以运行:
56 patch -p0 < grub2-ntfs-u2.diff
58 补丁后运行以下的命令进行编译:
60 ./configurev
61 make
63 然后,利用grub-mkimage定制内核,例如:
65 ./grub-mkimage -d . -o core.img pc fat ntfs
67 如果要转换为grldr.mbr可引导的形式,运行:
69 cat g2ldr.bin core.img > g2ldr
71 注意;grub-mkimage有一个参数--prefix,用来指定启动时grub.cfg和模块文件所在的目录,比如:
73 ./grub-mkimage --prefix=/grub2 -d . -o core.img pc fat ntfs
75 这样在启动时会到/grub2目录里寻找grub.cfg和模块文件。缺省目录是/boot/grub/。
77 在安装时,把core.img或g2ldr拷贝到某一分区FAT/NTFS的根目录,把moddep.lst, commands.lst, fs.lst和*.mod文件拷贝到分区的/boot/grub/目录里。
79 g2ldr可以在NT的启动管理器里引导。首先,利用grubinst生成g2ldr.mbr。
81 grubinst -2 > C:g2ldr.mbr
83 然后,在boot.ini里增加一项:
84 C:g2ldr.mbr="Start GRUB2"
86 也可以安装到MBR里:
88 grub -2 (hd0)
90 这样,下次启动时会引导g2ldr而不是grldr.
92 你也可以在grub4dos里引导grub2,这时使用的是core.img:
94 kernel (hd0,0)/core.img
95 boot
97 2、预编译版本
99 如果觉得自己编译麻烦,可以使用预编译版本,网址是:
101 http://grub4dos.sourceforge.net/grub2/
103 里面的grub2-*.zip文件就是了。
105 该版本打上了所有的补丁(*.diff文件),并且使用了以下的参数配置内核。
107 ./grub-mkimage -d . -o core.img pc fat ntfs
109 补丁说明:
110 grub2-ntfs-u2.diff
111 NTFS文件系统代码的补丁
113 grub2-parser-u2.diff
114 修正了脚本代码的很多bug,建议使用
116 grub2-parser-u2-1.diff
117 在grub2-parser-u2.diff基础上的递增补丁,修正了转义字符的一个小bug
119 3. 配置文件
121 grub2中的配置文件是grub.cfg,它的语法与GRUB Legacy中不太一样。以下是一个例子:
123 set timeout=10
124 set default=0
126 menuentry "Boot First Partition" {
127 set root=(hd0,1)
128 chainloader +1
131 menuentry "Boot Memdisk" {
132 linux (hd0,1)/memdisk
133 initrd (hd0,1)/aa.img
136 注意:grub2中的分区是从(hd0,1)开始的。
138 3. 变量
140 grub2中引入了变量的概念,使用set可以设置变量的值,例如:
142 set AA=1
144 需要调用变量的值时,使用$AA或${AA}。
146 例如:
148 set BB=$AA
150 BB的值被设为1。要注意的是,原来版本的变量赋值有问题,需要使用grub2-parser-u2.diff补丁。
152 grub2的一些功能是利用变量来实现的,例如:
154 timeout
156 缺省的等待时间,相当于grub中的timeout命令。
158 default
160 缺省的菜单项,相当于grub中的timeout命令。
162 pager
163 pager为1时,输出满一个屏幕时会暂停一下,相当于grub中的pager命令。
165 root
166 设置根设备。相当于grub中的root命令。
169 这个变量的值是对上一条命令的执行结果。
171 prefix
172 模块文件和grub.cfg所在的目录。
174 debug
175 这个变量用于调试。部分grub2的代码使用了调试输出,它们在一般情况下是不会显示的,但如果把debug设置为相应的值后,调试信息就会显示。比如说,脚本部分使用了scrīpting关键字。当debug中包含scrīpting时,脚本调试信息就会显现。
177 set debug=scrīpting
179 4. 命令介绍
181 这里主要介绍一些grub2中高级命令,简单的可以使用help来查看用法。
183 4.1、ls命令
184 grub2中的ls命令可以显示设备和文件列表。
187 列出当前的所有设备。
189 ls -l
190 详细列出当前的所有设备。对于分区,会显示其label。
192 ls (hd0,1)/
193 列出分区(hd0,1)根目录的文件。
195 ls -l (hd0,1)/
196 详细列出分区(hd0,1)根目录的文件,会显示文件的大小和是否为目录。
198 4.2、search命令
199 search相当于grub4dos中的find --root,它可以在所有分区里寻找某一文件。
201 search /grub.exe
203 列出所有根目录里包含grub.exe文件的分区。
205 search可以根据分区的label来搜索:
207 search -l WinXP
209 搜索label是WinXP的分区。
211 search可以把搜索的结果保存到某一个变量中。
213 search --set=AA /grub.exe
215 另外,不指定变量的名字时,缺省变量是root
217 search --set /grub.exe
219 另外要注意一点,在匹配项多于一个时,搜索结果不会保存到变量中。
221 4.3 loopback命令
223 loopback命令可用于建立回放设备:例子:
225 loopback lo0 (hd0,1)/aa.iso
227 然后可以使用lo0设备来访问aa.iso里的内容,比如说,可以从aa.iso里的软盘映像中启动:
229 loopback lo0 (hd0,1)/aa.iso
230 linux (lo0)/memdisk
231 initrd (lo0)/aa.img
233 当使用硬盘映像时,要加上-p参数。
235 loopback -p lo0 (hd0,1)/aa.dsk
237 这时,映像中的第一个分区就可以使用(lo0,1)来访问。
239 loopback命令可以嵌套使用。比如说,列表第一个分区里的硬盘映像aa.dsk里的光盘映像aa.iso里的软盘映像aa.img里的根目录的文件:
241 loopback -p lo0 (hd0,1)/aa.dsk
242 loopback lo1 (lo0,1)/aa.iso
243 loopback lo2 (lo1)/aa.img
244 ls -l (lo2)/
246 回放设备的名字可以随意设置,比如说,可以使用loop作为名字,访问时使用(loop)就可以了。
248 要删除某一回放设备,可以使用-d参数:
250 loopback -d lo0
252 5. 图形终端和中文显示
254 可以使用以下的命令启动图形终端:
256 insmod vbe
257 font (hd0,1)/unifont.pff
258 insmod gfxterm
259 terminal gfxterm
261 unifont.pff是字体文件,在sf上有一个可以直接使用的版本,它是使用以下的方法制作的。
263 首先,下载unifont字体文件:
265 http://czyborra.com/unifont/unifont.hex.gz
267 解压后得到unifont.hex文件。
269 grub2的util目录中有一个工具,可以把unifont.hex转换为grub2可以使用的格式:
271 ruby util/unifont2pff.rb unifont.hex > unifont.pff
273 另外,在转换时可以选择某一个子区域。
275 ruby util/unifont2pff.rb 0-127 unifont.hex > unifont.pff
277 这样,生成的字体文件就只包含ASCII的字符了。sf上的unifont_ascii.pff就是这样生成的。
279 进入了图形终端后,就可以显示中文了。可以使用ls命令,列表一下分区中的文件,可以看到中文目录和文件的名字了。如果目录是以英文开始,可以输入开始字符,然后按TAB自动完成。利用这个办法,即使没有输入法,也可以进入中文的目录里。
281 磁盘的label也可以是中文的,使用ls -l就可以显示出来,但是FAT文件系统中有bug,中文label不能正确显示,NTFS则没有问题。
283 当然,也可以在grub.cfg使用中文,包括菜单的标题和文件名参数。但是,要记得使用UTF-8编码。另外,如果你是使用Windows的写字板来把ANSI转换为UTF-8的话,在文件的一开始会多出三个字符 EF BB BF, 需要使用UltraEdit等二进制编辑工具把它们去掉。