9

日常系列之系统

最近又在考虑重新安装新系统的事情,于是找了好几个皮肤(滑稽),看了看系统中,成熟的linux系统有好多种,挑了elementaryOS0.4 以及 openSUSE-42,纠结了一天,最后选择了elementary。当然更多原因是因为它的皮肤很好看。在安装的伊始,我在纠结要不要重新安装win10,还是直接覆盖一下生成个windows.old文件夹,最后出于清理以前很多没用东西但是又不想从头找的原因,索性就直接格式化了原来的分区。

BIOS

基本输入输出系统,也就是在机器启动以后最开始引导的程序,作用为检测硬件的信息,并开始启动引导程序(没错,就像grub2等这样的引导程序,也称之为boot loader)。后来又开发出了新的标准,UEFI, 用以扩展使用。UEFI是作为新的标准用来代替BIOS的,虽然它本身也算得上一个系统,但是很明显,它最主要的功能点在于对硬件和软件程序的引导交互。

一般(2013年以后)的电脑,很大的一个特点在于支持UEFI secure boot ,从用户角度看,开启了secure boot就意味着,开机时启动的路径并不是完整的开机路径。因为开启secure boot表示,只有经过了特殊签名的软件信息才会出现在开机的启动选项中。否则,就拿安装双系统来说,如果不禁用secure boot的话,那么最终回导致U盘安装系统根本无法使用,因为你自己的U盘信息并没有经过特殊的签名(可以理解为加密)。secure boot 本身并不阻止这些软件的安装,它只是阻止了系统加载路径的修改。

就以我的遭遇为例,在acer电脑上按F2进入BIOS界面以后,我是用legacy模式启动的。当然如果切换到UEFI模式下,是不能启动U盘的。在从大一下开始重装了不知道多少次系统以后,进入BIOS系统界面开始需要密码,当然我是没有设置的,于是在依靠搜索引擎找到了一个有趣的网址BIOS-password,输入相应电脑的key(即在进入界面输错后提示的key值),然后会出来相应的密码,多试几次有好处。

既然说了UEFIBIOS 这两者间的区别,那么这种区别也可以推广到GPTMBR 上面去。如果在安装windows的时候遇到这样的问题,原因主要出在硬件设置与软件设置上,比如机器以uefi格式启动,但是硬件驱动器并没有被配置成UEFI格式,这个时候,要么修改机器的启动方式要么转化硬件驱动器的分区格式。体现在windows上的就是或者修改BIOS启动模式为legacy或者将启动器的格式变为gpt可识别形式。

卷和分区

我觉得这是安装系统中最重要的几个概念之一了,关于分区有几个概念需要理清楚再往下看:物理存储介质,物理卷(Physical Volume), 逻辑卷(Logical Volumes )。PV是与磁盘相对应,是提供实体存储的基本单位,用来存储LV的。在这一点上,有点像操作系统中的虚拟存储器和物理存储器的区别。LV与分区相对应,他们持有整个文件系统,但是和分区不一样的地方在于他们可以跨区存储,这也是LVM得以发挥作用的一个基础。LVM相当于一个抽象层,对硬件磁盘的一个抽象,所以有LVM可以做到随时调整分区大小。

当然,再安装Ubuntu的时候,本身是不用去关心这些问题的,因为它已经做到了相当的智能化,分区工作可以做也可以不去做。如果要做的化,在进行了相应的分区操作后,Boot Loader还是需要选择 windows所在的分区,毕竟如果安装在其他系统上,可能grub就不能正确的识别和被引导了,或者被windows引导,或者grub引导win。

分区这个东西有点像LVM(毕竟是前身),将一整块磁盘分为几个部分,即使其中一块崩溃了也不会影响其他部分。

软件

在安装完elementaryOS-0.4以后,需要做的事情就是下载各种各样的软件。当然在安装软件将的过程中,碰到的最多的问题就是系统版本升级以后依赖变化,以及ele-OS 本身对 Ubuntu-16.04-LTS 的一些取舍所造成的。比如在安装搜狗输入法linux-64位版本的时候,首先会出现的问题就是 某某依赖缺失;因为后者造成的则是一个基于 electron 的软件,因为它依赖于 GTK3 ,但是 ele-OS 本身已经去掉了这部分。

安装软件的另外一个问题就是各种动态库静态库了,这个问题在稍后的文章中加以详述。似乎软件安装这个过程的说明是最简单的,然而缺失最费时间的。编译安装一些软件,设置自定义的主题等等。当然在安装windows的过程同样如此,各种各样的编辑器的设置,嗯,确实挺烦的。

在这篇文章中,我并不像详细地叙述怎么样解决了问题的, 因为从Ubuntu14升级到16,在转到elementaryOS; 从php5升级到php7的过程中,遇到各种各样的奇怪的问题。共通的特点就是,每当解决完这个问题以后就会发现,晚上可以找到的匹配度很高的答案或者是很早或者是牛头不对马嘴,而官网的文档以及对程序和操作系统的理解,才是解决问题的关键。

比如所,在安装php的mongo扩展的过程中,在php5的时候,配置都保存在一个文件中,但是在升级到7以后,配置文件php.ini的分发方式发生了变化,如果只在一个地方比如cli模式下修改配置文件,那么在ap2中是会报错的。如果不熟悉整个网络的流程,这种bug真的是不好找的。

写技术文章的初衷,我并不打算对某个特定问题的解决给出解决过程,因为越具体的解决模式反而时效性更强。相反,希望写下的东西是某个方向的某种通用的解决方法。

参考链接

日常遐想之链接器