pinkme005 发表于 2017-3-21 22:01:56

U盘被玩坏,重新制作启动盘,奉上制作手记备忘

本帖最后由 pinkme005 于 2017-3-22 14:25 编辑

    grub2是个优秀的启动管理器,但是原版的gurb模块一大堆,放在移动设备上感觉文件太多了,本文将常用的模块使用cpio打包到memdisk中。这样grub2只需要几个文件就够了

一、打包模块进memdisk

#!/bin/sh
allmods=" "
allmods=$allmods" acpi.mod"
allmods=$allmods" affs.mod"
allmods=$allmods" afs.mod"
allmods=$allmods" ahci.mod"
allmods=$allmods" all_video.mod"
allmods=$allmods" ata.mod"
allmods=$allmods" at_keyboard.mod"
allmods=$allmods" bfs.mod"
#allmods=$allmods" blocklist.mod"
allmods=$allmods" btrfs.mod"
allmods=$allmods" bitmap.mod"
allmods=$allmods" bufio.mod"
allmods=$allmods" cat.mod"
allmods=$allmods" cbfs.mod"
allmods=$allmods" chain.mod"
allmods=$allmods" command.lst"
allmods=$allmods" configfile.mod"
#allmods=$allmods" cpio.mod"
allmods=$allmods" cpio_be.mod"
allmods=$allmods" cpuid.mod"
allmods=$allmods" crypto.lst"
allmods=$allmods" crypto.mod"
allmods=$allmods" date.mod"
allmods=$allmods" disk.mod"
allmods=$allmods" drivemap.mod"
allmods=$allmods" echo.mod"
allmods=$allmods" exfat.mod"
#allmods=$allmods" ext2.mod"
allmods=$allmods" extcmd.mod"
allmods=$allmods" fat.mod"
allmods=$allmods" font.mod"
allmods=$allmods" freedos.mod"
allmods=$allmods" fs.lst"
allmods=$allmods" functional_test.mod"
allmods=$allmods" gcry_arcfour.mod"
allmods=$allmods" gcry_blowfish.mod"
allmods=$allmods" gcry_crc.mod"
allmods=$allmods" gcry_md4.mod"
allmods=$allmods" gcry_md5.mod"
allmods=$allmods" gcry_rfc2268.mod"
allmods=$allmods" gcry_rmd160.mod"
allmods=$allmods" gcry_sha1.mod"
allmods=$allmods" gcry_sha256.mod"
allmods=$allmods" gcry_sha512.mod"
allmods=$allmods" gettext.mod"
allmods=$allmods" gfxterm_background.mod"
allmods=$allmods" gfxterm_menu.mod"
#allmods=$allmods" gfxmenu.mod"
#allmods=$allmods" gfxterm.mod"
allmods=$allmods" gzio.mod"
allmods=$allmods" halt.mod"
allmods=$allmods" hashsum.mod"
allmods=$allmods" help.mod"
allmods=$allmods" hfs.mod"
allmods=$allmods" hfsplus.mod"
allmods=$allmods" jfs.mod"
allmods=$allmods" jpeg.mod"
allmods=$allmods" keylayouts.mod"
allmods=$allmods" keystatus.mod"
allmods=$allmods" ldm.mod"
allmods=$allmods" linux16.mod"
allmods=$allmods" video_fb.mod"
allmods=$allmods" linux.mod"
allmods=$allmods" loadenv.mod"
#allmods=$allmods" loopback.mod"
allmods=$allmods" ls.mod"
allmods=$allmods" lsapm.mod"
allmods=$allmods" luks.mod"
allmods=$allmods" lzma_decompress.img"
allmods=$allmods" lzopio.mod"
allmods=$allmods" mdraid09.mod"
allmods=$allmods" mdraid09_be.mod"
allmods=$allmods" mdraid1x.mod"
#allmods=$allmods" memdisk.mod"
allmods=$allmods" memrw.mod"
#allmods=$allmods" minicmd.mod"
allmods=$allmods" minix.mod"
allmods=$allmods" minix2.mod"
allmods=$allmods" minix2_be.mod"
allmods=$allmods" minix3.mod"
allmods=$allmods" minix3_be.mod"
allmods=$allmods" minix_be.mod"
allmods=$allmods" mmap.mod"
allmods=$allmods" moddep.lst"
allmods=$allmods" msdospart.mod"
allmods=$allmods" multiboot.mod"
#allmods=$allmods" newc.mod"
allmods=$allmods" nilfs2.mod"
allmods=$allmods" ntfscomp.mod"
allmods=$allmods" ntldr.mod"
allmods=$allmods" odc.mod"
allmods=$allmods" ohci.mod"
allmods=$allmods" partmap.lst"
allmods=$allmods" parttool.lst"
allmods=$allmods" parttool.mod"
allmods=$allmods" part_acorn.mod"
allmods=$allmods" part_amiga.mod"
allmods=$allmods" part_apple.mod"
allmods=$allmods" part_bsd.mod"
allmods=$allmods" part_dvh.mod"
allmods=$allmods" part_gpt.mod"
#allmods=$allmods" part_msdos.mod"
allmods=$allmods" part_plan.mod"
allmods=$allmods" part_sun.mod"
allmods=$allmods" part_sunpc.mod"
allmods=$allmods" password.mod"
allmods=$allmods" password_pbkdf2.mod"
allmods=$allmods" pata.mod"
allmods=$allmods" pci.mod"
allmods=$allmods" play.mod"
allmods=$allmods" png.mod"
allmods=$allmods" priority_queue.mod"
allmods=$allmods" probe.mod"
allmods=$allmods" read.mod"
allmods=$allmods" procfs.mod"
#allmods=$allmods" reboot.mod"
#allmods=$allmods" reiserfs.mod"
allmods=$allmods" romfs.mod"
allmods=$allmods" scsi.mod"
allmods=$allmods" search.mod"
allmods=$allmods" search_fs_file.mod"
allmods=$allmods" search_fs_uuid.mod"
allmods=$allmods" search_label.mod"
allmods=$allmods" sendkey.mod"
allmods=$allmods" serial.mod"
allmods=$allmods" setpci.mod"
allmods=$allmods" sfs.mod"
allmods=$allmods" sleep.mod"
allmods=$allmods" squash4.mod"
allmods=$allmods" tar.mod"
allmods=$allmods" terminal.lst"
allmods=$allmods" terminal.mod"
allmods=$allmods" terminfo.mod"
allmods=$allmods" test.mod"
allmods=$allmods" testload.mod"
allmods=$allmods" test_blockarg.mod"
allmods=$allmods" time.mod"
allmods=$allmods" trig.mod"
allmods=$allmods" udf.mod"
allmods=$allmods" ufs1.mod"
allmods=$allmods" ufs1_be.mod"
allmods=$allmods" ufs2.mod"
allmods=$allmods" uhci.mod"
allmods=$allmods" usb.mod"
allmods=$allmods" usbtest.mod"
allmods=$allmods" usb_keyboard.mod"
allmods=$allmods" vbe.mod"
allmods=$allmods" vga.mod"
allmods=$allmods" vga_text.mod"
allmods=$allmods" video.lst"
allmods=$allmods" video.mod"
allmods=$allmods" videoinfo.mod"
allmods=$allmods" videotest.mod"
allmods=$allmods" video_bochs.mod"
allmods=$allmods" video_cirrus.mod"
allmods=$allmods" xfs.mod"
allmods=$allmods" xnu_uuid_test.mod"
allmods=$allmods" xzio.mod"
allmods=$allmods" zfs.mod"
allmods=$allmods" zfsinfo.mod"
以上是模块清单
    为复制模块做一些准备工作:
