利用grub2制作U盘引导盘引导iso系统
1、查看U盘信息
如果你的U盘是 fat32 格式,且经 fdisk 命令查询到U盘的第一分区的起始位置大于等于2048,且是可以启动的,比如:
设备 启动 起点 末尾 块 标识 系统
/dev/sdb1 * 2048 7761919 3879936 c W95 FAT32 (LBA)
那么你可以跳过此步,直接进入下一步。
如果不符合要求,请使用 fdisk 重新分区。关于使用 fdisk 进行分区和激活的方法,请自行百度,这里不啰嗦分区及激活的方法了。
2、在该U盘上安装grub2 (注意,不是 grub,它们是不同的东西了)
安装的方法是:
Fedora Centos 等
$ sudo grub2-install --no-floppy --root-directory=/run/media/user/mutiboot /dev/sdb
Archlinux Debian Ubuntu 等
$ sudo grub-install --no-floppy --root-directory=/run/media/user/mutiboot /dev/sdb
这里/run/media/user/mutiboot是u盘的挂载点,/dev/sdb是u盘设备,这两处需要根据实际情况修改。安装成功会显示成功的信息,并且在u盘中会有/boot/grub2(或/boot/grub)目录。
3、复制 memdisk 文件,用于引导 WinPE
到我的网盘中下载 memdisk 文件,地址如下:
http://pan.baidu.com/s/1c0x63XQ
将解压后的 memdisk 文件复制到U盘的根目录或 /boot目录下。
4、查询U盘的 uuid
使用命令查询 U盘的 uuid,命令如下:
ls -l /dev/disk/by-uuid/
从输出信息中找到U盘对应的 uuid ,并复制到U盘 /boot 目录下子目录中的 grub.cfg 文件中,作为USBUUID参数的数值,假设得到的 uuid 为 aaaa-aaaa。那么该设置为:
set USBUUID="aaaa-aaaa"
5、下载可以用于启动电脑的 iso 文件到U盘的根目录
比如我下载了这些 iso 文件:
archlinux-2014.10.01-dual.iso
Fedora-Live-Workstation-x86_64-22-3.iso
Fedora-Live-Workstation-x86_64-23-10.iso
pmagic-4.5.iso
slax-Chinese-Simplified-7.0.8-i486.iso
TinyCore-current.iso
Win8PE.iso
(以上文件请各自到网络上寻找,根据你自己的需要)
由于 windows 的 iso 文件往往太大,不利于引导,我这里使用了Win8PE.iso来引导一个 winPE 系统的间接方式来安装 windows 操作系统。所以我还下载了一个 ghost 文件,放在根目录中。如:
win7.gho (这个文件可以从 windows 的 ghost 安装(包) iso 文件中解压出来
6、修改 grub.cfg 文件,设置引导
我的 grub.cfg 文件内容如下,谨供大家参考:
set timeout=10
insmod fat
set default=0
loadfont /boot/grub2/fonts/unicode.pf2
set gfxmode=1024x768
set gfxpayload=keep
insmod gfxterm
insmod vbe
insmod loopback
insmod iso9660
terminal_output gfxterm
insmod jpeg
background_image /boot/grub2/W0201407.jpg
setmenu_color_normal=white/black
setmenu_color_highlight=black/light-gray
set USBUUID="AAAA-AAAA"
menuentry "Tinycore ISO" {
search --no-floppy --fs-uuid --set=root ${USBUUID}
set isofile="/TinyCore-current.iso"
loopback loop $isofile
linux (loop)/boot/vmlinuz loglevel=3 cde waitusb=10 linux repo=hd:/dev/disk/by-uuid/${USBUUID}:/
initrd (loop)/boot/core.gz
}
menuentry "Slax 7.iso" {
set isofile="/slax-Chinese-Simplified-7.0.8-i486.iso"
loopback loop $isofile
linux (loop)/slax/boot/vmlinuz from=$isofile slax.flags=perch,xmode nopersistent noeject noprompt noatime ro
initrd (loop)/slax/boot/initrfs.img
}
menuentry "Parted Magic 80M" {
set isofile="/pmagic-4.5.iso"
loopback loop $isofile
linux (loop)/pmagic/bzImage iso_filename=$isofile edd=off noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=791 sleep=10 loglevel=0 keymap=us
initrd (loop)/pmagic/initramfs
}
menuentry "Fedora 20 Live (64 bit)" {
set isoname="Fedora-Live-Desktop-x86_64-20-1"
set isofile="/${isoname}.iso"
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=${isoname} rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile}
initrd (loop)/isolinux/initrd0.img
}
menuentry "Fedora 21 Live Workstation (64 bit)" {
set isoname="Fedora-Live-Workstation-x86_64-21-5"
set isofile="/${isoname}.iso"
search --no-floppy --fs-uuid --set=root ${USBUUID}
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
initrd (loop)/isolinux/initrd0.img
}
menuentry "Fedora 22 Live Workstation (64 bit)" {
set isoname="Fedora-Live-Workstation-x86_64-22-3"
set isofile="/${isoname}.iso"
search --no-floppy --fs-uuid --set=root ${USBUUID}
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-22-3 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
initrd (loop)/isolinux/initrd0.img
}
menuentry "Fedora 23 Live Workstation (64 bit)" {
set isoname="Fedora-Live-Workstation-x86_64-23-10"
set isofile="/${isoname}.iso"
search --no-floppy --fs-uuid --set=root ${USBUUID}
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-23-10 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
initrd (loop)/isolinux/initrd0.img
}
menuentry "Archlinux2014-10-01 install ISO" {
set isofile="/archlinux-2014.10.01-dual.iso"
if cpuid; then set cputype="x86_64"; else set cputype="i686"; fi
loopback loop $isofile
linux (loop)/arch/boot/$cputype/vmlinuz archisolabel=ARCH_201410 img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/$cputype/archiso.img
}
menuentry 'Boot Windows 8 PE ISO'{
search --no-floppy --fs-uuid --set=root ${USBUUID}
linux16 /boot/memdisk iso raw
echo 'Loading WINPE ISO...'
initrd16 /Win8PE.iso
}
#menuentry "debian-7.6-i386 install" {
# set isofile="/debian-7.6.0-i386-CD-1.iso"
# loopback loop $isofile
# linux /debian-7.6/vmlinuz iso-scan/filename=$isofile noeject nopromt --
# initrd /debian-7.6/initrd.gz
#}
menuentry '[loopback]debian-live-7.6.0-amd64-xfce-desktop' {
set isofile='/boot/iso/debian-live-7.6.0-amd64-xfce-desktop.iso'
loopback loop $isofile
linux (loop)/live/vmlinuz boot=live config fromiso=/dev/sdb2/$isofile
initrd (loop)/live/initrd.img
}
menuentry "启动第一存储器主引导记录 " {
set root=(hd0)
chainloader +1
}
menuentry "启动第二存储器主引导记录 " {
set root=(hd1)
chainloader +1
}
menuentry "重启"{
reboot
}
menuentry "关机"{
halt
}