1. 主引导纪录和磁盘分区表
1.1 MBR分区表
启动引导程序记录区与分区表都放在磁盘的第一个扇区(512B)
由于分区表仅占 64B,因此最多能有四组记录区,每组记录区记录了该区段的起始与结束的柱面号码。
- 缺点如下:
- 操作系统无法使用 2TB 以上的磁盘容量
- MBR 仅有一个区块,若被破坏后,经常无法或很难恢复
- MBR 内的存放启动引导程序的区块仅 446B,无法存储较多的程序代码
1.2 GPT 磁盘分区表
(1)LBA0(保护MBR)
出于兼容性考虑,LBA0 存储了一份传统的 MBR 信息,用来防止不支持 GPT 的硬盘管理工具错误识别并破坏硬盘中的数据。
在支持从 GPT 启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个 MBR 中,只有一个标识为 0xEE 的分区,以此来表示这块硬盘使用 GPT 分区表。不能识别 GPT 硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别 GPT 分区表的操作系统会检查保护 MBR 中的分区表,如果分区类型不是 0xEE 或者 MBR 分区表中有多个项,也会拒绝对硬盘进行操作。
(2)LBA1(EFI 信息)
作用:定义分区表的位置和大小,还包含头和分区表的校验和,这样就可以及时发现错误。
(2)LBA2-33(分区表)
分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位(16B)的GUID对系统来说是唯一的。
从 LBA2 区块开始,每个 LBA 都可以记录 4 组分区记录,所以在默认的情况下,总共可以有
4
×
32
=
128
4\times 32=128
4×32=128 组分区纪录。因为每个 LBA 有 512B,因此每组记录用到 128B 的空间,除了每组记录所需要的标识符与相关的记录之外,GPT 在每组记录中分别提供了 64位来记载开始/结束的扇区号码,因此,GPT分区表对于单一分区来说,它的最大容量限制在
2
64
×
512
B
=
8
Z
B
2^{64}\times 512B=8ZB
264×512B=8ZB。
2. BIOS 与 UEFI 启动检测程序
2.1 BIOS 搭配 MBR/GPT 的启动流程
- CMOS:记录各项硬件参数且嵌入在主板上面的存储器。
- BIOS:写入到主板上的一个固件(固件就是写入到硬件上的一个软件程序),BIOS 是启动时计算机系统会主动执行的第一个程序。
- BIOS 会寻找启动盘,并到该硬盘里面去读取第一个扇区的 MBR 位置。MBR 这个仅有 446B 的硬盘容量里面会放置最基本的启动引导程序。
启动流程如下:
- BIOS:启动主动执行的固件,会认识第一个可启动的设备
- MBR:第一个可启动设备的第一个扇区内的主引导记录块,内含启动引导代码
- 启动引导程序(Boot Loader):一个可读取内核文件来执行的软件
- 提供选项:用户可以选择不同的启动选项,这也是多重引导的重要功能
- 选项一:直接加载 Windows 或 Linux 的内核文件来开机
- 选项二:将开机管理工作交给第二个分区的启动扇区
- 加载内核文件:直接指向可使用的程序区段来启动操作系统
- 转交其它启动引导程序:将启动管理功能转交给其它启动引导程序负责
- 启动引导程序除了可以安装在 MBR 之外,还可以安装在每个分区的启动扇区
- 提供选项:用户可以选择不同的启动选项,这也是多重引导的重要功能
- 内核文件:开始启动操作系统
2.2 UEFI BIOS 搭配 GPT 启动的流程
3. Linux 安装模式下,磁盘分区的选择
3.1 文件系统与目录树的关系(挂载)
- 挂载:利用一个目录当成进入点,将磁盘分区的数据放置在该目录下。
4. Linux 目录配置
4.1 Linux 目录配置的依据-FHS
- 根目录的意义与内容:根目录与启动、还原、系统修复等操作有关。根目录所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
目录 | 应放置文件内容 |
---|---|
第一部分 | FHS要求必须存在的目录 |
/bin | 放置的是在单人维护模式下还能被使用的命令,主要有:cat、chmod、chown、date、mv、mkdir、cp、bash等常用命令 |
/boot | 放置启动会使用到的文件,包括 LInux 内核文件以及启动选项与启动所需配置文件等。Linux 内核常用文件名为:vmlinuz。若使用的是grub2启动引导程序,则还会存在/boot/grub2/这个目录。 |
/dev | 放置的是所有设备与接口设备。读写这个目录下面的某个文件就等于读写某个设备,比较重要的文件有/dev/null、/dev/zero、/dev/tty、/dev/loop*、/dev/sd*等 |
/etc | 系统主要的配置文件几乎都放在这个目录中,例如人员的账号密码文件、各种服务的启动文件等。FHS 建议不要放置可执行文件在此目录。比较重要的文件有:/etc/modprobe.d/、/etc/passwd、/etc/fstab、/etc/issue等。另外FHS还规范几个重要的目录最好要存在/etc/目录下: * /etc/opt(必要):这个目录放置第三方辅助软件 /opt 的相关配置文件 * /etc/X11(建议):与 X Window 有关的个汇总配置文件都在这里,其中xorg.conf是X Server的配置文件 * /etc/sgml/(建议):与 SGML 格式有关的各项配置文件 * /etc/xml(建议):与 XML 格式有关的各项配置文件 |
/lib | 放置的是在启动时会用到的函数库以及在/bin或/sbin下面的命令会调用的函数库。FSH要求下面的目录必须要存在: * /lib/modules/:放置可抽换式的内核相关模块(驱动程序) |
/media | 放置的是可删除的设备,包括软盘、光盘、DVD等设备都暂时挂在于此。常见的文件名有:/media/floppy、/media/cdrom等 |
/mnt | 放置的是暂时挂载某些额外的设备。早期本目录的作用同/media,现暂时用来挂载 |
/opt | 放置第三方辅助软件。 |
/run | 放置系统启动后所产生的各项信息。 |
/sbin | 放置启动过程中所需要的启动、修复、还原系统等命令。 |
/srv | 存放一些网络服务所产生的数据。 |
/tmp | 让一般用户或是正在执行的程序暂时放置文件的地方。 |
/usr | 第二层 FHS 设置。是linux系统核心所在,包含了所有的共享文件。 |
/var | 第二层 FHS 设置,主要存放变动性的数据。 |
第二部分 | FHS建议可以存在的目录 |
/home | 系统默认的用户家目录。在新增一个一般用户账号时,默认的用户家目录都会规范到这里来,比较重要的是家目录有两种代号: * ∼ \sim ∼:代表目前这个用户的家目录 * ∼ \sim ∼dmtsai:代表 dmtsai 的家目录 |
/lib | 用来存放与/lib不同格式的二进制函数库,例如支持 64 位的 /lib64 函数库等。 |
/root | 系统管理员的家目录,之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能拥有 root 的家目录。 |
第三部分 | 其它比较重要的目录 |
/lost+found | 使用标准的ext2、ext3、ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下;如果使用的是xfs文件系统,则不会存在这个目录。 |
/proc | 这个目录本身是一个虚拟文件系统,存放的数据都是在内存当中的,例如:系统内核、进程信息、外接设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。比较重要的文件如:/proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/ioports、/proc/net/*等。 |
/sys | 也是一个虚拟文件系统,主要也是记录内核与系统硬件信息相关的内容。包括目前已加载的内核模块与内核检测到的硬件设备信息等,这个目录同样不占硬盘容量。 |
- /usr的意义与内容:/usr 里面存放的数据属于可分享与不可变动,主要存放操作系统软件资源。这个目录会占用最多的硬盘容量。
目录 | 应放置文件内容 |
---|---|
第一部分 | FHS要求必须存在的目录 |
/usr/bin/ | 存放所有的用户命令和/bin的链接文件。FHS要求在此目录下不应该有子目录。 |
/usr/lib/ | 基本上与/lib功能相同。 |
/usr/local/ | 存放本地安装的软件。 |
/usr/sbin/ | 非系统正常运行所需要的系统命令,最常见的就是某些网络服务器软件的服务命令(daemon)。 |
/usr/share/ | 主要放置只读的数据文件,当然也包括共享文件。常见的子目录有: * /usr/share/man:在线帮助文件 * /usr/share/doc:软件的说明文档 * /usr/share/zoneinfo:与时区有关的时区文件 |
第二部分 | FHS建议可以存在的目录 |
/usr/games/ | 存放与游戏相关的数据。 |
/usr/include/ | 存放 C/C++ 等程序语言的头文件与包含文件。当我们以Tarball方式(*.tar.gz的方式安装软件)安装某些程序时,会使用到里面的许多文件。 |
/usr/libexec/ | 存放一般用户不常用的执行文件或脚本等。例如大部分的 X Windows 下面的操作命令。 |
/usr/lib/ | 与 /lib 功能相同,因此目前 /lib 就是链接到此目录中。 |
/usr/src/ | 存放源代码。至于内核源代码建议放置到 /usr/src/Linux/ 目录下。 |
- /var 的意义与内容:/var 目录主要针对经常性变动的文件,包括缓存、日志文件以及某些软件运行所产生的文件。
目录 | 应放置文件内容 |
---|---|
第一部分 | FHS要求必须存在的目录 |
/var/cache/ | 应用程序运行过程中会产生的一些缓存。 |
/var/lib/ | 存放程序执行过程中需要用到的数据文件。在此目录下各软件应该有各自的目录。 |
/var/lock/ | 存放上锁的文件。某些设备或是文件资源一次只能被一个应用程序使用,若同时又两个程序使用该设备,就可能产生一些错误,因此就得将该设备上锁。 |
/var/log/ | 存放日志文件。比较重要的文件有:/var/log/messages、/var/log/wtmp(记录登录信息)等。 |
/var/mail/ | 存放个人电子邮箱。 |
/var/run/ | 存放某些程序或是服务启动后产生的 PID。 |
/var/spool/ | 存放一些队列数据,这些数据被使用后会被删除。举例来说:系统收到新邮件会放到/var/spool/mail/中,但用户收下该邮件后该封信原则上就会被删除,邮件如果暂时寄不出去会被放到/var/spool/mqueue/中,等到被送出后就被删除。 |