Linux 系统的启动步骤
MSDOS (MBR) 分区表格式与限制
第一个扇区 512bytes 会有这两个数据:
• 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
• 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes
由于分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启
始与结束的磁柱号码。
在过去 MBR 分区表的限制中经常可以发现如下的问题:
• 操作系统无法抓取到 2.2T 以上的磁盘容量!
• MBR 仅有一个区块,若被破坏后,经常无法或很难救援。
• MBR 内的存放开机管理程序的区块仅 446bytes,无法容纳较多的程序代码。
GUID partition table, GPT 磁盘分区表
为了兼容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处
理。 GPT 将磁盘所有区块以此 LBA(预设为 512bytes 喔! )来规划,而第一个 LBA 称为 LBA0 (从0 开始编号)
与 MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!
同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外, 整
个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!详细的结构有点像底下
的模样(注 1):
从 LBA2 区块开始, 每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共
可以有 4*32 = 128 笔分区纪录喔!因为每个 LBA 有 512bytes,因此每笔纪录用到 128
bytes 的空间,除了每笔纪录所需要的标识符与相关的纪录之外, GPT 在每笔纪录中分别
提供了 64bits 来记载开始/结束的扇区号码,因此, GPT 分区表对于单一分区槽来说, 他
的最大容量限制就会在
UEFI BIOS 搭配 GPT 开机的流程
因为BIOS 其实不懂 GPT,还得要透过 GPT 提供兼容模式才能够读写这个磁盘装置~而且 BIOS 仅
为 16 位的程序,在与现阶段新的操作系统接轨方面有点弱掉了! 为了解决这个问题,因此就有了
UEFI (Unified Extensible Firmware Interface) 这个统一可扩展固件接口的产生。
举例:双系统安装
一般先windows,再linux
此例希望保留 Linux (因为开机管理是由 Linux 管的) 在前面,windows 在后面的分区槽内, 因此需要先安装 Linux 后再安装 windows,后来透过修改系统配置文件来让系统达成多重引导!
必须在 Linux 安装时,得要将上述的所有分区槽先分区出来喔
在安装界面,出现软件源选择哪个界面,按下『[ctrl]+[alt]+[f2] 』来进入安装过程的 shell 环境
用parted命令可以分出指定顺序的分区:
接下来再次按下『[ctrl]+[alt]+[f6] 』来回到原本的安装流程中,如下:
安装完毕之后, 你也无须进入到设定的项目,在重新启动后,塞入 windows 7 的原版光盘, 之后
持续的安装下去!要注意,得要选择那个 100G 容量的分区槽安装才行!
首先,放入原版光盘,重新启动并且进入类似 图的画面中,
然后依据底下的方式来处理救援模式。进入『Troubleshooting 』,选择『 Rescue a CentOS system 』, 等
待几秒钟的开机过程,之后系统会出现如下的画面,请选择『Continue 』喔!
如果真的有找到 Linux 的操作系统,那么就会出现如下的图示,告诉你,你的原本的系统放置于
/mnt/sysimage 当中喔!
接着下来准备要救援 MBR 的开机管理程序啰!处理的方法指令如下:
接下来我们可以修订开机选单了!不然开机还是仅有 Linux 而已~先以正常流程登入 Linux 系统,
切换身份成为 root 之后,开始进行底下的任务:
接下来就可以测试能否成功了!
boot loader 主要的功能如下:
• 提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能!
• 载入核心文件:直接指向可开机的程序区段来开始操作系统;
• 转交其他 loader:将开机管理功能转交给其他 loader 负责。
Windows 的 loader 预设不具有控制权转交的功能,因此你不能使用 Windows 的 loader 来加载 Linux 的 loader 喔!MBR 与多重引导时,会特别强调先装 Windows 再装 Linux 的缘故。
加载核心侦测硬件与 initramfs 的功能
此时 Linux 核心会以自己的功能重新侦测一次硬件,而不一定会使用 BIOS 侦测到的硬件
信息喔!也就是说,核心此时才开始接管 BIOS 后的工作了。 那么核心文件在哪里啊?一般来说,
他会被放置到 /boot 里面,并且取名为 /boot/vmlinuz 才对!
了解一下 CentOS 7.x 的 initramfs 文件内容有什么
第一支程序 systemd 及使用 default.target 进入开机程序分析
systemd 的 PID 号码是1号。 systemd 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语系处理、文件系统格式及其他服务的启动等。 而所有的动作都会透过 systemd 的默认启动服务集合,亦即是 /etc/systemd/system/default.target 来规划。
常见的操作环境 target 与兼容于 runlevel 的等级
但是过去的 systemV 使用的是一个称为 runlevel (执行等级) 的概念来启动系统的, systemd 为了兼容于旧式的 systemV 操作行为, 所以也将 runlevel 与操作环境做个结合喔!你可以使用底下的方式来查询两者间的对应:
取得了 /etc/systemd/system/default.target 这一个预设操作界面的设定之后
接下来:
它会链接到 /usr/lib/systemd/system/ 这个目录下去取得multi-user.target 或 graphical.target 这两个其中的一
假设我们是使用 graphical.target,接着下来 systemd 会去找两个地方的设定, 就是如下的目录:
• /etc/systemd/system/graphical.target.wants/:使用者设定加载的 unit
• /usr/lib/systemd/system/graphical.target.wants/:系统默认加载的 unit
最终这些数据就可以透过
『systemctl list-dependencies graphical.target 』这个指令来列出所有的相关性的服务
systemd 开机流程大约是这样:
1. local-fs.target + swap.target:这两个 target 主要在挂载本机 /etc/fstab 里面所规范的文件系统与相关的内存
置换空间。
2. sysinit.target:这个 target 主要在侦测硬件,加载所需要的核心模块等动作。
3. basic.target:加载主要的外围硬件驱动程序与防火墙相关任务
4. multi-user.target 底下的其它一般系统或网络服务的加载
5. 图形界面相关服务如 gdm.service 等其他服务的加载
相 容 systemV 的 rc-local.service
旧版 Linux 当系统完成开机后,还想要让系统额外执行某些程序的话,可以将该程序指令或脚本的绝对路径名称写入到 /etc/rc.d/rc.local 这个文件去。
新的 systemd 机制中,它建议直接写一个 systemd 的启动脚本配置文件到 /etc/systemd/system 底下,然后使用
systemctl enable 的方式来设定启用它,而不要直接使用 rc.local 这个文件
新版的 systemd 有支持!那就是 rc-local.service 这个服务的功能了!这个服务不需要启动,它会自己判断 /etc/rc.d/rc.local 是否具有可执行的权限来判断要不要启动这个服务!
透过这个 chmod a+x /etc/rc.d/rc.local 的步骤,你的许多脚本就可以放在 /etc/rc.d/rc.local 这个文件内,
系统在每次开机都会去执行这文件内的指令喔!