current_dir=$(cd `dirname $0`; pwd)
mkdir -p /tmp/boot/grub/i386-pc
export ulg=/usr/lib/grub
export bg=/boot/grub
export temp=/tmp/boot/grub
cd $ulg/i386-pc
cp $allmods $temp/i386-pc/

二、定制g2ldr内嵌引导菜单grub.cfg

search --no-floppy -f --set=root /loader/grub.cfg
configfile /grub2/grub.cfg
该菜单用于从引导区MBR向U盘上的g2ldr交接引导文件。

三、生成memdisk

cd /tmp
find boot | cpio -o -H newc > memdisk.cpio

四、生成core.img

grub-mkimage -O i386-pc -d /usr/lib/grub/i386-pc -c grub.cfg-o core.img -m ./memdisk.cpio -p '(memdisk)/boot/grub' -v biosdisk newc blocklist fat iso9660 pxe reiserfs memdisk cpio minicmd part_msdos ext2 ntfs loopback gfxmenu gfxterm reboot normal

五、生成MBR

cat boot.img core.img > g2ldr.mbr

六、生成g2ldr

cat lnxboot.img core.img > g2ldr

七、写入U盘

    用BootICE恢复g2ldr.mbr到U盘,将g2ldr.mbr全部写入U盘首部。

八、关于分区

      为不妨碍使用,U盘可以分为2个区,第1个分区为常用分区,分区起始位置留1~2MB空间,一般为NTFS;第2个分区为启动分区,设置boot标志,文件系统类型选自己喜欢的,我用reiserfs。注意为MBR及引导信息区多留空间,如果U盘首分区从32kb开始,g2ldr.mbr恢复到U盘前部会破坏分区表,导致引导程序工作不正常,U盘崩溃。
      大力感谢百度经验《Linux下将grub2安装到memdisk设备中》,从中学到memdisk打包方法;感谢2011hiboy版主,学到MBR制作方法。

青青草 发表于 2017-3-21 23:39:38

支持一下。

wsgdmzr 发表于 2017-3-22 10:09:50

支持楼主的分享,打包后GRUB2会变得很清爽。

lanmeizhuangyua 发表于 2017-3-22 10:50:43

支持楼主的分享
页: [1]
查看完整版本: U盘被玩坏,重新制作启动盘,奉上制作手记备忘