grub2的启动方式和最近更新(2008-08-23)
-
- 帖子: 238
- 注册时间: 2008-06-03 12:25
grub2的启动方式和最近更新(2008-08-23)
启动方式
下载grub2可以到以下网址:
http://grub4dos.sourceforge.net/grub2/
http://nufans.net/grub4dos/grub2/
这是光盘启动版,可以用不同方式来启动。
1、从光盘启动
只要刻录iso文件就可以了
2、从XP/Vista的启动管理器里启动
你需要把g2ldr.mbr,g2ldr以及/boot/grub目录拷贝到任何一个FAT/NTFS/EXT2根目录下,然后在boot.ini里增加相应的启动项就可以了,例如:
C:\g2ldr.mbr="Start GRUB2"
在vista里启动时,可以直接把g2ldr作为启动文件,这样就省去了中间步骤g2ldr.mbr,成功率也会增加。有趣的是,vista里尽管使用BCD,但其实也会读取boot.ini的内容。因此你可以在C:\下建立一个boot.ini文件:
[boot loader]
timeout=30
[operating systems]
C:\g2ldr="Start GRUB2 (vista)"
该项目会自动加到vista的启动菜单里,你就不需要使用bcdedit来增加启动项了。
3、从mbr里启动 (传统方式)
你需要把/boot/grub目录拷贝到任何一个grub2支持的文件系统的根目录下,进入/boot/grub目录,利用里面的grub-mkimage.exe 生成定制的core.img (关于grub-mkimage更详细的用法请参照后面)。
grub-mkimage -d . -o core.img biosdisk pc ntfs
mbr的空间有限,因此不要加过多的模块。一般来说,只需要biosdisk,pc和/boot/grub目录所在的文件系统的模块就行了。
然后,你还要配置device.map文件,在光盘根目录下有一个例子:
(hd0) //./PHYSICALDRIVE0
device.map指定的是grub2启动后的设备和当前系统设备的对应关系。//./PHYSICALDRIVE0是第一只硬盘。第二只硬盘就是//./PHYSICALDRIVE1,如此类推。
比如说,你想把grub2安装到u盘的mbr里。假设你只有一个固定硬盘,u盘就是第二只硬盘//./PHYSICALDRIVE1。在启动时,u盘会作为(hd0)。于是,device.map就应该这样写:
(hd0) //./PHYSICALDRIVE1
又例如,你想把grub2安装到硬盘映像aa.dsk的mbr里,然后用qemu来测试。这时,device.map就应该是:
(hd0) aa.dsk
还有就是,如果你对于硬盘和哪个设备对应不是很清楚的话,可以用grub-fstest来测试一下:
grub-fstest //./PHYSICALDRIVE1 ls -l
这会列出//./PHYSICALDRIVE1里的所有分区信息,你可以和硬盘的内容对照一下,以防止出错。
最后一步就是真正安装了,使用以下的命令:
grub-setup -d . -m device.map -r (hd0,1) -v (hd0)
device.map就是以上建立的映射文件,(hd0,1)是/boot/grub所在的分区。grub2的分区从1算起的,主分区1-4,扩展分区从5开始(其实就是grub4dos里的分区号+1)。如果不清楚地话,也可以用grub-fstest测试一下,它会显示分区号的。
以上步骤可能有点麻烦。不过,如果安装到mbr的话,还是推荐使用传统方式。它会把grub2的文件系统模块直接嵌入到mbr里,其兼容性比grubinst里的汇编代码要强。
要注意的是,某些版本的vista使用了bitlocker,这时你不能修改mbr的内容,否则就无法启动vista了。
4、从mbr里启动 (grubinst方式)
你需要把g2ldr和/boot/grub目录拷贝到任何一个FAT/NTFS/EXT2根目录下,然后使用grubinst来安装mbr启动代码,例如:
grubinst -2 (hd0)
如果使用图形界面grubinst_gui的话,只需要选择"grub第二版"选项就可以了。
5、从PXE启动
你需要把g2pxe和/boot/grub目录拷贝到tftp服务器上,然后以g2pxe作为启动文件就可以了。
6、从EFI启动
如果你有相应的硬件,如MacBook,那也可以从EFI启动。把/EFI/boot目录拷贝到FAT/EXT2/HFS+分区里,rEFIt就可以自动找到grub并显示启动项。关于在MacBook里启动的详细信息可以参考以下文章:
http://grub.enbug.org/TestingOnMacbook
定制grub2
1、定制内核
grub2的内核可以定制的,启动光盘里包含了配置grub2内核的工具grub-mkimage.exe。要注意的是,该版本使用cygwin来编译的,它运行时需要cygwin1.dll。如果没有安装cygwin的话,把光盘根目录里的cygwin1.dll文件拷贝到PATH能找到的目录就可以了。
使用时, 进入/boot/grub目录,然后运行以下命令:
grub-mkimage -d . -o core.img biosdisk pc gpt iso9660 fat ntfs ext2 pxe
然后生成不同的启动文件:
copy /B lnxboot.img + core.img g2ldr
copy /B pxeboot.img + core.img g2pxe
copy /B cdboot.img + core.img grub2cd.bin
要制作启动光盘时,使用以下命令:
mkisofs -R -J -no-emul-boot -boot-info-table -boot-load-size 4 -b grub2cd.bin -o grub2.iso cdroot/
你可以根据需要,自行增加或者减少模块,以上模块的作用是:
biosdisk: 使用INT 13来访问硬盘。你可以使用ata,它不需要通过INT 13,直接访问硬件。不过它的兼容性不是很好。
pc, gpt: 处理不同分区方式的模块。其它的还有apple, amiga, sun等。
iso9660 fat ntfs ext2:文件系统模块。grub2还可以把某些文档文件作为文件系统来访问,比如说cpio模块可以处理cpio和tar文件。
pxe:pxe虚拟文件系统模块,用于pxe启动。
core.img里只需要包含可以访问/boot/grub目录的模块就够了,其他的会在运行时自动加载。
EFI版本使用的是另外一个grub-mkimage.exe,它在/EFI/grub目录下,利用它可以生成efi映像文件grub.efi:
grub-mkimage -d . -o grub.efi pc gpt iso9660 fat ntfs ext2 hfsplus
2、设置缺省目录
grub-mkimage 还可以设置缺省目录。比如说,你想把文件放到/grub2而不是/boot/grub里,可以使用以下的命令:
grub-mkimage -d . -o core.img -p /grub2 biosdisk pc gpt iso9660 fat ntfs ext2 pxe
3、文件打包
grub2里还有一个高级的功能,你可以把所有需要的模块,文件等放到一个文件系统映像里,然后加到core.img里。比如说,你可以把command.lst,fs.lst,grub.cfg, normal.mod和其他需要的mod文件打包到一个cpio文档里,然后用以下的命令生成core.img:
grub-mkimage -d . -o core.img -p (memdisk)/ -m cpio_image memdisk cpio
启动后,文档里的内容可以用(memdisk)来访问。
grub2更新记录
grub2每次都有很多更新的,我下面只列出最核心的新增功能,其他改动请参考Changelog文件。
2008-08-23
1、增加 Mingw 支持
新版本的光盘使用mingw编译,生成的exe可以直接运行,不在需要cygwin的dll了。不过,设备名有些改变。cygwin里第一个硬盘是/dev/sda,而mingw使用windows自身的特殊设备名,也就是//./PHYSICALDRIVE0。
2、完善 raid 支持
新版本支持Linux soft raid 0,1,4,5,6,10,raid 5/6 支持4种layout和错误恢复(raid5最多可以有一只硬盘丢失或者损坏,raid6最多可以有两只)。raid 10支持near, far和offset 三种layout. 除了soft raid外,它还支持Nvidia Fake Raid.
3、增加新命令date
date可用于显示和修改当前时间,另外还有一个相关的模块datehook:
insmod datehook
这样,会注册时间变量YEAR, MONTH, DAY等,你可以用于输出,或者用脚本语言进行比较。时间变量是及时更新的,每次读出都是日期/时间的当前值。
4、修改pxe命令的用法。
pxe控制命令参数变为--info, --blksize 和 --unload,也修正了pxe的一些bug。
2008-08-03
1、支持大的memdisk映像
新版本可以支持~576K的core.img(其实就是所有的常规内存),考虑lzma压缩的话,原始大小大约可以达到~1152K。你可以把很多的东西包进内核里。
2、支持multiboot重定位
以前multiboot loader没有重定位,因此当multiboot映像和grub2系统的地址有重叠时,就不能装载了。新版本解决了这个问题,现在你可以在grub2里运行grub invader了(一个使用multiboot启动的简单控制台游戏)。
3、新的光盘里包含了grub-setup.exe,你可以使用传统方式把grub2安装到mbr。
2008-08-02
1、增加PXE支持
新版可以用于pxe启动,启动方式清参考前面。
pxe启动后,可以使用pxe命令控制pxe的参数:
pxe info
显示当前pxe的信息
pxe blksize size
设置tftp传输块的大小,最小值是512,最大值是1432
pxe unload
卸掉pxe的运行环境
2、增加命令crc
该命令可以计算某个文件的crc32值,在测试文件系统问题时比较实用。例如:
crc (hd0,1)/ntldr
3、增加文件系统缓冲模块bufio
grub2里磁盘读取是有缓冲的,不过文件系统没有,这导致某些操作的效率比较低。新版本增加以文件为基础的缓冲,大大加快了背景图片和字体文件的读取速度。
2008-07-25
1,cygwin支持
最新的svn代码可以不经修改地在cygwin下编译。bootcd的版本就是使用cygwin编译,并且把一些重要的工具也加上了,比如说grub-mkimage.exe。
2,64-bit EFI支持
新版本grub2支持x86_64的EFI,比较新的Macbook都是使用64位EFI。不过,编译64位EFI只能在linux下,我没有把二进制版本加到bootcd里。
bootcd里包含32位EFI映像,它也是使用cygwin编译的,使用时把它们复制到相应的目录就行了。
3, 保存环境变量
新版本grub2支持保存环境变量的值。首先,你需要创建一个grubenv文件并放到grub目录里,例如/boot/grub。bootcd里就有一个grubenv,你也可以使用grub-editenv来创建。
grub-editenv grubenv create
grub-editenv还有其他的功能,比如说;
a. 显示grubenv里存储的变量:
grub-editenv grubenv ls
b. 设置grubenv里变量的值
grub-editenv grubenv set default=1
然后,在grub的配置文件grub.cfg里,使用以下的命令就可以装载grubenv里的变量了:
load_env
需要保存变量值时,使用save_env,例如:
save_env default
这就把default的值保存到grubenv里,下次启动时用load_env就会读取新的值了。
4. LZMA压缩
新的core.img使用lzma进行压缩,其效果比原来lzo要好得多。
5. ext4支持
新版本grub2支持ext4文件系统。
6. uuid支持
新版本grub2支持uuid。使用ls -l可以查看文件系统的uuid。search命令也可以按照uuid来进行搜索。
下载grub2可以到以下网址:
http://grub4dos.sourceforge.net/grub2/
http://nufans.net/grub4dos/grub2/
这是光盘启动版,可以用不同方式来启动。
1、从光盘启动
只要刻录iso文件就可以了
2、从XP/Vista的启动管理器里启动
你需要把g2ldr.mbr,g2ldr以及/boot/grub目录拷贝到任何一个FAT/NTFS/EXT2根目录下,然后在boot.ini里增加相应的启动项就可以了,例如:
C:\g2ldr.mbr="Start GRUB2"
在vista里启动时,可以直接把g2ldr作为启动文件,这样就省去了中间步骤g2ldr.mbr,成功率也会增加。有趣的是,vista里尽管使用BCD,但其实也会读取boot.ini的内容。因此你可以在C:\下建立一个boot.ini文件:
[boot loader]
timeout=30
[operating systems]
C:\g2ldr="Start GRUB2 (vista)"
该项目会自动加到vista的启动菜单里,你就不需要使用bcdedit来增加启动项了。
3、从mbr里启动 (传统方式)
你需要把/boot/grub目录拷贝到任何一个grub2支持的文件系统的根目录下,进入/boot/grub目录,利用里面的grub-mkimage.exe 生成定制的core.img (关于grub-mkimage更详细的用法请参照后面)。
grub-mkimage -d . -o core.img biosdisk pc ntfs
mbr的空间有限,因此不要加过多的模块。一般来说,只需要biosdisk,pc和/boot/grub目录所在的文件系统的模块就行了。
然后,你还要配置device.map文件,在光盘根目录下有一个例子:
(hd0) //./PHYSICALDRIVE0
device.map指定的是grub2启动后的设备和当前系统设备的对应关系。//./PHYSICALDRIVE0是第一只硬盘。第二只硬盘就是//./PHYSICALDRIVE1,如此类推。
比如说,你想把grub2安装到u盘的mbr里。假设你只有一个固定硬盘,u盘就是第二只硬盘//./PHYSICALDRIVE1。在启动时,u盘会作为(hd0)。于是,device.map就应该这样写:
(hd0) //./PHYSICALDRIVE1
又例如,你想把grub2安装到硬盘映像aa.dsk的mbr里,然后用qemu来测试。这时,device.map就应该是:
(hd0) aa.dsk
还有就是,如果你对于硬盘和哪个设备对应不是很清楚的话,可以用grub-fstest来测试一下:
grub-fstest //./PHYSICALDRIVE1 ls -l
这会列出//./PHYSICALDRIVE1里的所有分区信息,你可以和硬盘的内容对照一下,以防止出错。
最后一步就是真正安装了,使用以下的命令:
grub-setup -d . -m device.map -r (hd0,1) -v (hd0)
device.map就是以上建立的映射文件,(hd0,1)是/boot/grub所在的分区。grub2的分区从1算起的,主分区1-4,扩展分区从5开始(其实就是grub4dos里的分区号+1)。如果不清楚地话,也可以用grub-fstest测试一下,它会显示分区号的。
以上步骤可能有点麻烦。不过,如果安装到mbr的话,还是推荐使用传统方式。它会把grub2的文件系统模块直接嵌入到mbr里,其兼容性比grubinst里的汇编代码要强。
要注意的是,某些版本的vista使用了bitlocker,这时你不能修改mbr的内容,否则就无法启动vista了。
4、从mbr里启动 (grubinst方式)
你需要把g2ldr和/boot/grub目录拷贝到任何一个FAT/NTFS/EXT2根目录下,然后使用grubinst来安装mbr启动代码,例如:
grubinst -2 (hd0)
如果使用图形界面grubinst_gui的话,只需要选择"grub第二版"选项就可以了。
5、从PXE启动
你需要把g2pxe和/boot/grub目录拷贝到tftp服务器上,然后以g2pxe作为启动文件就可以了。
6、从EFI启动
如果你有相应的硬件,如MacBook,那也可以从EFI启动。把/EFI/boot目录拷贝到FAT/EXT2/HFS+分区里,rEFIt就可以自动找到grub并显示启动项。关于在MacBook里启动的详细信息可以参考以下文章:
http://grub.enbug.org/TestingOnMacbook
定制grub2
1、定制内核
grub2的内核可以定制的,启动光盘里包含了配置grub2内核的工具grub-mkimage.exe。要注意的是,该版本使用cygwin来编译的,它运行时需要cygwin1.dll。如果没有安装cygwin的话,把光盘根目录里的cygwin1.dll文件拷贝到PATH能找到的目录就可以了。
使用时, 进入/boot/grub目录,然后运行以下命令:
grub-mkimage -d . -o core.img biosdisk pc gpt iso9660 fat ntfs ext2 pxe
然后生成不同的启动文件:
copy /B lnxboot.img + core.img g2ldr
copy /B pxeboot.img + core.img g2pxe
copy /B cdboot.img + core.img grub2cd.bin
要制作启动光盘时,使用以下命令:
mkisofs -R -J -no-emul-boot -boot-info-table -boot-load-size 4 -b grub2cd.bin -o grub2.iso cdroot/
你可以根据需要,自行增加或者减少模块,以上模块的作用是:
biosdisk: 使用INT 13来访问硬盘。你可以使用ata,它不需要通过INT 13,直接访问硬件。不过它的兼容性不是很好。
pc, gpt: 处理不同分区方式的模块。其它的还有apple, amiga, sun等。
iso9660 fat ntfs ext2:文件系统模块。grub2还可以把某些文档文件作为文件系统来访问,比如说cpio模块可以处理cpio和tar文件。
pxe:pxe虚拟文件系统模块,用于pxe启动。
core.img里只需要包含可以访问/boot/grub目录的模块就够了,其他的会在运行时自动加载。
EFI版本使用的是另外一个grub-mkimage.exe,它在/EFI/grub目录下,利用它可以生成efi映像文件grub.efi:
grub-mkimage -d . -o grub.efi pc gpt iso9660 fat ntfs ext2 hfsplus
2、设置缺省目录
grub-mkimage 还可以设置缺省目录。比如说,你想把文件放到/grub2而不是/boot/grub里,可以使用以下的命令:
grub-mkimage -d . -o core.img -p /grub2 biosdisk pc gpt iso9660 fat ntfs ext2 pxe
3、文件打包
grub2里还有一个高级的功能,你可以把所有需要的模块,文件等放到一个文件系统映像里,然后加到core.img里。比如说,你可以把command.lst,fs.lst,grub.cfg, normal.mod和其他需要的mod文件打包到一个cpio文档里,然后用以下的命令生成core.img:
grub-mkimage -d . -o core.img -p (memdisk)/ -m cpio_image memdisk cpio
启动后,文档里的内容可以用(memdisk)来访问。
grub2更新记录
grub2每次都有很多更新的,我下面只列出最核心的新增功能,其他改动请参考Changelog文件。
2008-08-23
1、增加 Mingw 支持
新版本的光盘使用mingw编译,生成的exe可以直接运行,不在需要cygwin的dll了。不过,设备名有些改变。cygwin里第一个硬盘是/dev/sda,而mingw使用windows自身的特殊设备名,也就是//./PHYSICALDRIVE0。
2、完善 raid 支持
新版本支持Linux soft raid 0,1,4,5,6,10,raid 5/6 支持4种layout和错误恢复(raid5最多可以有一只硬盘丢失或者损坏,raid6最多可以有两只)。raid 10支持near, far和offset 三种layout. 除了soft raid外,它还支持Nvidia Fake Raid.
3、增加新命令date
date可用于显示和修改当前时间,另外还有一个相关的模块datehook:
insmod datehook
这样,会注册时间变量YEAR, MONTH, DAY等,你可以用于输出,或者用脚本语言进行比较。时间变量是及时更新的,每次读出都是日期/时间的当前值。
4、修改pxe命令的用法。
pxe控制命令参数变为--info, --blksize 和 --unload,也修正了pxe的一些bug。
2008-08-03
1、支持大的memdisk映像
新版本可以支持~576K的core.img(其实就是所有的常规内存),考虑lzma压缩的话,原始大小大约可以达到~1152K。你可以把很多的东西包进内核里。
2、支持multiboot重定位
以前multiboot loader没有重定位,因此当multiboot映像和grub2系统的地址有重叠时,就不能装载了。新版本解决了这个问题,现在你可以在grub2里运行grub invader了(一个使用multiboot启动的简单控制台游戏)。
3、新的光盘里包含了grub-setup.exe,你可以使用传统方式把grub2安装到mbr。
2008-08-02
1、增加PXE支持
新版可以用于pxe启动,启动方式清参考前面。
pxe启动后,可以使用pxe命令控制pxe的参数:
pxe info
显示当前pxe的信息
pxe blksize size
设置tftp传输块的大小,最小值是512,最大值是1432
pxe unload
卸掉pxe的运行环境
2、增加命令crc
该命令可以计算某个文件的crc32值,在测试文件系统问题时比较实用。例如:
crc (hd0,1)/ntldr
3、增加文件系统缓冲模块bufio
grub2里磁盘读取是有缓冲的,不过文件系统没有,这导致某些操作的效率比较低。新版本增加以文件为基础的缓冲,大大加快了背景图片和字体文件的读取速度。
2008-07-25
1,cygwin支持
最新的svn代码可以不经修改地在cygwin下编译。bootcd的版本就是使用cygwin编译,并且把一些重要的工具也加上了,比如说grub-mkimage.exe。
2,64-bit EFI支持
新版本grub2支持x86_64的EFI,比较新的Macbook都是使用64位EFI。不过,编译64位EFI只能在linux下,我没有把二进制版本加到bootcd里。
bootcd里包含32位EFI映像,它也是使用cygwin编译的,使用时把它们复制到相应的目录就行了。
3, 保存环境变量
新版本grub2支持保存环境变量的值。首先,你需要创建一个grubenv文件并放到grub目录里,例如/boot/grub。bootcd里就有一个grubenv,你也可以使用grub-editenv来创建。
grub-editenv grubenv create
grub-editenv还有其他的功能,比如说;
a. 显示grubenv里存储的变量:
grub-editenv grubenv ls
b. 设置grubenv里变量的值
grub-editenv grubenv set default=1
然后,在grub的配置文件grub.cfg里,使用以下的命令就可以装载grubenv里的变量了:
load_env
需要保存变量值时,使用save_env,例如:
save_env default
这就把default的值保存到grubenv里,下次启动时用load_env就会读取新的值了。
4. LZMA压缩
新的core.img使用lzma进行压缩,其效果比原来lzo要好得多。
5. ext4支持
新版本grub2支持ext4文件系统。
6. uuid支持
新版本grub2支持uuid。使用ls -l可以查看文件系统的uuid。search命令也可以按照uuid来进行搜索。
上次由 bean 在 2008-08-24 0:10,总共编辑 6 次。
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
-
- 帖子: 238
- 注册时间: 2008-06-03 12:25
有, grub2里对应的命令是search,比如说,要找到/ntldr所在的分区并把它设为根设备,可以使用:ptptptptptpt 写了:对了,bean 可以建议 wubi 开发人员下个版本采用 g2ldr 。现在的wubi,在中文xp中运行,然后自动设置启动,menu.lst 中 tittle 都用中文写的,可 wubi 里面的 GRUB4DOS 不支持中文,所以显示出来就是乱码。而grub2 支持多国语言
wubi用到了 finds --set-root ,不知 grub2 有没有类似的命令??
search -s -f /ntldr
grub2里的search命令的功能比grub4dos里强,它还可以按照分区label或者uuid来查找。
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
想来是要兼容 xp ,试想,c盘已经装了 vista ,这时把xp装到d盘,xp的安装程序不能调用BCD,只会在c盘写入 boot.ini ntldr ntdetect.com bootfont.bin ,如果vista 不能读取 boot.ini ,xp将不能启动billbear 写了:又学到一招:)有趣的是,vista里尽管使用BCD,但其实也会读取boot.ini的内容。因此你可以在C:\下建立一个boot.ini文件:
[boot loader]
timeout=30
[operating systems]
C:\g2ldr="Start GRUB2 (vista)"
该项目会自动加到vista的启动菜单里,你就不需要使用bcdedit来增加启动项了。
-
- 帖子: 186
- 注册时间: 2008-04-13 9:47
-
- 帖子: 238
- 注册时间: 2008-06-03 12:25
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 128
- 注册时间: 2007-11-29 10:40
-
- 帖子: 238
- 注册时间: 2008-06-03 12:25
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16