#!/bin/bash #生成grub iso #根据论坛http://wuyou.net/forum.php?mod=viewthread&tid=386651 #封装的命令,感谢rkr077大佬分享 if [ $# -ne 3 ];then echo 参数校验失败 echo '命令用法:' echo './createiso grub目录 输出iso文件名 回环设备' echo '例如:./createiso grub test.iso /dev/loop3' exit fi #回环设备 loop=$3 if [ `losetup -a|grep $loop|wc -l` -gt 0 ];then echo 回环设备$loop已被占用 else echo '1.生成GRUB2的内核文件(core.img)' #先使用bootice的GRUB4DOS编辑器编写grub.cfg文件(以UTF-8编码保存),包含以下内容: config_name=grub.cfg grub_path=/boot/grub core_img=core.img iso_dir=iso efi_dir=efi efi_path=$efi_dir/boot efi_img=cdefi.img mnt_path=/mnt/image grub2cd_img=grub2cd.img bootx64=bootx64.efi bootia32=bootia32.efi cat << EOF > $config_name search.file $grub_path/$config_name root set prefix=$grub_path normal EOF #然后执行以下命令: #Legacy启动 grub-mkimage -c $config_name -p $grub_path -o $core_img -O i386-pc iso9660 udf fat exfat ntfs ext2 part_msdos part_gpt search disk biosdisk normal halt reboot #64位UEFI启动 grub-mkimage -c $config_name -p $grub_path -o $bootx64 -O x86_64-efi iso9660 udf fat exfat ntfs ext2 part_msdos part_gpt search disk normal halt reboot #32位UEFI启动 grub-mkimage -c $config_name -p $grub_path -o $bootia32 -O i386-efi iso9660 udf fat exfat ntfs ext2 part_msdos part_gpt search disk normal halt reboot #将GRUB2安装目录下的i386-pc\cdboot.img文件复制到当前目录下,并用copy命令将cdboot.img和$core_img文件合并为$grub2cd_img cat /usr/lib/grub/i386-pc/cdboot.img $core_img >$grub2cd_img #2.生成EFI启动镜像 echo '2.生成EFI启动镜像' mkdir -p $efi_path cp $bootx64 $bootia32 $efi_path #采用dd命令生成的镜像文件 dd if=/dev/zero of=$efi_img bs=1 count=1M mkfs -t vfat $efi_img losetup $loop $efi_img #映射loop设备 mount $loop $mnt_path #挂载loop设备 cp -r $efi_path $mnt_path losetup -d $loop #解除loop映射 umount $mnt_path #卸载loop设备 #3.用genisoimage命令生成可启动iso文件 echo '3.用genisoimage命令生成可启动iso文件' # #在iso文件夹下面新建boot\grub文件夹,将输入参数指定的grub目录拷贝到$iso_dir/$grub_path下 mkdir -p $iso_dir/$grub_path cp -r $1/* $iso_dir/$grub_path # #将grub2cd.img和cdefi.img复制到iso文件夹下面。 cp $efi_img $grub2cd_img $iso_dir # #执行以下命令生成iso文件 genisoimage -J -l -allow-lowercase -R -V GRUB2 -joliet-long -no-emul-boot -boot-load-size 4 -boot-info-table -b $grub2cd_img -eltorito-alt-boot -b $efi_img -no-emul-boot -o $2 $iso_dir rm -rf $core_img $bootx64 $bootia32 $config_name $grub2cd_img $efi_img $iso_dir $efi_dir fi