`

mkinitcpio配置

 
阅读更多

关于:
mkinitcpio是一代的initramfs制作工具。相对于老的mkinitrd和mkinitramfs,它有以下很多优点。
*它使用Linux核心开发小组开发的klibc和kinit为早期(启动)的userspace提供一个小巧轻量级的基本系统。
*它在系统启动的时候使用udev来检测硬件,因此防止大量不必要的模块被加载。
*基于hook的init脚本使它很容易通过自定义hooks来进行扩展(/etc/mkinitcpio.conf),有很多hooks包含在源里的软件包里,可以很容易用pacman来安装,从而避免修改mkinitcpio自身。
*它早已经为legacy和luks volumes两者、raid、swsusp、suspend2唤醒以及从USB设备启动提供lvm2,dm-crypt支持。
*很多新特性可以通过内核参数来进行调整,而不用重建image.
* mkinitcpio可以将image集成在一个内核镜像之中,因此制作一个自我包含的内核镜像已经成为可能。

mkinitcpio在community社区的协助下,由phrakture和tpowa开发完成。

安装mkinitcpio
添加current的源,通过pacman -Sy mkinitcpio安装。
如果想使用最新开发版本,可以使用phrakture的svn源:
#svn co http://phraktured.net/initramfs
最新的程序位于initramfs/mkinitcpio目录下

为2.6.17内核激活mkinicpio
在内核安装或升级的过程中,会又两个镜像生成。
如果你使用kernel26
/boot/kernel26.img --> 通过autodetect削减了体积
/boot/kernel26-fallback.img -->包括了全部的模块
如果你使用kernel26beyond
/boot/kernel26beyond.img --> 通过autodetect削减了体积
/boot/kernel26beyond-fallback.img -->包括了全部的模块
记得修改你的bootloader来加载你想用的image.

注意:
lvm2,raid和encrypt默认没有被启用,请仔细阅读wiki有关的内容来配置你的系统。
拥有不止一个的硬盘控制器的用户:
如果你拥有不止一个的SCSI/SATA或者IDE硬盘控制器,且又需要不同的内核模块来加载它们,那么请在/etc/mkinitcpio.conf和 fallback配置文件中的 MODULES=" "中指定,否则可能会发生你的根设备不停的转换、遇到随机的kernel panic的情况。

一个更好的方法是使用Persistent block device naming来保证设备被正确的挂载。

已知的,在启动的时候不会被加载的模块:
如果你需要使用下面列表的模块来挂载你的root device,请考虑在/etc/mkinitcpio.conf中的MODULES=" "加载(相对于fallback.img,请修改对应的配置文件),否则在启动过程会出现kernel panics.
- SCSI CONTROLLERS (status stock kernel 2.6.18)
scsi_transport_sas ultrastor qlogicfas eata BusLogic pas16 wd7000 sym53c416
g_NCR5380_mmio fdomain u14-34f dtc initio in2000 imm t128 aha1542 aha152x
atp870u g_NCR5380 NCR53c406a qlogicfas408 megaraid_mm advansys

自定义mkinitcpio配置文件
制作自定义的image
要打造适合自己系统的img文件,请修改默认的/etc/mkinitcpio.conf文件

制作fallback image
如果你使用kernel26,修改 /boot/mkinitcpio-kernel26.conf
如果你使用kernel26beyond, 修改 /boot/mkinitcpio-kernel26beyond.conf
然后请在/etc/pacman.conf中加入NoUpgrade=* (*为你修改过的文件),这样下次mkinitcpio更新的时候就不会使用新的配置文件来覆盖原来修改过的文件了。

配置HOOKS
下面就是mkinitcpio配置中最重要的部分了。/etc/mkinitcpio.conf中的HOOKS条目包含的hooks指导 mkinitcpio应该把那些模块做成img,并在系统启动的时候执行这些模块(举例: initrd /boot/*.img),格式如下:
HOOKS="foo1 foo2 foo3 bar1 bar2"

可用的hooks:

base: 建立初始的、所有必需的目录,安装基本的klibc工具和库文件。你需要这个hook,除非你知道自己在干什么。

udev: 为你的img文件添加udev。
启动时:Udev用来建立你的root device的节点(例如/dev/*da),为root device检测需要的模块。由于这个hook简化了很多事情,所以推荐使用。

modload:
启动时:自动检测的另一个替代方法,但是比udev慢很多,不推荐使用,还是用udev吧。

autodetect: 自动检测你的系统所需要的模块,从而缩小initramfs的体积。记得检验被包含的模块的正确和完整。为了充分发挥autodetcet的优势,这个 hook必须先于其他hooks子系统启动。任何先于“autodetec”启动的hook会被最大化安装。

ide: 为img添加IDE模块。如果你的root device基于一个IDE硬盘,请使用。同样,如你想最小化img的size,同时使用autodetect.
启动时:加载IDE模块,要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

pata: 为img添加IDE模块.如果你的root device基于一个IDE硬盘,请使用。同样,如你想最小化img的size,同时使用autodetect.
启动时:加载IDE模块。要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。PATA是内核里新的IDE驱动,它会将/dev/hd*改成/dev/sd*. 要了解更多请查看:
http://archlinux.org/news/272/

sata:将serial ATA模块添加到image中。如果你的根分区装在sata硬盘上,请使用。同样,配合autodetect来缩小体积。
启动时:加载SATA模块,要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

scsi: 将SCSI模块添加到img。如果你的root device基于SCSI硬盘,请使用。
启动时:加载SCSI模块,要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

usb:将USB模块添加到img。如果你的根分区在usb设备上(优盘上的Linux),请使用。
启动时:加载USB模块,要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

usbinput: 将USB HID modules添加到image。如果你在系统早期启动的时候(安全模式)需要用到usb键盘,请使用。
启动时:加载USB HID模块,要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

fw:将FIREWIRE模块添加到img。如果你的根分区在FW设备上,请使用。
启动时:启动时:加载FW模块,要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

net:为网络设备添加必要的模块。如要使用pcmcia设备,也请添加 pcmcia hook。
启动时:加载network模块。要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

pcmcia:为pcmcia设备添加必需的模块,要安装pcmciautils。
启动时:加载pcmcia模块。要使用这个hook,你将会需要udev或者modload hook,除非你已经手动指定需要的模块。

dsdt:在启动的时候加载一个自定义的acpi dsdt文件。将你的dsdt文件改名为custom.dsdt,放到/lib/initcpio目录。
启动时:如果initramfs文件中有dsdt配置文件,它会自动被内核使用。

filesystems: 将必需的文件系统模块添加到image中。要想系统能够启动,这个hook是必须的(除非你把使用的文件系统编进了内核)。
启动时:启用这个hook,系统会在启动的时候检测文件系统的类型,加载文件系统模块并将它转移到kinit.注意:它不会检测reiser4, reiser4必须添加到modules条目。

lvm2:将设备的mapper 内核模块和lvm 工具添加到image。要使用该hook,你必须安装lvm2 package。
启动时:激活所有的lvm2 volume groups。对于位于lvm的文件系统是必须的。

raid: 为software raid安装添加模块和mdassamble。需要安装mdadm。
启动时:为software raid设备加载必需的模块,在启动时装配raid设备。

encrypt: 添加dm-crypt内核模块和crypsetup工具到image。要安装cryptsetup软件包。
启动时:检测并为加密的根分区解锁。

resume:
启动时:从休眠状态唤醒。适用于swsusp和suspend2。

firmware: 添加/lib/firmware的文件
启动时:加载firmware。要使用这个hook,你将会需要udev的配合。

keymap: 从rc.conf文件中添加keymap和consolefonts。
启动时:在早期启动中加载在rc.conf中指定的keymap和consolefont。

实例:

下面这个标准设置可以满足大部分用户:
HOOKS="base udev autodetect ide scsi sata filesystems"

如果想在多台机上使用image,使用下面的配置:
HOOKS="base udev ide scsi sata filesystems"

要在lvm2 volume groups之上使用encrypted volumes:
HOOKS="base udev autodetect ide scsi sata lvm2 encrypt filesystems"

设置 MODULES
你可以通过设置配置文件里面的MODULES条目,在任何的东西加载前使用一个模块。例如,如果你不想使用udev或者modload hooks,可以加载所有必须的模块使启动速度更快:
MODULES="piix ide_disk reiserfs"
HOOKS="base autodetect ide filesystems"
注意:如果你使用reiser4,那就必须将它加载到MODULES条目。

设置 BINARIES and FILES
这几个选项的作用是允许你将文件添加进image里。唯一不同的地方是, BINARIES会检查binaries和libraries的依赖,而FILES则是简单的添加文件。
例子:
FILES="/etc/modprobe.conf"
BINARIES="/usr/bin/somefile"

创建image
重建预先确定/目前使用的image
如果你想为archlinux的原始的kernel26内核重建initramfs image, 那么请用下面的命令:
# mkinitcpio -p kernel26
上面是kernel26的例子,对于其它内核packages,例如beyond,都是适用的。

如果你想改变

手动制作:
用以下命令生成image:
mkinitcpio -g /boot/kernel26.img
该命令会在/boot目录下生成一个目前运行的内核(kernel26)的image。kernel26beyond的用户要用以下命令:mkinitcpio -g /boot/kernel26beyond.img

当然,你自己喜欢下载内核源码亲自编译,像我这样:),那么你需要:
mkinitcpio -g /boot/*.img -k (/lib/modules/*)
注:第一个*是img文件的前部分名称,任意取;-k 参数后面的,用ls /lib/modules看一下,输入由于你自己编译而产生的目录名称。例如我编译2.6.20,安装模块后,在/lib/modules生成 2.6.20的文件夹,那么制作image的时候要用:mkinitcpio -g /boot/*.img -k 2.6.20

为目前不使用内核创建image,一定要用-k参数!
要为目前运行的内核创建fallback image,例如kernel26, kernel26beyond,你要:
mkinitcpio -c /boot/mkinitcpio-kernel26.conf -g /boot/kernel26.img
For beyond:
mkinitcpio -c /boot/mkinitcpio-kernel26beyond.conf -g /boot/kernel26beyond.img
一般来书,安装kernel26或者kernel26beyond的时候,系统会自动创建fallback.img的。而且我的系统上好像没有/boot/mkinitramfs-kernel26.conf这文件(我没有删除kernel26)

生成了image后,使用之前记得修改bootloader的配置文件。


自定义内核启动参数
就好像不用initramfs的话,有的选项需要通过内核命令行(kernel command line)来告诉内核如何启动,例如我们都要在kernel /boot/vmliuz 这一行指定root=/dev/*d* ro 。而且有的mkinitcpio hooks 有特殊的选项,要通过内核命令行来实现。这些东西我们将在下面进行讨论:
如果你不知道什么是内核命令行,那么请参考grub或者lilo的说明文档。

进入failsafe mode
如果你在内核命令行加入了这个选项: break=y
init会在启动完成后停止,并进入命令行模式,这个功能能让我们检查init的启动情况。输入exit后,系统会继续启动。

禁止hooks
你可以在启动的时候禁止一个或多个hook, 只要在内核命令行输入disablehooks=hook1,hook2,hook3
例如:
disablehooks=resume

把modules加入黑名单
方法如上: disablemodules=mod1,mod2,mod3
例如:
disablemodules=ata_piix

使用raid(译者对raid不熟悉,略过)
使用net (都是比较高级的网络参数,对于我等桌面用户没什么用,略过)
使用lvm (没用过,略过)
使用encrypted root (没用过,略过)
使用休眠 (Linux下的休眠不怎么敢试,略过)

Bootloader的配置实例 (我想玩ArchLinux的人都应该都会该这个吧,略过)

Troubleshooting
(Intel)piix ide 控制器和 beyond 内核
问题:
如果你碰到在系统切换到kinit, mkinitcpio检测你的硬盘时,提示“Can't find device dev(0,0)”的错误信息,这可能是ata_piix和piix驱动相冲突的结果。 Beyond内核打了一些libata的补丁,会导致 ata_piix和 piix冲突。

解决方法:
修改 /etc/mkinitcpio.conf,只启用ide、sata或者scsi三个中的一个,这取决于你的系统事实上需要什么来启动。

分享到:
评论

相关推荐

    mkinitcpio-systemd-tool:initramfs中systemd的置备工具(systemd-tool)

    initramfs中systemd的供应工具(systemd-tool):mkinitcpio挂钩名称: systemd-tool 挂钩提供的核心功能: 统一的systemd + mkinitcpio配置自动配置二进制和配置资源按需调用mkinitcpio脚本和内联函数随附的服务...

    安装Archlinux时相关配置文件说明

    此文件配置了mkinitcpio工具的行为,该工具用于生成初始ramdisk(initramfs),这是系统启动时所用的临时文件系统。 - 主要配置项包括HOOKS(钩子)、FILES(额外添加到initramfs的文件)等。 - HOOKS定义了加载模块...

    mkinitcpio-dropbear:Archlinux mkinitcpio挂钩可在早期用户空间中启用dropbear守护程序

    它根据配置文件`/etc/mkinitcpio.conf`来决定哪些模块和服务需要在引导过程中加载。mkinitcpio支持多种挂载点,如加密文件系统、网络挂载等,并可以通过自定义挂钩来扩展其功能。 2. **dropbear**: Dropbear是一个...

    mkinitcpio-archlogo:将彩色的Arch Linux ASCII艺术徽标添加到早期启动过程

    安装完成后,你需要编辑`/etc/mkinitcpio.conf`配置文件,找到`HOOKS`行,并将`archlogo`添加到hooks列表中,比如:`HOOKS="base udev block filesystems fsck archlogo"`。这里,`archlogo`会被添加到系统启动流程...

    使用Yubikey(Yubico密钥)进行全盘加密.zip

    6. **配置GRUB**:更新GRUB引导加载器的配置,确保在启动时检测到Yubikey的存在。这通常涉及到在GRUB环境中添加`modprobe yubikey`命令。 7. **重启测试**:现在,你应该能够在插入Yubikey的情况下正常启动系统。...

    arch-bootstrapper:在Sergey的位置为VM和物理机自动配置Arch Linux

    8. **配置文件**: 修改系统配置文件,如`/etc/locale.conf`、`/etc/mkinitcpio.conf`等。 9. **启动加载器**: 安装并配置GRUB或其他引导加载器。 10. **后处理**: 执行额外的安装任务,如安装图形界面、桌面环境、...

    archlinux安装过程

    利用mkinitcpio命令创建初始ramdisk,这是Linux系统启动过程中加载初始文件系统所必需的。 11. 设置root密码 安装过程中会要求设置root用户的密码,以确保系统安全性。 12. 安装启动加载器 最后一步是安装启动加载...

    babys-first-arch-install-script:大声笑只是练习,不要认真对待这个

    7. **初始化系统**:安装过程中还包括生成初始系统配置文件,如`/etc/locale.conf`、`/etc/mkinitcpio.conf`等。 8. **设置用户和权限**:创建第一个用户,设置密码,调整用户和组权限,确保新用户有足够的权限进行...

    bootsplash-theme-manjaro-space-green

    安装与配置 git clone https://github.com/ANDRoid7890/bootsplash-theme-manjaro-space-green.git cd bootsplash-theme-manjaro-space-green 运行chmod +x bootsplash-packer bootsplash-theme-manjaro-space.sh ...

    archlinux安装步骤整理

    使用`mkinitcpio -P linux`命令生成系统内核。 #### 十、用户管理 1. **设置root密码** 使用`passwd root`命令设置root密码。 2. **创建用户** 使用`useradd -m -s /bin/bash linux`创建用户名为`linux`的新...

    ramroot:在引导过程中将根文件系统加载到ram

    ramroot帮助程序脚本可以轻松启用/禁用和/或生成其他ramroot配置文件。 安装 该软件包可在找到,以便于安装。 在初始安装过程中会创建一个基本配置文件。 要求 Arch Linux ramroot是专门为与Arch Linux一起使用而...

Global site tag (gtag.js) - Google Analytics