使用Linux系统安装grub2到u盘并启动系统或者iso镜像文件

时间:2024-04-17 18:04:11

一、使用fdisk命令对u盘进行分区

1、fdisk -l 查看那个设备时u盘 (现在以/dev/sdc为例)

2、fdisk /dev/sdc 对u盘分区   p:查看当前分区  d:删除当前分区   n:新建分区    w:保存

二、使用mkfs 将u盘格式化为fat32格式,fat32  通用性比较好

mkfs.vfat -F 32 /dev/sdc1  或者   mkfs -t vfat /dev/sdc1

三、将grub2安装到u盘

1、sudo grub-install --boot-directory=/media/u /dev/sdc     问题:--boot-dircetory  和 --root-dircetory  的区别  或:grub-install --no-floppy --boot-directory=/mnt/img /dev/sdc

2、 sudo update-grub

3、sudo grub-mkconfig -o /media/u/boot/grub/grub.cfg

以上代码中的/dev/sdc是U盘对应设备,/media/u是U盘的挂载点。

经过上面的操作,grub2被安装到u盘的mbr上了,生成了默认的启动菜单/grub/grub.cfg,通过u盘启动就能看到grub2的引导界面了,完全可以引导电脑硬盘上的操作系统了。

四、使用grub命令行启动系统 启动linux系统(本文的grub指的全部是grub2)

1、set root=(hd1,msdos1)   (hd1,msdos1)是启动分区。  (在输到"("之后,按一下tab,我的能自动填充hd1,之后,再按一下tab键,可以显示出磁盘分区,在我的电脑上显示出了2个ext分区,以及这些分区的基本信息,我的安装在hd1,msdos1)

2、linux /boot/vmlinux-xxx-xxx  root=UUID=xxxxxxxxx  或者 linux /boot/vmlinuz-***** -generic root=UUID=******     (root=后可以使用uuid也可使用 /dev/sda1 挂载分区,但是 本人个人暂时无法获取是sda1还是sdb1,所以用UUID,第一步tab补全显示磁盘分区详情时会显示分区的uuid号)

3、initrd /boot/initdxxx(按tab补全)

4、boot  启动

五、grub可以直接启动grub4dos

1、下载grub4dos工具到u盘(http://grub4dos.chenall.net/categories/downloads/)

2、配置 grub.cfg

menuentry "Grub4dos"{
    set root=\'hd0,msdos1\'
    linux16 /grub/grub4dos/grub.exe

 boot

}

六、grub启动winpe

1、消灾镜像文件到u盘

2、配置grub.cfg

menuentry \'winpe\'{
  set root=\'hd0,msdos1\'
  insmod lvm
  insmod xfs
  insmod memdisk
  insmod part_msdos
  echo \'loading memdisk...\'
  linux16 /grub/memdisk iso raw
  echo \'loading iso...\'
  initrd16 /grub/dabaicai.iso
}

七、grub4dos启动winpe(grub启动winpe有时候会失败所以使用grub4dos启动)

修改grub4dos下的menu.lst文件(menu.lst文件最好拷贝到根目录或者boot目录,要不然系统可能找不到)

title find and boot dabaicai.ISO
fallback 6

root (hd0,0) (系统默认是在当前磁盘,如果iso和grub4dos在同一个磁盘分区可以不用写这一句)
find --set-root /grub/dabaicai.iso
map /grub/dabaicai.iso (0xff) || map --mem /grub/dabaicai.iso (0xff)
map --hook
chainloader (0xff)
savedefault --wait=2

 

命令解释

set: 设置环境变量,如果不带参数,则是显示当前所有的环境变量。

linux: 从文件中加载Linux内核image。该行的其余内容则直接作为内核的命令传递,在使用了这个命令之后必须使用initrd命令。

intird: 为Linux内核image加载初始的ramdisk,并在内存中的Linux安装区域中设置适当的参数,这只能在linux命令后使用。

boot: 引导已经加载的操作系统或链式加载程序。

chainloader:  作为一个链式加载程序来加载一个文件,如我在前文所述,当我用此命令加载了一个windows的efi文件之后,便能顺利地引导win10系统的启动了。