红联Linux门户
Linux帮助

grub2引导ubuntu 14.04 ISO、WindPE ISO、win7安装盘的正确方法

发布时间:2015-03-14 11:42:02来源:linux网站作者:ljj_jjl2008

对于标题中的几个问题,网上有很多教材,但是我在ubuntu14.04下,反复尝试一直失败。经过反复折腾,终于找到了症结所在,现总结如下:


一、用grub2引导14.04的ISO:
1、14.04的ISO文件放在某个ntfs格式分区(据说fat、ext的分区也行)的根目录,建议改名(改成简短些的名字)。
2、修改文件 /etc/grub.d/40_custom (不要直接改文件 /boot/grub/grub.cfg),加上以下几行:
menuentry "Ubuntu 14.04 LiveCD" {
insmod ntfs
loopback loop (hd0,X)/ubuntu.iso
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu.iso locale=zh_CN.UTF-8 splash
initrd (loop)/casper/initrd.lz
}

注意:那几个地方是关键。(1)根据磁盘格式调入对应模块,(2)(hd0,X)的X要指对地方(3)14.04中,vmlinuz.efi对应的是64位,32位依然是vmlinuz,32位没有.efi,要注意区分。
3、然后执行:sudo update-grub ,使修改生效。


二、用grub2引导WinPE的ISO:
1、iso文件放在ntfs分区的根目录,建议改名(改的简短些)。
2、在自己机器上找到/usr/lib/syslinux/memdisk,复制一份,同ISO文件放在一起。(这里注意:不要到网上下载,而是要用本机的文件。网上下载的,往往不能用。)
3、修改文件 /etc/grub.d/40_custom (不要直接改文件 /boot/grub/grub.cfg),加上以下几行:
menuentry 'Boot usb system ISO'{
set root='(hd0,msdos8)'
echo 'Loading Memdisk...'
insmod memdisk
linux16 /memdisk iso raw
echo 'Loading ISO...'
initrd16 /USBSYS.ISO
}

注意:那几个地方是关键。(1)(hd0,msdos8)要指对地方(2)文件名要写对,包括大小写
4、然后执行:sudo update-grub ,使修改生效。
注意:(1)最近发现,能够正常启动的PE,偶尔在某次启动时也会花屏。有时需要多启动几次试试(2)不是所有PE的ISO都能启动。如果启动后总是花屏、黑屏、死机,则要换个PE。(3)使用了memdisk,机器内存小的,可能会启动失败。而且启动速度有点慢。


三、制作系统救急U盘
思路:将grub2装进U盘,然后配置grub菜单,引导U盘内的14.04的ISO、PE的ISO、和真实硬盘上面已安装的系统,实现急救效果。
1、U盘分区:其实怎么分区不重要,按照其他分区都行,磁盘格式也不重要,关键是要有“boot”标志。不过考虑到数据保护和方便U盘的使用,建议分2个区,第一个分区大小=u盘总容量-2G,NTFS格式(存放日常数据)。第二个分区容量2G,ext3格式(存放grub和ISO文件)。
分区时可以用gparted分区,分区完成后要记下来第二分区的uuid,后面用得到。
2、安装grub2:
挂载分区并安装grub2到U盘:
注意如果你有多块硬盘,则sdb2也可能是其他,/dev/sdb也可能是其他,请自行判断,不要机械抄命令:
sudo mount  /dev/sdb2 /mnt
sudo grub-install --root-directory=/mnt /dev/sdb

安装成功后,U盘第二个分区里面应当出现“/boot”文件夹及“/boot/grub”文件夹。
3、配置grub菜单:
sudo cp /boot/grub/grub.cfg /mnt/boot/grub/

然后用自己顺手的编辑器修改/mnt/boot/grub/grub.cfg。关键点:
(1)修改grub.cfg,指定root磁盘分区和对应UUID到第二分区,找到下面这一段,“msdos1”改成“msdos2”,“ecdcb3b9-0e43-489a-89ed-5ca9469ea629”,改成第二分区对应的uuid(分区时记下来的)。
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2  ecdcb3b9-0e43-489a-89ed-5ca9469ea629
else
search --no-floppy --fs-uuid --set=root ecdcb3b9-0e43-489a-89ed-5ca9469ea629
fi
font="/usr/share/grub/unicode.pf2"
fi

(2)在U盘这个分区内放置ISO文件和memdisk文件,按照上面“一、二”方法配置启动菜单(区别:这里是直接修改grub.cfg文件)。注意这里的磁盘标示也是“hd0”和“sda”,不要因为是U盘就习惯性写成“hd1”和“sdb”。以便实现多重启动安装。但是这种U盘无法启动安装版的win7(不满足启动条件)。
(3)其他启动项可以适当删除或者保留,但是建议保留启动硬盘里面的ubuntu、win7等已安装系统的启动项,作为救急盘使用(比如重装win7后,可以用它来回复硬盘grub2引导菜单等)但要做几处修改:将对应启动项里面的“hd0”改成“hd1”,将“sda”改成“sdb”。
4、经测试,本救急盘甚至可以实现多机通用:多重启动肯定能够通用,而已安装系统启动菜单则保留多套就是了,在启动项里面标注清楚机器名即可。而且只占用了大约2G空间,其余空间依然可以日常使用。


四、grub2引导win7的ISO,实现硬盘安装:
注意:安装win7会覆盖掉grub2,所以如果真的需要安装,请先按照上面步骤做一个救急盘再安装(或者采取其他措施修复或者补救)
1、如果是Ghost版的,则要先用方法“二”引导一个其他PE,然后在PE下面安装,(不要直接引导Ghost版win7的iso,不容易成功的)
2、如果是安装版,则需要将ISO内的文件全部解压到本地硬盘某个ntfs分区的根目录,然后sudo update-grub ,会自动在grub产生引导菜单。
但要注意:要保证硬盘第一个主分区是ntfs格式的,可用空间大于100M,有“boot”(可引导)标志,否则可能有引导菜单也不能启动安装界面。