1.虚拟机
『在 Linux 系统中,每个装置都被当成一个文件来对待』 举例来说,IDE 接口的硬盘的文件名即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/sda, /dev/sdb,/dev/sdc, 及 /dev/sdd 这四个文件
由于 IDE 界面的磁盘驱动器几乎已经被淘汰,太少见了!因此现在连 IDE 界面的磁盘文件名也都被仿真成 /dev/sd[a-p] 了!此外, 如果你的机器使用的是跟因特网供货商 (ISP) 申请用的云端机器,这时可能会得到的是虚拟机。为了加速,虚拟机内的磁盘是使用仿真器产生, 该仿真器产生的磁盘文件名为 /dev/vd[a-p] 系列的文件名喔!要注意!要注意!
由于虚拟化的软件非常之多,网络上也有一堆朋友的教学在。如果你的系统是 windows 系列的话,
鸟哥个人推荐你使用 virtualbox 这个软件! 至于如果你原本就用 Linux 系统,例如 Fedora/Ubuntu
等系列的话,那么建议你使用原本系统内就有的虚拟机管理员来处理即可。目前 Linux 系统大多使
用 KVM 这个虚拟化软件就是了。底下提供一些网站给您学习学习!鸟哥之后的章节所使用的机器,
就是透过 KVM 建置出来的系统喔! 提供给妳作参考啰。
2.磁盘分区
前面内存的地方我们有提过 CMOS 与 BIOS 的功能,在这里我们再来强调一下: CMOS 主要的功能
为记录主板上面的重要参数, 包括系统时间、CPU 电压与频率、各项设备的 I/O 地址与 IRQ 等,由
于这些数据的记录要花费电力,因此主板上面才有电池。 BIOS 为写入到主板上某一块 flash 或
EEPROM 的程序,他可以在开机的时候执行,以加载 CMOS 当中的参数, 并尝试呼叫储存装置中
的开机程序,进一步进入操作系统当中。BIOS 程序也可以修改 CMOS 中的数据, 每种主板呼叫 BIOS
设定程序的按键都不同,一般桌面计算机常见的是使用[del]按键进入 BIOS 设定画面。
计算机常见的磁盘接口有两种, 分别是SATA与SAS接口,目前(2015)的主流是 SATA 接口。
虚拟机使用的『虚拟磁盘』并不是正规的磁盘界面!这种情况底下,你的磁盘文件名就不一样了! 正
常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境底下,为了加速,可能就
会使用 /dev/vd[a-p] 这种装置文件名喔! USB 磁盘(开机完成后才被系统捉到)
实际的数据都是写在具有磁性物质的磁盘盘上头,而读写主要是透过在机械手臂上的读取头(head)来达成。实际运作时, 主轴马达让磁盘盘转动,然后机械手臂可伸展让读取头在磁盘盘上头进行读写的动作。 另外,由于单一磁盘盘的容量有限,因此有的硬盘内部会有两个以上的磁盘盘喔,这个小区块就是磁盘的最小物理储存单位,称之为扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的磁道(track)。 由于磁盘里面可能会有多个磁盘盘,因此在所有磁盘盘上面的同一个磁道可以组合成所谓的磁柱 (cylinder)。我们知道同心圆外圈的圆比较大,占用的面积比内圈多啊!所以,为了善用这些空间,因此外围的圆会具有更多的扇区当磁盘盘转一圈时,外圈的扇区数量比较多,因此如果数据写入在外圈,转一圈能够读写的数据量当然比内圈还要多! 因此通常数据的读写会由外圈开始往内写的喔!原本硬盘的扇区都是设计成 512byte 的容量,但因为近期以来硬盘的容量越来越大,为了减少数据量的拆解,所以新的高容量硬盘已经有 4Kbyte 的扇区设计! 购买的时候也需要注意一下。也因为这个扇区的设计不同了,因此在磁盘的分区方面,目前有旧式的 MSDOS 兼容模式,以及较新的 GPT 模式喔! 在较新的 GPT 模式下,磁盘的分区通常使用扇区号码来设计,跟过去旧的MSDOS 是透过磁柱号码来分区的情况不同喔。
MSDOS(MBR) 与 GPT 磁盘分区表(partition table)
整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息! 早期磁盘第一个扇区里面含有的重要信息我们称为 MBR (Master Boot Record) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition
table)!
通常磁盘可能有多个磁盘盘,所有磁盘盘的同一个磁道我们称为磁柱 (Cylinder), 通常那是文件系统的最小单位,也就是分区槽的最小单位啦!为什么说『通常』呢?因为近来有 GPT 这个可达到 64bit 纪录功能的分区表, 现在我们甚至可以使用扇区 (sector)号码来作为分区单位哩!厉害了! 所以说,我们就是利用参考对照磁柱或扇区号码的方式来处理啦
早期的 Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master BootRecord, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512bytes 的大小 (旧的磁盘扇区都是 512bytes 喔!),所以说,第一个扇区 512bytes 会有这两个数据:
主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes由于分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。 由于分区表就只有 64 bytes 而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区槽。硬盘的四个分区记录区仅使用到两个,P1 为主要分区,而 P2 则为延伸分区。请注意, 延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。 然后我们可以透过延伸分区所指向的那个区块继续作分区的记录。延伸分区并不是只占一个区块,而是会分布在每个分区槽的最前面几个扇区来记载分区信息的!
如果区块有继续分区出五个分区槽, 这五个由延伸分区继续切出来的分区槽,就被称为逻辑分区槽(logical partition)。 同时注意一下,由于逻辑分区槽是由延伸分区继续分区出来的,所以他可以使用的磁柱范围就是延伸分区所设定的范围喔!
同样的,上述的分区槽在 Linux 系统中的装置文件名分别如下:
P1:/dev/sda1
P2:/dev/sda2
L1:/dev/sda5
L2:/dev/sda6
L3:/dev/sda7
L4:/dev/sda8
L5:/dev/sda9
仔细看看,怎么装置文件名没有/dev/sda3 与/dev/sda4 呢?因为前面四个号码都是保留给 Primary 或Extended 用的嘛! 所以逻辑分区槽的装置名称号码就由 5 号开始了!这在 MBR 方式的分区表中是个很重要的特性,不能忘记喔!
如果的 D 与 E 两个人槽同属于延伸分区内的逻辑分区,因此只要将两个分区槽删除,然后再重新建立一个新的分区槽, 就能够在不影响其他分区槽的情况下,将两个分区槽的容量整合成为一个,如果D 与 E 分属主分区与逻辑分区,两者不能够整合在一起。除非将延伸分区破坏掉后再重新分区。 但如此一来会影响到所有的逻辑分区槽,要注意的是:如果延伸分区被破坏,所有逻辑分区将会被删除。 因为逻辑分区的信息都记录在延伸分区里面嘛
Primary+Extended 最多只能有四个,其中 Extended 最多只能有一个, Primary可以1~3个,想要分区出四个分区槽且还要预留剩余容量, 因此 P+P+P+P 的分区方式是不适合的。因为如果使用到四个 P,则即使硬盘还有剩余容量, 因为无法再继续分区,所以剩余容量就被浪费掉了。假设你想要将所有的四笔记录都花光,那么 P+P+P+E 是比较适合的。所以可以用的四partitions 有 3 个主要及一个逻辑分区, 剩余的容量在延伸分区中。如果你要分区超过 4 槽以上时,一定要有 Extended 分区槽,而且必须将所有剩下的空间都分配给 Extended,然后再以 logical 的分区来规划 Extended 的空间。 另外,考虑到磁盘的连续性,一般建议将 Extended 的磁柱号码分配在最后面的磁柱内
MBR 分区表除了上述的主分区、延伸分区、逻辑分区需要注意之外,由于每组分区表仅有 16bytes 而
已,因此可纪录的信息真的是相当有限的! 所以,在过去 MBR 分区表的限制中经常可以发现如下
的问题:
操作系统无法抓取到 2.2T 以上的磁盘容量!
MBR 仅有一个区块,若被破坏后,经常无法或很难救援。
MBR 内的存放开机管理程序的区块仅 446bytes,无法容纳较多的程序代码。
因为过去一个扇区大小就是 512bytes 而已,不过目前已经有 4K 的扇区设计出现!为了兼容于所有
的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处
理。GPT 将磁盘所有区块以此 LBA(预设为 512bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从
0 开始编号)。MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!
同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,
整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧
LBA0 (MBR 相容区块)
与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的
区块,储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内,这个兼容模式仅
放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分区表的磁盘
管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件
不能修改此分区信息,进一步保护了此磁盘喔!
LBA1 (GPT 表头纪录)
这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区 (就是前面谈到
的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码 (CRC32),操
作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以透过这个纪录区来
取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运作!
LBA2-33 (实际纪录分区信息处)
从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共
可以有 4*32 = 128 笔分区纪录喔!因为每个 LBA 有 512bytes,因此每笔纪录用到 128
bytes 的空间,除了每笔纪录所需要的标识符与相关的纪录之外,GPT 在每笔纪录中分别
提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对于单一分区槽来说, 他
的最大容量限制就会在『 2 64 * 512bytes = 2 63 * 1Kbytes = 2 33 *TB = 8 ZB 』,要注意 1ZB =
2 30 TB 啦! 你说有没有够大了?
现在 GPT 分区预设可以提供多达 128 笔纪录,而在 Linux 本身的核心装置纪录中,针对单一磁盘
来说,虽然过去最多只能到达 15 个分区槽,不过由于 Linux kernel 透过 udev 等方式的处理,现在
Linux 也已经没有这个限制在了! 此外,GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既
然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔
3.那开机的检测程序又分成啥鬼东西呢?就是 BIOS 与 UEFI 啦!
CMOS 是记录各项硬件参数且嵌入在主板上面的储存器,BIOS 则是一个写入到主板上的一个韧体(再次说明, 韧体就是写入到硬件上的一个软件程序)。这个 BIOS 就是在开机的时候,计算机系统会主动执行的第一个程序了!
整个开机流程到操作系统之前的动作应该是这样的:
- BIOS:开机主动执行的韧体,会认识第一个可开机的装置;
- MBR:第一个可开机装置的第一个扇区内的主要启动记录区块,内含开机管理程序;
- 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
- 核心文件:开始操作系统的功能…
如果你的分区表为 GPT 格式的话,那么 BIOS 也能够从 LBA0 的 MBR 兼容区块
读取第一阶段的开机管理程序代码, 如果你的开机管理程序能够认识 GPT 的话,那么使用 BIOS
同样可以读取到正确的操作系统核心喔!换句话说, 如果开机管理程序不懂 GPT ,例如 Windows
XP 的环境,那自然就无法读取核心文件,开机就失败了!
: 『如果要安装多重引导, 最好先安装 Windows 再安装 Linux』
呢?这是因为:
Linux 在安装的时候,你可以选择将开机管理程序安装在 MBR 或各别分区槽的启动扇区, 而且 Linux 的
loader 可以手动设定选单(就是上图的 M1, M2…),所以你可以在 Linux 的 boot loader 里面加入 Windows 开机
的选项;
Windows 在安装的时候,他的安装程序会主动的覆盖掉 MBR 以及自己所在分区槽的启动扇区,你没有选择
的机会, 而且他没有让我们自己选择选单的功能。
因此,如果先安装 Linux 再安装 Windows 的话,那 MBR 的开机管理程序就只会有 Windows 的项目,
而不会有 Linux 的项目 (因为原本在 MBR 内的 Linux 的开机管理程序就会被覆盖掉)。 那需要重新
安装 Linux 一次吗?当然不需要,你只要用尽各种方法来处理 MBR 的内容即可。 例如利用 Linux
的救援模式来挽救 MBR 啊!
我们现在知道 GPT 可以提供到 64bit 的寻址,然后也能够使用较大的区块来处理开机管理程序。但
是 BIOS 其实不懂 GPT 耶!还得要透过 GPT 提供兼容模式才能够读写这个磁盘装置~而且 BIOS
仅为 16 位的程序,在与现阶段新的操作系统接轨方面有点弱掉了! 为了解决这个问题,因此就有
了 UEFI (Unified Extensible Firmware Interface) 这个统一可延伸韧体界面的产生。
UEFI 主要是想要取代 BIOS 这个韧体界面,因此我们也称 UEFI 为 UEFI BIOS 就是了。UEFI 使
用 C 程序语言,比起使用汇编语言的传统 BIOS 要更容易开发!也因为使用 C 语言来撰写,因此
如果开发者够厉害,甚至可以在 UEFI 开机阶段就让该系统了解 TCP/IP 而直接上网
此外,由于过去 cracker 经常藉由 BIOS 开机阶段来破坏系统,并取得系统的控制权,因此 UEFI 加
入了一个所谓的安全启动 (secure boot) 机制, 这个机制代表着即将开机的操作系统必须要被 UEFI
所验证,否则就无法顺利开机!微软用了很多这样的机制来管理硬件。 不过加入这个机制后,许多
的操作系统,包括 Linux ,就很有可能无法顺利开机喔!所以,某些时刻,你可能得要将 UEFI 的
secure boot 功能关闭, 才能够顺利的进入 Linux 哩! (这一点让自由软件工作者相当感冒啦!)
与 BIOS 模式相比,虽然 UEFI 可以直接取得 GPT 的分区表,不过最好依旧拥有 BIOS boot
的分区槽支持, 同时,为了与 windows 兼容,并且提供其他第三方厂商所使用的 UEFI 应用程序
储存的空间,你必须要格式化一个 vfat 的文件系统, 大约提供 512MB 到 1G 左右的容量,以让
其他 UEFI 执行较为方便。
4.文件系统与目录树的关系( 挂载)
整个 Linux 系统使用的是目录树架构,但是我们的文件数据其实是放置在磁盘分区槽当
中的, 现在的问题是『如何结合目录树的架构与磁盘内的数据』呢? 这个时候就牵扯到『挂载(mount)』
的问题啦! 所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,
进入该目录就可以读取该分区槽的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂
载点』。 由于整个 Linux 系统最重要的是根目录,因此根目录一定需要挂载到某个分区槽的。 至于
其他的目录则可依用户自己的需求来给予挂载到不同的分区槽
既然我们在 Linux 系统下使用的是目录树系统,所以安装的时候自然就得要规划磁盘分区与目录树的
挂载了。 实际上,在 Linux 安装的时候已经提供了相当多的默认模式让你选择分区的方式了, 不过,
无论如何,分区的结果可能都不是很能符合自己主机的样子!因为毕竟每个人的『想法』都不太一样!
因此,强烈建议使用『自定义安装, Custom 』这个安装模式!在某些 Linux distribution 中,会将这个
模式写的很厉害,叫做是『Expert, 专家模式』,这个就厉害了, 请相信您自己,了解上面的说明后,
就请自称为专家了吧!没有问题!