|
在前面提到过 initramfs,它的目的是在于提供开机过程中所需要的最重要核心模块,让系统开机过程可以顺利完成。
一般来说,需要 initramfs 的时刻有:
根目录所在磁盘为 STAT、USB 或 SCSI 等连接接口
根目录所在文件系统为 LVM、RAID 等特殊格式
根目录所在文件系统为非传统 LInux 认识的文件系统时
其他必须要在核心加载时提供的模块
一般来说,各 distribution 提供的核心都会附上 initramfs 文件,但是如果你有特殊需要想重新制作 initramfs 文件的话,可以使用 dracut\mkinitrd 来处理
在 CentOS 7 下应该使用 dracut,这里也主要介绍它
dracut [-fv] [--add-drivers 列表] initramfs 文件名 核心版本
选项与参数:
-f:强迫编译出 initramfs,如果 initramfs 文件已经存在,则覆盖旧文件
-v:显示 dracut 的运行过程
--add-drivers 列表:在原本的默认核心模块中,增加某些你想要的模块,模块维护核心所在目录 `/lib/modules/$(uname -r)/kernel/*`
initramfs 文件名:你需要的文件名,开头最好以 initramfs,后面接版本与功能
核心版本:默认是目前运行中的核心版本,也可以手动输入其他不同版本
dracut 还有很多功能。例如下面的几个参数:
--modules:将 dracut 所提供的开机锁需模块(核心模块)加载,可用模块在 /usr/lib/dracut/modules.d/ 目录
--gzip|--bzip2|--xz:尝试使用哪一种压缩方式来进行 initramfs 压缩,默认使用 gzip
--filesystem:加入某些额外的文件系支持
# 范例 1:以 dracut 的默认功能建立一个 initramfs 虚拟盘文件
[root@study ~]# dracut -v initramfs-test.img $(uname -r)
Executing: /sbin/dracut -v initramfs-test.img 3.10.0-1062.el7.x86_64
dracut module 'busybox' will not be installed, because command 'busybox' could not be found!
...
dracut module 'cifs' will not be installed, because command 'mount.cifs' could not be found!
*** Including module: bash ***
*** Including module: nss-softokn ***
*** Including module: i18n ***
*** Including module: network ***
*** Including module: ifcfg ***
*** Including module: drm ***
*** Including module: plymouth ***
*** Including module: dm ***
Skipping udev rule: 64-device-mapper.rules
....
# 范例 2:额外加入 e100e 网卡驱动与 ext4/nfs 文件系统在新的 initramfs 内
[root@study ~]# dracut -v --add-drivers "e10001" --filesystems "ext4 nfs" initramfs-new.img $(uname -r)
[root@study ~]# lsinitrd initramfs-new.img | grep -E '(e1000|ext4|nfs)'
Arguments: -v --add-drivers 'e10001' --filesystems 'ext4 nfs'
nfs
-rw-r--r-- 1 root root 15 Mar 29 21:52 etc/modprobe.d/nfs.conf
...
Copied!
建立完成之后,同时核心也处理完成后,就可以使用 grub2 来建立选单了。下面继续
|
|