方永、南天紫云

道亦有道

使用grub2加载软盘和光盘镜像
2011年11月18日

将启动管理器换成grub2(应该叫做grub,以前的grub被叫做legacy grub,grub的开发者肯定不喜欢grub2这种叫法),以前用grub4dos加载的dos、pe、linuxlive镜像没法用了,实在不爽,hack之。

grub加载软盘镜像:

从syslinux软件包中提取memdisk,位于/usr/lib/syslinux目录中。也可以在syslinux的官网上直接下载,然后放在确定的位置比如/boot目录中。

用如下grub命令:

linux16 /boot/memdisk raw
initrd16 (hd0,msdosx)/img/dos.img

raw参数可省略。

grub加载光盘镜像,目前有3种办法,grub目前没有实现直接引导光盘镜像的功能。

  1. 使用loopback命令:

    loopback loop (hd0,msdosx)/img/linuxlive.iso
    linux (loop)/boot/vmlinuz ro
    initrd (loop)/boot/initrd.gz
    
  2. 使用memdisk:

    linux16 /boot/memdisk iso
    initrd16 (hd0,msdosx)/img/linuxlive.iso
    

    注意:用这种方法引导的光盘镜像一定是syslinux兼容的,很多PE及Windows中工具做成的iso镜像和syslinux都不兼容,直接用上面的命令引导的话很可能导致BIOS数据损坏的严重后果。

  3. 用grub加载grub4dos,这是目前最稳妥灵活的一种方法:

    grub4dos安装在mbr或者pbr中:

    drivemap -s (hd0) (hd0,msdosx)
    chainloader +1
    

    grub4dos保存为ldr文件:

    ntldr (hd0,msdosx)/boot/grldr
    

    grub4dos保存为DOS执行文件:

    linux16 (hd0,msdosx)/boot/grub.exe
    

使用grub4dos,将menu.lst配置文件放在特定位置,可以在不改动或者重新配置grub.cfg(配置一般写在/etc/default/grub/etc/grub.d/40_custom等文件中,有什么变动时运行grub-mkconfig,这是官方推荐的方法)的情况下加载一些镜像文件,这样比较灵活。