一、Linux与硬件搭配
游戏机/工作机的考虑
“要用来打Game的“游戏机计算机” 所需要的配备一定比办公室用的“工作机计算机”配备更高档”,为什么呢? 因为现在一般的三维(3D)计算机游戏所需要的3D光影运算太多了,所以显卡与CPU资源都会被耗用的非常多!
“性能/价格”比与“性能/消耗的瓦数”比的考虑
比较喜欢购买主流级的产品而非最高档的。因为我们最好能够考虑到性能/价格比。 如果高一级的产品让你的花费多一倍,但是新增加的性能却只有10%而已,那这个性能/价格的比值太低,不建议啦!
支持度的考虑
并非所有的产品都会支持特定的操作系统,这牵涉到硬件开发商是否有意愿提供适当的驱动程序之故。
事实上在Linux服务器中,内存的重要性比CPU还要高的多!因为如果内存不够大, 就会使用到硬盘的内存交换空间(swap)。 而由计算机概论的内容我们知道硬盘比内存的速度要慢的多, 所以内存太小可能会影响到整体系统的性能的!
磁盘阵列(RAID)是利用硬件技术将数个硬盘整合成为一个大硬盘的方法,操作系统只会看到最后被整合起来的大硬盘。 由于磁盘阵列是由多个硬盘组成,所以可以达成速度性能、备份等任务。
Network Interface Card 网卡是服务器上面最重要的元件之一了!目前的主板大多拥有内置10/100/1000Mbps的超高速以太网卡。 但要注意的是,不同的网卡的功能还是有点差异。
几个常用的硬件与Linux distributions搭配的网站,建议大家想要了解你的主机支不支持该版Linux时, 务必到相关的网站去搜寻一下喔!
Red Hat的硬件支持:https://hardware.redhat.com/?pagename=hcl
Open SuSE的硬件支持:http://en.opensuse.org/Hardware?LANG=en_UK
Linux对笔记本电脑的支持:http://www.linux-laptop.net/
Linux对打印机的支持:http://www.openprinting.org/
Linux硬件支持的中文
HowTo:http://www.linux.org.tw/CLDP/HOWTO/hardware.html#hardware
“在Linux系统中,每个设备都被当成一个文件来对待” 举例来说,SATA接口的硬盘的文件名称即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd这四个文件的意思。在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内, 所以你会看到/dev/sda, /dev/sr0等等的文件名喔。那么打印机与软盘呢?分别是/dev/lp0, /dev/fd0啰!
硬件与文件名的对应关系:
二、磁盘的第一扇区
对于磁盘而言,整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息! 早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master BootRecord) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰,甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)! 这两种分区格式与限制不太相同啦!
1,MSDOS (MBR) 分区表格式与限制
早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大小 (旧的磁盘扇区都是 512Bytes 喔!),所以说,第一个扇区 512Bytes 会有这两个数据:
主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes
分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区:
由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。 根据上面的图示与说明,我们可以得到几个重点信息:
(1)其实所谓的“分区”只是针对那个64 Bytes的分区表进行设置而已!
(2)硬盘默认的分区表仅能写入四组分区信息
(3)这四组分区信息我们称为主要(Primary)或延伸(Extended)分区
(4)分区的最小单位“通常”为柱面(cylinder)
(5)当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理
既然分区表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分区出四个分区?当然不是啦!有经验的朋友都知道, 你可以将一颗硬盘分区成十个以上的分区的!那又是如何达到的呢?在Windows/Linux系统中, 我们是通过刚刚谈到的延伸分区(Extended)的方式来处理的啦!延伸分区的想法是: 既然第一个扇区所在的分区表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分区信息?如下图所示:
延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。 然后我们可以通过延伸分区所指向的那个区块继续作分区的记录。如上图右下方那个区块有继续分区出五个分区, 这五个由延伸分区继续切出来的分区,就被称为逻辑分区(logical partition)。
上述的分区在Linux系统中的设备文件名分别如下:
为什么没有sda3、sda4?因为前4个分区保留给Primary或Extended用的。
MBR 主要分区、延伸分区与逻辑分区的特性我们作个简单的定义啰:
(1)主要分区与延伸分区最多可以有四笔(硬盘的限制)
(2)延伸分区最多只能有一个(操作系统的限制)
(3)逻辑分区是由延伸分区持续切割出来的分区;
(4)能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;
(5)逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;
由于第一个扇区所记录的分区表与MBR是这么的重要,几乎只要读取硬盘都会先由这个扇区先读起。 因此,如果整颗硬盘的第一个扇区(就是MBR与partition table所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了!
MBR 分区由于每组分区表仅有16Bytes 而已,因此可纪录的信息真的是相当有限的! 所以,在过去 MBR 分区表的限制中经常可以发现如下的问题:
(1)操作系统无法抓取到 2.2T 以上的磁盘容量!(如果容量大于2TB,就得进行切割)
(2)MBR 仅有一个区块,若被破坏后,经常无法或很难救援。
(3)MBR 内的存放开机管理程序的区块仅 446Bytes,无法容纳较多的程序码。
2,GUID partition table, GPT 磁盘分区表
因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical BlockAddress, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。
与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!
上述图示的解释说明如下:
(1)LBA0 (MBR 相容区块)
与 MBR 模式相似的,这个相容区块也分为两个部份,一个就是跟之前 446 Bytes 相似的区块,储存了第一阶段的开机管理程序!而在原本的分区表的纪录区内,这个相容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分区表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分区信息,进一步保护了此磁盘喔!
(2)LBA1 (GPT 表头纪录)
这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码(CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以通过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运行!
(3)LBA2-33 (实际纪录分区信息处)
从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区纪录喔!因为每个 LBA 有 512Bytes,因此每笔纪录用到 128Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说,他的最大容量限制就会在“ 264 512Bytes = 263 1KBytes = 233TB = 8 ZB ”,要注意 1ZB= 230TB 啦! 你说有没有够大了?
GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!GPT好强大的说。
在磁盘管理工具上面, fdisk 这个老牌的软件并不认识 GPT 喔!要使用 GPT 的话,得要操作类似 gdisk 或者是 parted 指令才行!
3、开机流程中的 BIOS 与 UEFI 开机检测程序、多重开机
基本上,目前的主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制。
(1)BIOS 搭配 MBR/GPT 的开机流程
BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。这个开机管理程序的目的是在载入(load)核心文件。
简单的说,整个开机流程到操作系统之前的动作应该是这样的:
1. BIOS:开机主动执行的固件,会认识第一个可开机的设备;
2. MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
4. 核心文件:开始操作系统的功能...
第二点要注意,如果你的分区表为 GPT 格式的话,那么 BIOS 也能够从 LBA0 的 MBR 相容区块读取第一阶段的开机管理程序码, 如果你的开机管理程序能够认识 GPT 的话,那么使用BIOS 同样可以读取到正确的操作系统核心喔!换句话说, 如果开机管理程序不懂 GPT ,例如 Windows XP 的环境,那自然就无法读取核心文件,开机就失败了!
在开机中还有个boot loader,它是操作系统安装在MBR上面的一套软件了,主要执行任务如下:
(1)提供菜单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
(2)载入核心文件:直接指向可开机的程序区段来开始操作系统;
(3)转交其他loader:将开机管理功能转交给其他loader负责。
是第三点很有趣喔!那表示你的计算机系统里面可能具有两个以上的开机管理程序呢! 有可能吗?我们的硬盘不是只有一个MBR而已?是没错啦!但是开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的开机扇区(boot sector)喔!瞎密?分区还有各别的开机扇区喔? 没错啊!这个特色才能造就“多重开机”的功能啊!
(2)多重开机
比如分区时,同时安装了windows和linux时,如下图的设置就可以设置多重开机(选择一个分区作为系统盘开机)
我们将上图作个总结:
(1)每个分区都拥有自己的开机扇区(boot sector)
(2)图中的系统盘为第一及第二分区,
(3)实际可开机的核心文件是放置到各分区内的!
(4)loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已;
(5)loader可直接指向或者是间接将管理权转交给另一个管理程序。
为什么人家常常说:“如果要安装多重开机, 最好先安装Windows再安装Linux”呢?这是因为:
(1)Linux在安装的时候,你可以选择将开机管理程序安装在MBR或各别分区的开机扇区, 而且Linux的loader可以手动设置菜单(就是上图的M1, M2...),所以你可以在Linux的bootloader里面加入Windows开机的选项;
(2)Windows在安装的时候,他的安装程序会主动的覆盖掉MBR以及自己所在分区的开机扇区,你没有选择的机会, 而且他没有让我们自己选择菜单的功能。
因此,如果先安装Linux再安装Windows的话,那MBR的开机管理程序就只会有Windows的项目,而不会有Linux的项目 (因为原本在MBR内的Linux的开机管理程序就会被覆盖掉)。如果先安装linux,也有个救援模式可以用。
(3)UEFI BIOS 搭配 GPT 开机的流程
UEFI 主要是想要取代 BIOS 这个固件界面,因此我们也称 UEFI 为 UEFI BIOS 就是了。UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发!也因为使用 C 语言来撰写,因此如果开发者够厉害,甚至可以在 UEFI 开机阶段就让该系统了解 TCP/IP 而直接上网! 根本不需要进入操作系统耶!这让小型系统的开发充满各式各样的可能性!
基本上,传统 BIOS 与 UEFI 的差异可以用T客帮杂志汇整的表格来说明:
与传统的 BIOS 不同,UEFI 简直就像是一个低阶的操作系统。因为效果华丽但性能不佳,因此这个 UEFI 大多用来作为启动操作系统之前的硬件检测、开机管理、软件设置等目的,基本上是比较难的。 同时,当载入操作系统后,一般来说,UEFI 就会停止工作,并将系统交给操作系统,这与早期的 BIOS 差异不大。
由于过去 cracker 经常借由 BIOS 开机阶段来破坏系统,并取得系统的控制权,因此UEFI 加入了一个所谓的安全启动 (secure boot) 机制。加入这个机制后,许多的操作系统,包括 Linux ,就很有可能无法顺利开机喔!需要将secure boot 功能关闭。