第二章 主机规划与磁盘分区
2.1 Linux与硬件的搭配
2.1.1 认识计算机的硬件配备
1.打游戏:因为现在一般的三维(3D)计算机游戏所需要的3D光影运算太多了,所以显示适配器与CPU资源都会被耗用的非常多! 当然就需要比较高级的配备啰,尤其是在显示适配器、CPU(例如Intel的 I5, I7 系列的) 及主板芯片组方面的功能
2.效能比,性价比
3.支持度:并非所有的产品都会支持特定的操作系统,这牵涉到硬件开发商是否有意愿提供适当的驱动程序之故。 因此,当我们想要购买或者是升级某些计算机组件时,应该要特别注意该硬件是否有针对您的操作系统提供适当的驱动程序
2.1.2 选择与Linux搭配的主机配备
1. 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
2.1.3 各硬件装置在Linux中的档名
『在Linux系统中,每个装置都被当成一个档案来对待』 举例来说,SATA接口的硬盘的文件名即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd这四个档案的意思
这种中括号 [ ] 型式的表示法在后面的章节当中会使用得很频繁,请特别留意
另外先提出来强调一下,在Linux这个系统当中,几乎所有的硬件装置档案都在/dev这个目录内, 所以你会看到/ dev/sda, /dev/sr0等等的档名喔
更多Linux核心支持的硬件装置与档名,可以参考如下网页:https://www.kernel.org/doc/Documentation/devices.txt
2.1.4 使用虚拟机学习
Virtualbox 官网 (https://www.virtualbox.org)
Virtualbox 官网教学 (https://www.virtualbox.org/manual/ch01.html)
Fedora 教学 http://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/ part-Virtualization- Virtualization_Reference_Guide.html
2.2.1 磁盘连接的方式与装置档名的关系
1. 本身:SATA接口的硬盘的文件名即为/dev/sd[a-d] 虚拟机:/dev/vd[a-p]
早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式
由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。 因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)! 这两种分割格式与限制不太相同啦
2.2.2 MSDOS(MBR) 与 GPT 磁盘分区表(partition table)
分割表其实目前有两种格式喔
1.MSDOS (MBR) 分割表格式与限制
早期的 Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分割表! 而开机管理程序纪录区与分割表则通通放在磁盘的第一个扇区, 这个扇区通常是 512bytes 的大小 (旧的磁盘扇区都是 512bytes 喔! ),所以说,第一个扇区 512bytes 会有这两个数据:
由于分割表所在区块仅有64 bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。 若将硬盘以长条形来看,然后将磁柱以柱形图来看,那么那64 bytes的记录区段有点像底下的图标:
假设上面的硬盘装置档名为/dev/sda时,那么这四个分割槽在Linux系统中的装置档名如下所示, 重点在于档名后面会再接一个数字,这个数字与该分割槽所在的位置有关喔!
P1:/dev/sda1 P2:/dev/sda2 P3:/dev/sda3 P4:/dev/sda4
分割表就只有64 bytes而已,最多只能容纳四笔分割的记录
其实所谓的『分割』只是针对那个64 bytes的分割表进行设定而已!
硬盘默认的分割表仅能写入四组分割信息
这四组分割信息我们称为主要(Primary)或延伸(Extended)分割槽
分割槽的最小单位『通常』为磁柱(cylinder)
当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分割槽进行数据的处理
为啥要分割啊?
既然第一个扇区所在的分割表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分割信息? 可以的
https://en.wikipedia.org/wiki/Extended_boot_record
如上图右下方那个区块有继续分割出五个分割槽, 这五个由延伸分割继续切出来的分割槽,就被称为逻辑分割槽(logical partition)。 同时注意一下,由于逻辑分割槽是由延伸分割继续分割出来的,所以他可以使用的磁柱范围就是延伸分割所设定的范围喔! 也就是图中的101~400啦!
同样的,上述的分割槽在Linux系统中的装置档名分别如下:
仔细看看,怎么装置档名没有/dev/sda3与/dev/sda4呢? 因为前面四个号码都是保留给Primary或Extended用的嘛! 所以逻辑分割槽的装置名称号码就由5号开始了! 这在 MBR 方式的分割表中是个很重要的特性,不能忘记喔!
MBR 主要分割、延伸分割与逻辑分割的特性我们作个简单的定义啰:
事实上,分割是个很麻烦的东西,因为他是以磁柱为单位的『连续』磁盘空间, 且延伸分割又是个类似独立的磁盘空间,所以在分割的时候得要特别注意。 我们举底下的例子来解释一下好了:
例题:在Windows操作系统当中,如果你想要将D与E槽整合成为一个新的分割槽,而如果有两种分割的情况如下图所示, 图中的特殊颜色区块为D与E槽的示意,请问这两种方式是否均可将D与E整合成为一个新的分割槽?
MBR 分割表除了上述的主分割、延伸分割、逻辑分割需要注意之外,由于每组分割表仅有 16bytes 而已,因此可纪录的信息真的是相当有限的! 所以,在过去 MBR 分割表的限制中经常可以发现如下的问题:
2.GUID partition table, GPT 磁碟分割表
MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分割信息! 同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份! 这样或许会比较安全些吧
现在 GPT 分割默认可以提供多达 128 笔纪录,而在 Linux 本身的核心装置纪录中,针对单一磁盘来说,虽然过去最多只能到达 15 个分割槽,不过由于 Linux kernel 透过 udev 等方式的处理,现在 Linux 也已经没有这 个限制在了! 此外,GPT 分割已经没有所谓的主、延伸、逻辑分割的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分割! 每一个分割都可以拿来格式化使用喔
与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,储存了第一阶段的开机管理程序! 而在原本的分割表的纪录区内,这个兼容模式仅放入一个特殊标志的分割,用来表示此磁盘为 GPT 格式之意。 而不懂 GPT 分割表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分割信息,进一步保护了此磁盘喔!
这个部份纪录了分割表本身的位置与大小,同时纪录了备份用的 GPT 分割 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分割表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。 若有错误,还可以透过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运作!
从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分割纪录,所以在默认的情况下,总共可以有 4*32 = 128 笔分割纪录喔! 因为每个 LBA 有 512bytes,因此每笔纪录用到 128 bytes 的空间,除了每笔纪录所需要的标识符与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分割表对于单一分割槽来说, 他的最大容量限制就会在『 264 * 512bytes = 263 * 1Kbytes = 233*TB = 8 ZB 』,要注意 1ZB = 230TB 啦! 你说有没有够大了?
1.BIOS 搭配 MBR/GPT 的开机流程
这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!
接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据用户的设定去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
这个开机管理程序的目的是在加载(load)核心档案, 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心档案, 然后接下来就是核心档案的工作, 开机管理程序与 BIOS 也功成圆满,将之后的工作就交给大家所知道的操作系统啦
简单的说,整个开机流程到操作系统之前的动作应该是这样的:
2.UEFI BIOS 搭配 GPT 开机的流程
由于 UEFI 已经克服了 BIOS 的 1024 磁柱的问题,因此你的开机管理程序与核心可以放置在磁盘开始的前 2TB 位置内即可! 加上之前提到的 BIOS boot 以及 UEFI 支持的分割槽,基本上你的 /boot 目录几乎都是 /dev/sda3 之后的号码了! 这样开机还是没有问题的! 所以要注意喔! 与以前熟悉的分割状况已经不同, /boot 不再是 /dev/sda1 啰! 很有趣吧!
比较项目 | 传统 BIOS | UEFI |
使用程序语言 | 汇编语言 | C 语言 |
硬件资源控制 | 使用中断 (IRQ) 管理 不可变的内存存取 不可变得输入/输出存取 |
使用驱动程序与协议 |
处理器运作环境 | 16 位 | CPU 保护模式 |
扩充方式 | 透过 IRQ 链接 | 直接加载驱动程序 |
第三方厂商支持 | 较差 | 较佳且可支持多平台 |
图形化能力 | 较差 | 较佳 |
内建简化操作系统前环境 | 不支持 | 支持 |
2.2.4 Linux安装模式下,磁盘分区的选择(极重要)
1.目录树结构:
Linux内的所有数据都是以档案的形态来呈现的,所以啰,整个Linux系统最重要的地方就是在于目录树架构。 所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种档案架构。 所以,整个目录树架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线『/』, 所有的档案都与目录树有关
2.文件系统与目录树的关系(挂载)
所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽的意思。 这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。 由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽的。 至于其他的目录则可依用户自己的需求来给予挂载到不同的分割槽
2.3 安装Linux前的规划
2.3.1 选择适当的distribution
2.3.2 主机的服务规划与硬件的关系
2.3.3 主机硬盘的主要规划
2.3.4 鸟哥的两个实际案例