电脑上安装的系统是Windows10,BIOS+MBR,想利用Grub2安装CentOS,和RemixOS三个操作系统。
为了实现硬盘安装CentOS,需要用到Grub2.
第一步、Grub2下载,文件准备
到Grub2官网ftp://ftp.gnu.org/gnu/grub/ 下载文件grub-2.02-for-windows.zip,将其解压至任意路径下,比如D:\。这样Grub2的主程序目录将位于D:\grub-2.02-for-windows
第二步,Grub2安装
以管理员身份运行CMD,输入命令wmic diskdrive list brief,记录下安装目标磁盘DeviceID,本教程将安装至 \\.\PHYSICALDRIVE0
==================================================================================
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Windows\system32>wmic diskdrive list brief
Caption DeviceID Model Partitions Size
WDC WD5000AAKX-001CA0 \\.\PHYSICALDRIVE0 WDC WD5000AAKX-001CA0 3 500105249280
C:\Windows\system32>
==================================================================================
将当前路径切换至Grub2主程序所在路径,输入cd /d d:\grub-2.02-for-windows
==================================================================================
C:\Windows\system32>cd /d d:\grub-2.02-for-windows
d:\grub-2.02-for-windows>
==================================================================================
查看grub-install.exe的帮助文件,可以输入grub-install.exe --help或grub-install.exe -?,显示如下内容:
==================================================================================
Usage: grub-install [OPTION...] [OPTION] [INSTALL_DEVICE]
Install GRUB on your drive.
--compress=no|xz|gz|lzo compress GRUB files [optional]
-d, --directory=DIR use images and modules under DIR
[default=C:\grub-2.02-for-windows/
--fonts=FONTS install FONTS [default=unicode]
--install-modules=MODULES install only MODULES and their dependencies
[default=all]
-k, --pubkey=FILE embed FILE as public key for signature checking
--locale-directory=DIR use translations under DIR
[default=C:\grub-2.02-for-windows/locale]
--locales=LOCALES install only LOCALES [default=all]
--modules=MODULES pre-load specified modules MODULES
--themes=THEMES install THEMES [default=starfield]
-v, --verbose print verbose messages.
--allow-floppy make the drive also bootable as floppy (default
for fdX devices). May break on some BIOSes.
--boot-directory=DIR install GRUB images under the directory DIR/grub
instead of the boot/grub directory
--bootloader-id=ID the ID of bootloader. This option is only
available on EFI and Macs.
--core-compress=xz|none|auto
choose the compression to use for core image
--disk-module=MODULE disk module to use (biosdisk or native). This
option is only available on BIOS target.
--efi-directory=DIR use DIR as the EFI System Partition root.
--force install even if problems are detected
--force-file-id use identifier file even if UUID is available
--label-bgcolor=COLOR use COLOR for label background
--label-color=COLOR use COLOR for label
--label-font=FILE use FILE as font for label
--macppc-directory=DIR use DIR for PPC MAC install.
--no-bootsector do not install bootsector
--no-nvram don't update the `boot-device'/`Boot*' NVRAM
variables. This option is only available on EFI
and IEEE1275 targets.
--no-rs-codes Do not apply any reed-solomon codes when
embedding core.img. This option is only available
on x86 BIOS targets.
--product-version=STRING use STRING as product version
--recheck delete device map if it already exists
--removable the installation device is removable. This option
is only available on EFI.
-s, --skip-fs-probe do not probe for filesystems in DEVICE
--target=TARGET install GRUB for TARGET platform
[default=i386-pc]; available targets: arm-efi,
arm-uboot, arm64-efi, i386-coreboot, i386-efi,
i386-ieee1275, i386-multiboot, i386-pc,
i386-qemu, i386-xen, ia64-efi, mips-arc,
mips-qemu_mips, mipsel-arc, mipsel-loongson,
mipsel-qemu_mips, powerpc-ieee1275,
sparc64-ieee1275, x86_64-efi, x86_64-xen
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
INSTALL_DEVICE must be system device filename.
grub-install copies GRUB images into boot/grub. On some platforms, it may
also install GRUB into the boot sector.
Report bugs to
==================================================================================
参数说明:
大体思路是,先指定源文件的路径,如:fonts,locale,i386-pc,然后再通过参数确定安装哪些字体,主题,模块。
--directory 指定镜像和模块的路径,本教程将此参数设置为--directory=D:\grub-2.02-for-windows\i386-pc,如果把grub2压缩包解压至c盘,此参数可以不进行设置,因为default=C:\grub-2.02-for-windows/
--fonts 指定字体,默认的为unicode,留空将会在最终安装完成目录下生成unicode.pf2文件。
--install-modules 指定安装模块,留空将安装全部。
--modules 指定预加载的模块。
--locale-directory 指定locale的路径,本教程将此餐宿设置为 --locale-directory=D:\grub-2.02-for-windows\locale,如果把grub2压缩包解压至c盘,此参数可以不进行设置,因为default=C:\grub-2.02-for-windows/locale。
--locales 指定安装的locale,需要将zh_CN文件夹内的grub.mo改名为zh_CN.mo,并放置在locales文件夹目录下
--modules 指定预加载模块。
--themes 指定主题
--boot-directory 指定启动路径,本教程将grub文件夹设置在c:\,故将参数设置为--boot-directory=c:,grub文件夹自动生成。
--force 强制执行,但是遇到32 Sector存在FlexNET的问题,依然无法强制写入,只能是保证后续程序继续运行。
--label-bgcolor 设置启动项标签的背景色
--label-color 设置标签的颜色
--label-font 设置标签的字体
--no-bootsector 不写入启动扇区设置
--recheck 如果存在磁盘映射,将删除磁盘映射
--target 设置安装目标,在本教程中此项可留空。因为默认即为i386-pc,完整命令为--target=i386-pc
完整的运行命令为:
d:\grub-2.02-for-windows>grub-install.exe --directory=D:\grub-2.02-for-windows\i386-pc --locale-directory=D:\grub-2.02-for-windows\locale --locales=zh_CN --themes=starfield --boot-directory=c: --force --recheck --target=i386-pc \\.\PHYSICALDRIVE0
==================================================================================
grub-install.exe
--directory=D:\grub-2.02-for-windows\i386-pc
--fonts=unicode (为默认项,可不写)
--install-modules=all (如果安装全部,参数不能为all,必须删除)
--locale-directory=D:\grub-2.02-for-windows\locale
--locales=zh_CN (默认为all)
--themes=starfield (此项参数为默认,可不写)
--boot-directory=c:
--force
--label-bgcolor=black (默认项,可不写)
--label-color=wite (默认项,可不写)
--label-font =unicode(默认项,可不写)
--recheck
--target=i386-pc (默认项可不写)
\\.\PHYSICALDRIVE0 (安装设备)
如果文件解压路径为C:\,命令可以进行精简,其他的都使用默认设置,其他的使用以上的默认设置:
d:\grub-2.02-for-windows>grub-install.exe \\.\PHYSICALDRIVE0
第三步、grub.cfg文件生成
由于windows环境下无法使用grub-mkcofig生成grub.cfg文件,需要自己编辑生成grub.cfg文件,该文件的编码格式为UTF-8,我们可以使用记事本生成。
首先使用记事本新建一个文本文档,然后输入grub.cfg内容,另存为-将编码格式修改为UTF-8。
具体内容如下:
==================================================================================
#################################################
#设置菜单的超时时间为5秒
set timeout=5
#每一满屏后暂停输出,以免信息太多一闪而过看不清
set pager=1
################################################
#默认启动第一个菜单项
set default=0
#如果第一个菜单项启动失败,转而启动第二个菜单项
set fallback=1
#################################################
#开启密码验证功能,并设置一个名为'admin'的超级用户
set superusers=admin
#################################################
#设置主题模式,支持的模式可以grub引导界面,输入e,进入命令行,输入videoinfo查看。
set gfxmode=1600x900x32,auto
#设置主题
set theme=$prefix/themes/starfield/theme.txt
#################################################
#指定翻译文件(*.mo)的目录,若未明确设置此目录,则无法显示中文界面。
set locale_dir=$prefix/locale
#将GRUB2设置为简体中文界面
set lang=zh_CN
#################################################
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
function load_disk {
insmod part_gpt
insmod part_msdos
}
function load_filesystem {
insmod ext2
insmod ext3
insmod ext4
insmod ntfs
}
load_video
load_disk
load_filesystem
#################################################
#激活图形模式的输出终端
insmod gfxterm
terminal_output gfxterm
insmod gfxmenu
insmod png
loadfont $prefix/themes/starfield/dejavu_bold_14.pf2
export theme
#################################################
#设置'root'用户的哈希密码[通过"grub-mkpasswd-pbkdf2"工具生成]
password_pbkdf2 admin grub.pbkdf2.sha512.10000.29CFC23F7FC74CA1A2AA0CFFCC3CE9D38EB7D3FCFD7A9BFA172AAC1816D580C3076DFC7DCBB2B6944B86765793F10D5B804760FFBBF012CE4B79A5ACD6DB8298.7A3F7ADB7A50D7B387BCF07E425276C6247039F63A37EEC744E91D0191283C8353167B9D32751E9E27E9E99A9EBB8ABBEB40BE5171098096EA47735A5F8CC418
#################################################
menuentry 'Windows 10' --class class --users admin --hotkey "w" --id windows {
search --file --set=root --no-floppy /bootmgr
chainloader +1
}
menuentry 'CentOS 7' --class fedora --class gnu-linux --class gnu --class os --unrestricted --hotkey "c" --id linux {
search --file --set=root --no-floppy /CentOS7.iso
loopback loop0 /CentOS7.iso
linux (loop0)/isolinux/vmlinuz inst.repo=hd:LABEL=WorkData:/CentOS7.iso rootwait inst.lang=zh_CN.UTF-8
initrd (loop0)/isolinux/initrd.img
}
menuentry 'RemixOS-PC' --class class --unrestricted --hotkey "r" --id android {
}