是的,这不是我的第一次了。
早在好久以前,我就接触到了Linux这个词。而且那时候的我,刚好有一台属于自己的笔电,随便我折腾的笔电。
刚接触Linux的我也是一样,先在虚拟机上体验,我记得我一开始懵懂无知的时候,最早体验的发行版是OpenSUSE和CentOS,后来也体验过Ubuntu。初入Linux,彻底打破了Windows系统植入在我心灵深处的对计算机操作系统的刻板印象,Windows系统让我觉得难受、过于抽象、无法理解。初入Linux,我好像突然懂了什么是计算机、什么是计算机系统,好像突然理解从文本代码到机器代码……
我觉得,这才是适合我的方式,CLI(Command Line Interface),我感觉,我向往这种黑客般的操作感。
尤其是物理机上的第一个实验,一个必然要经历的实验,Linux系统的安装,让我对计算机的组成、引导、启动、硬盘原理、抽象、分区等等有了全新的认识和理解。
我依稀记得,第一次成功的在Windows分区的旁边装好一个Linux系统,然后重启,然后引导失败——印象深刻,那估计是我第一次通宵。我依稀还记得那次失败的原因,我大概是把GRUB(那时候还是GRUB一代)安装到了U盘的MBR上,所以U盘一拔掉就发生了“Operate System Not Found”的惨痛事件。
大概好记性不如烂笔头吧,同样的引导问题,我到现在还是有很大的知识盲区,尤其是之前折腾过程中已经解决过的问题,由于没有优雅的记录,现在重新遇到问题还是得花很多时间去查阅查阅查阅,这也是我之所以专门找一个能够写的地方的原因之一,写下我遇到的问题,写下我的解决方案。
以前折腾Linux,光引导、启动问题,我也遇到过好几种,有直接“Operate System Not Found”的,有进入GRUB>提示符(可直接输入特定的命令成功引导)的,有进入GRUB resource>提示符(可用U盘上的系统比如安装介质进入Linux的chroot环境修复)的,有进入rootfs>提示符(这种就很绝望,原因很多,可能需要修复内核镜像或者修改内核启动参数等等,也可能解决不了就只好想办法转移文件重装系统了)的。
综述BIOS-MBR-GRUB配置(BIOS可被UEFI替代、GRUB可由其他引导程序替代)的引导方案,需要确保有这么几个条件:
1.BIOS 中正确设置。
2.BIOS引导顺序中期望的硬盘的MBR需要有安装GRUB的core.img
3.要有一个可访问的分区作为/boot分区并使得该分区标记为“可引导”,放置启动所需的文件包括不限于GRUB的各种mod、启动操作系统(特指LInux)的内核镜像等。
4.GRUB配置/GRUB命令正确、合理的内核参数。
今天安装系统遇到的问题主要是三个,一是打算做U盘引导盘但是忘记标记“可引导”;二是在安装os-prober后依然不能在执行grub-mkconfig的同时找到安装在其他磁盘、分区的win10系统(该问题在我给系统安装上exfat文件系统支持后解决了,猜测exfat文件系统支持是找到Windows系统的前提条件);三是GRUB手动配置没有正确理解。
这次安装的系统是Archlinux,在官方wiki有详细的安装教程,本应该是没有任何问题的,下面给每个步骤写一些注意点:
Arch wiki - 安装向导
https://wiki.archlinux.org/index.php/Installation_guide
GRUB wiki
https://wiki.archlinux.org/index.php/GRUB
选择BIOS-MBR引导配置的介绍
https://wiki.archlinux.org/index.php/GRUB#Master_Boot_Record_.28MBR.29_specific_instructions
## NOTICE
## 先要确保当前环境已经安装了GRUB的包
$ sudo grub-install --target=i386-pc /dev/sdx
## 将GRUB的core.img安装到指定硬盘(这里是/dev/sdx)的MBR中。
## 如果不知道这步操作的含义不要瞎执行这个命令以免带来不必要的麻烦
如果要安装到U盘做一个U盘引导盘参考
https://wiki.archlinux.org/index.php/GRUB/Tips_and_tricks#Alternative_installation_methods
其实本质不变,就是要挂载好/boot,然后分别安装好GRUB的core.img到MBR、安装好GRUB的启动文件到/boot分区。
然后生成配置文件
## NOTICE
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
## 如果要自动生成其他分区上的操作系统的引导选项
## 需要用包管理器安装 os-prober
## 在这次折腾的经历看来,os-prober要找到Windows系统
## 还需要安装exfat文件系统支持
$ sudo pacman -Ss fat
## 查找exfat支持包的名字后安装该包
最后分享一个有效的手动配置GRUB启动Win10的案例。
先看看我计算机的分区配置(折线和箭头代表引导流):
在我的PC上能够引导到SSD上的win10配置:
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
##if [ "${grub_platform}" == "pc" ];
##then
## menuentry "SSD WIN10" {
## set root=(hd2,msdos3)
## insmod part_msdos
## insmod nfts
## insmod search_fs_uuid
## insmod ntldr
## search --fs-uuid --set=root --hint-bios=hd1,msdos1 02D2C0DED2C0D6D7
## ntldr /bootmgr
##}
##fi
### END /etc/grub.d/40_custom ###
## NOTICE
## UUID 可以执行命令检查
$ sudo lsblk --fs
——2017年8月10日 于通用实验室115