录内
(
要记得
/lib
不可以与
/
分别放在不同的
partition
)
因此在开机的过程中核心必须要挂载
根目录,这样才能够读取核心模块提供加载驱动程序的功能。
而且为了担心影响到磁盘内的文件系
统,因此开机过程中根目录是以只读的方式来挂载的喔。
一般来说,非必要的功能且可以编译成为模块的核心功能,目前的
Linux distributions
都会½他编译
成为模块。
因此
USB, SATA, SCSI...
等磁盘装置的驱动程序通常都是以模块的方式来存在的
在来思考一种情况,假设你的
linux
是安装在
SATA
磁盘上面的,你可以透过
BIOS
INT 13
boot loader
kernel
文件来开机,然后
kernel
会开始½管系统并且侦测硬件及尝试挂载根目录
来取得额外的驱动程序。
问题是,
核心根本不认识
SATA
磁盘,所以需要加载
SATA
磁盘的驱动程序,
否则根本就无法挂
载根目录。但是
SATA
的驱动程序在
/lib/modules
内,你根本无法挂载根目录又怎么读取到
/lib/modules/
内的驱动程序?
是吧!非常的两难吧!在这个情况之下,你的
Linux
是无法顺利开机
的!
那怎办?没关系,我们可以透过虚拟文件系统来处理这个问题。
虚拟文件系统
(Initial RAM Disk
Initial RAM Filesystem)
一般使用的档名为
/boot/initrd
/boot/initramfs
,这个文件的特色是,他也能够透过
boot loader
来加载到内存中,然后这个文件会被
½压缩并且在内存当中仿真成一个根目录,
且此仿真在内存当中的文件系统能够提供一支可执行的
程序,透过该程序来
加载开机过程中所最需要的核心模块,
通常这些模块就是
USB, RAID, LVM,
SCSI
等文件系统与磁盘½口的驱动程序啦
!等载入完成后,
会帮助核心重新呼½
systemd
来开始
后续的正常开机流程。
19.1.3
BIOS
boot loader
及核心加载流程示意图
如上图所示,
boot loader
可以加载
kernel
initramfs
,然后在内存中让
initramfs
½压缩成为根目
录,
kernel
就能够½此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系
统,就能够开始后续的正常开机流程。
更详细的
initramfs
说明,你可以自行使用
man initrd
去查
阅看看。
底下让我们来了½一下
CentOS 7.x
initramfs
文件内容有什么吧!
^_^
# 1.
直½看一下
initramfs
里面的
容有些啥
据?
[root@study ~]#
l
sinitrd /boot/initramfs
-
3.10.0
-
229.el7.x86_64.img
#
首先
呼½出
initramfs
最前面文件
据½
部份
占用一些容量!
Image: /boot/initramfs
-
3.10.0
-
229.el7.x86_64.img: 18M
========================================================================
Early CPIO image