程序员修电脑必备: 使用Grub2制作一个多系统(WinPE与Linux, Android X86)启动的维护移动硬盘和U盘
来源:互联网 发布:石膏模型制作方法知乎 编辑:程序博客网 时间:2024/05/20 16:00
说明
多台计算机安装了不同的系统(Windows, Linux, MacOS), 如果要对系统进行重装或者维护, 每一次都是重新制作启动和维护移动存储设备, 为了节省时间, 考虑制作一个即可启动和维护Windows的也可以启动和安装Linux的多启动移动存储设备. 现代的电脑主板上面的固件(BIOS)可以支持Legacy BIOS启动也可以支持UEFI启动, 下面我们指的是Legacy BIOS, 当然最后也说明了一下制作UEFI启动盘.
这里面使用移动U盘和移动硬盘都测试实践没有问题. 以下是过程.
如果你想制作一个和我这个一样的多系统启动维护移动设备,那么可以看最后的总结部分, 通过几个步骤完成, 所有的文件我都会上传.
作用
多系统启动的移动存储设备可以完成但是不限于下面这些功能
- 维护系统, 例如grub2引导修复, windows启动修复, 系统recovery
- 数据恢复
- 杀毒
- 备份数据
- 装机,系统的备份还原
- (购买电脑时的)硬件检测
- 随身系统
制作环境
因为个人习惯用Linux, 这里用的是Ubuntu 14.04.4 X64, 如果使用Windows, 那么也可以使用grub2 windows版本来制作, 如果是其他Linux Distribution, 那么只要安装了Grub2也可以完成制作.
下面设备是我用的,测试的设备, 具体中, 只要有一个4GB甚至2GB的U盘即可, 如果期望装入很多系统, 那么就需要size大些:
- 移动硬盘500GB, MBR, 分区多个,具体见下文.
- U盘一个, 16GB, MBR, 活动分区为FAT16, 从而可以作为UEFI启动介质.
制作过程
安装Grub2
在Ubuntu 14.04下面安装grub2到移动硬盘或者U盘非常容易, 先确定自己的移动存储设备的节点, 例如下面是我的移动硬盘的设备节点以及分区:
然后具体的设备与分区信息如下:
$ sudo fdisk -l /dev/sdeDisk /dev/sde: 500.1 GB, 500107862016 bytes64 heads, 32 sectors/track, 476940 cylinders, total 976773168 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xf0b1ebb0 Device Boot Start End Blocks Id System/dev/sde1 * 871911424 976771071 52429824 7 HPFS/NTFS/exFAT/dev/sde2 16166 871910464 435947149+ f W95 Ext'd (LBA)/dev/sde5 16198 419762384 209873093+ 7 HPFS/NTFS/exFAT/dev/sde6 419762448 696257099 138247326 7 HPFS/NTFS/exFAT/dev/sde7 696257163 871910464 87826651 7 HPFS/NTFS/exFATPartition table entries are not in disk order可以看到sde1为"活动"分区, 即Boot分区, 然后mount信息如下:
$ mount | grep sde1/dev/sde1 on /media/hexiongjun/PE type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)
另外这个sde1是NTFS分区格式的.
驱动好这些信息后, 我们使用下面命令安装:
sudo grub-install --boot-directory=/media/hexiongjun/PE/grub2 --removable /dev/sde注意--boot-directory为grub存放的路径, 这个是放在了设备的这个分区的grub2目录下面, 最后一个参数是设备节点路径, 不是分区路径.
如果没有错误,那么会提示:
$ sudo grub-install --boot-directory=/media/hexiongjun/PE/grub2 --removable /dev/sdeInstalling for i386-pc platform.Installation finished. No error reported.至此, 我们就安装好了grub2到这个移动硬盘中了.
配置
完成了grub2的安装之后,我们需要配置grub2,让其知道该加载什么文件, 当然, 也可以不配置, 然后启动后直接全部手动输入来引导也是可以的.
配置文件放在:
/media/hexiongjun/PE/grub2/grub/grub.cfg这个其实配置了启动的菜单, 这里面我们的内容如下:
set timeout=10set default=0menuentry "Ubuntu 14.04.4 X64 Live ISO" { loopback loop /ubuntu-14.04.4-desktop-amd64.iso linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.4-desktop-amd64.iso splash -- initrd (loop)/casper/initrd.lz}menuentry "Windows 10PE x64 ISO" { set root='(hd0,msdos1)' set g4d_dir="/Grub4dos/" set cfgfile="find --set-root /PE/ConcisePE_Win10x64.iso;map --mem /PE/ConcisePE_Win10x64.iso (0xff);map --hook;chainloader (0xff);boot" linux $g4d_dir/grub.exe --config-file=$cfgfile}menuentry "WindowsPE UQi ISO" { set root='(hd0,msdos1)' set g4d_dir="/Grub4dos/" set cfgfile="find --set-root /PE/UQi_USBsys_2017.iso;map --mem /PE/UQi_USBsys_2017.iso (0xff);map --hook;chainloader (0xff);boot" linux $g4d_dir/grub.exe --config-file=$cfgfile}menuentry "AcronisTrueImage2017" { set root='(hd0,msdos1)' set g4d_dir="/Grub4dos/" set cfgfile="find --set-root /PE/AcronisTrueImage2017_NG.iso;map --mem /PE/AcronisTrueImage2017_NG.iso (0xff);map --hook;chainloader (0xff);boot" linux $g4d_dir/grub.exe --config-file=$cfgfile}menuentry "Porteus 3.2 ISO" { set isofile=/PE/Porteus-3.2-i586-20170206.iso search --set -f $isofile loopback loop $isofile linux (loop)/porteus/vmlinuz from=$isofile initrd (loop)/porteus/initrd.xz}
这里共有五项启动项目, 分别为2个Linux, 3个PE相关的WindowsOS, 其中PE ISO的启动用到了grub4dos, 本身grub2也可以引导ISO,但是我测试发现使用memdisk的方式在某些机器上面会有问题, 因此干脆直接就用grub4dos吧.
2017/03/06更新 添加Android X86的启动引导:
menuentry "Android-x86 Live" { loopback loop /android_x86.iso linux (loop)/kernel boot=casper iso-scan/filename=/android_x86.iso root=/dev/ram0 androidboot.hardware=android_x86 video=-16 quiet SRC= DATA= initrd (loop)/initrd.img}
因为用到了grub4dos, 而grub4dos也是bootloader, 因此其实就是grub2--> grub4dos --> PE, 因此我们需要将grub4dos的文件(点击即可下载)放到硬盘中:
$ ls /media/hexiongjun/PE/Grub4dos/back.jpg font6500.gz grldr grldr4.mbr grldr.mbr grub.exe ipxegrldr menu.lst menu_out.lst message 说明
里面有一个grub.exe, 这个就是grub4dos的引导程序, 你可以认为是kernel/zImage, 或者是认为raw executive file.
这个Grub4dos, 我已经上传, 可以到这里面下载, 如果你需要的话, 下载后解压到移动设备的启动分区即可.
grub.cfg加载的文件
这里面我们全部都是iso文件, 一些位于PE目录下, ubuntu位于设备分区根目录下面:
$ ls /media/hexiongjun/PE/ubuntu-14.04.4-desktop-amd64.iso /media/hexiongjun/PE/ubuntu-14.04.4-desktop-amd64.iso$ ls /media/hexiongjun/PE/PE/AcronisTrueImage2017_NG.iso ConcisePE_Win10x64.iso Porteus-3.2-i586-20170206.iso UQi_USBsys_2017.iso
更新grub.cfg后生效配置
直接编辑grub.cfg后是不会生效的,我们还需要使用update-grub2或者grub-mkconfig来使更新了的配置生效, 但是这里我们使用和前面update install一样的命令来更新, 即重新运行前面的命令即可完成更新:
sudo grub-install --boot-directory=/media/hexiongjun/PE/grub2 --removable /dev/sdeInstalling for i386-pc platform.Installation finished. No error reported.
测试
因为实机开机关机慢, 在Linux下面我们直接使用qemu来测试, 例如:
sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 3072 -hda /dev/sde最后的是设备节点作为hard disk, 中间还有一个-m 3072, 指的是specify memory 3GB, 如果太小,那么grub4dos在加载iso文件到内存的时候会出错.
如果是使用memdisk来加载的话,也会出现问题, 例如下面的加载会出现out of memory:
如果没有什么问题,那么就会出现grub中的配置的boot menu:如果我们选择启动WinPE,那么grub4dos就会加载ISO到memory:
加载完成后, 就可以选择启动, 例如下面是启动了ATI的image:
下面是Porteus Linux:
Grub2的基本语法解释
menuentry
如果要添加一个ISO, 那么我们可以再添加一个menuentry, 然后再次grub2-install即可. 那么下面说明一下menuentry的内容与语法:
menuentry "Ubuntu 14.04.4 X64 Live ISO" { loopback loop /ubuntu-14.04.4-desktop-amd64.iso linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.4-desktop-amd64.iso splash -- initrd (loop)/casper/initrd.lz}
loopback: 即为blcok device 的loopback , 第一句将iso文件mount 到loopback 设备loop上面
linux: 变量指定要启动的linux kernel, 但是也可以是其他的可以执行的文件, 例如前面提到的grub4dos的grub.exe.
initrd: 即initrd 最小系统, 具体可以看我以前的PPT分享讲解的initramfs与initrd的区别. 可以没有.
linux后还需要指定boot parameters, 即相当于u-boot中的bootargs, 传入到Linux kernel中的cmdline.
也可以指定对应要运行的程序自定义的参数, 例如--config.
设备文件
前面我们看到了loop为一个block loopback设备, 后面的linux与initrd都是从这里面来指定的, 设备文件使用()来表示.
使用ls来查看所有文件, 使用ls带设备来查看某个设备分区:
同时从前面也可以看到, 如果我们需要查看某个设备的UUID是可以通过这个ls来获取的
下面是使用ls来查看文件:
帮助
如何查看某个命令的帮助
要么在线看
https://www.gnu.org/software/grub/manual/grub.html#SEC_Contents
有的命令有-h选项
文档教程
如果期望查看grub2的文档,那么可以参考下面这个文档, 非常详细, 包含安装定制与使用:
Grub2详解教程
如何手动测试
加载grub.cfg文件
手动启动系统与测试
menuentry "Ubuntu 14.04.4 X64 Live ISO" { loopback loop /ubuntu-14.04.4-desktop-amd64.iso linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.4-desktop-amd64.iso splash -- initrd (loop)/casper/initrd.lz}
先使用loopback mount ISO文件
添加UEFI启动
WinPE UEFI
UEFI需要FAT32 FS, 因此使用我们的U盘为例, 如果你有一个WPE ISO支持UEFI启动,那么直接mount ISO, 然后讲里面的内容拷贝到这个FAT32启动分区即可. 例如前面的Concise即支持.
grub2的UEFI启动
grub2的install中有一个UEFI的对应选项, man手册可以找得到.
具体可以参考这篇文章中的示例
或者通过man grub-install , 然后search efi看到对应的选项.
注意事项
WinPE使用memdisk启动问题
网上都是参考这篇文章的说法, 使用memdisk来启动WinPE ISO,但是实际上是可能出现问题的. 尤其是Size较大的Windows 8 PE或者Windows 10 PE.
如果你的WinPE ISO比较大,那么不要使用memdisk的方式来启动, 否则会出现下面这个问题:
就算在Qemu中没有问题, 但是在某些实机上面却会出现问题, 使用grub4dos没有这个问题
Qemu无法启动某些WinPE
可能会出现类似下面这种情况, 其实Windows是启动了, 但是因为qemu的问题, 导致无法正常启动:
这个是因为使用了Qemu qvm的缘故.
对此, 我们可以换成VirtualBox来测试, 具体参考: How to Boot From a USB Flash Drive in VirtualBox
其他启动类制作与辅助工作
BOOTICE
修改与安装bootloader的工具, 包括Legacy BIOS与UEFI, 可以安装不同的Bootloader, 例如Grub4Dos, grub2, MBR等等, 参考: http://wuyou.net/forum.php?mod=viewthread&tid=375848&extra=page%3D1
Easy2Boot
用来快速制作多系统启动U盘,但是需要Format 分区.
YUMI
与Easy2Boot类似.
添加ISO的WinPE镜像启动项
参考下面这个GIF动画, 来源于恋梦PE, 用的是EasyBCD, 这个适用于系统安装完成后, 添加一个PE系统从而方便维护:
参考
How to Create a EFI/UEFI GRUB2 Multiboot USB drive to boot ISO images
Porteus OS
Grub4dos参考下载链接中的说明里面的chm
grub config参考
总结
下面说一下如何制作和测试, 以及使用
- 1. 下载Grub4Dos, 这个链接
- 2. 安装grub2到移动存储设备
- 3. 配置grub.cfg, 可以参考前面的内容
- 4. 再次运行grub-install完成grub.cfg的配置更新
- 5. 使用qemu测试
- 6. 使用实机测试与使用
- 程序员修电脑必备: 使用Grub2制作一个多系统(WinPE与Linux, Android X86)启动的维护移动硬盘和U盘
- 制作U盘Linux 与WinPE启动
- 适合制作U盘/硬盘启动的WinPE系统大搜集【都可以配合V3使用】
- 利用grub和grub2制作双系统的启动U盘
- 利用老毛桃WinPE制作启动U盘安装系统
- 关于“完美者U盘维护系统V8.6(WINPE+LINUX+DOS )”的安装方法
- 移动硬盘安装grub2引导winpe,以后不需要格式化整个移动硬盘(本例移动硬盘亦可用u盘代替)
- 大容量U盘/移动硬盘100%成功制作WINPE启动盘
- 移动硬盘制作启动维护工具盘教程
- LINUX下使用u盘和移动硬盘
- 把Win8PE制作成U盘版的万能微型电脑维护系统
- 制作移动硬盘WINPE启动盘+GHOST安装系统
- U盘启动,使用winpe安装win7的方法
- Puppy linux+WinPE双系统U盘启动
- 使用GRUB2制作U盘PE启动盘
- 傻瓜式制作的U盘winpe
- U盘启动系统制作详细方法+下载地址(MaxDOS+WinPE)
- Linux下制作ubuntu系统的u盘启动版LiveCD和直接硬盘启动LiveCD
- 一个简单的不带头节点链表
- 低成本搭建微信开发环境
- 源码-Oracle数据库管理-第十九章-数据库安全性管理-Part 1_1(用户管理)
- PHP中9大缓存技术总结
- WebLogic中的一些基本概念
- 程序员修电脑必备: 使用Grub2制作一个多系统(WinPE与Linux, Android X86)启动的维护移动硬盘和U盘
- 如何进行大数据分析及处理?
- 数据结构实验之栈四:括号匹配
- iOS下JS与OC互相调用(四)-->JavaScriptCore
- jsp中9个内置对象与servlet对应关系及四个作用域
- js非空验证
- Java实例说明 return在try/catch/finally中的一个注意点
- Codeforces Round #272 (Div. 2) < math >
- sublime3 安装插件emmet