分享

dracut

 身子莫 2013-04-28

Dracut

本页面正在建设!
建言或参与施工请至这篇文章的 讨论 页面。
dracut 是下一代的 initramfs 系统。和前一代 initramfs 系统,mkinitrd,的不同点在于,dracut 设计上就考虑到了映像尺寸的问题,尽量避免硬编码,以提高生成的 cpio 映像载入内存的速度; 实现上,由于 initramfs 的唯一作用就是挂载 rootfs(因此不需要把一堆无用的比如 plymouth 等都装进去),它主要依赖 udev 去获取 rootfs 的设备节点,一旦 rootfs 节点出现则立刻切换过去。按照官方维基的说法:5 秒启动不是梦。另外它采用了模块化的方式,使用者可自由在 %{_libdir}/dracut/modules.d 下创建他需要的特殊模块,可扩展性很强。最后它的使用方式和 mkinitrd 非常接近,迁移成本较低。


Fedora 11 的时候就使用了 dracut,而 openSUSE 对 dracut 的评估开始于 2012 年 Hackweek 8 前夕和期间,因此目前只进入了 Factory,尚未确定是否会应用于 openSUSE 12.3。因此有风险。非高级用户请谨慎尝试。

目录

 [隐藏]

[编辑]安装

openSUSE 12.2 可以从 MargueriteSu 讨论 - 贡献 的私人源尝试:dracut at home:MargueriteSu

sudo zypper ar -f http://download./repositories/home:/MargueriteSu/openSUSE_12.2/ home:MargueriteSu
sudo zypper in dracut dracut-tools dracut-caps dracut-network

[编辑]创建新 initramfs

最简单的方法就是使用:

dracut

这将在你的 /boot 目录下创建一个名为 initramfs-<kernel version>.img 的通用 initramfs,这包含了你当前运行内核当前加载的全部内核模块。

要是那个文件已经存在了,dracut 会报错,你可以使用 dracut --force 来强行写入。

你还可以指定生成映像的名称和内核版本,如:

dracut 名称.img 内核版本

当前内核版本可使用 uname -r 查看,后安装的内核版本可在 /usr/src 目录中执行 ls -l 查看 linux 文件夹的链接指向来确定 。主要用于安装了多版本内核的情况,比如内核升级完成未重启前重制 initramfs(因为 openSUSE 整合 dracut 不够深,现在没有这样的自动化命令出现)。

要是想生成最小化的 dracut 的话,可是使用:

dracut --hostonly 

命令。该命令生成的 initramfs 映像只能在本机使用。也就说你,你既不能把硬盘放到别的机器上引导,也不能调整 root 分区。不然就会挂掉。因此请保留一份通用 initramfs 以做恢复之用。最好之前的 initrd 也留着!另外一定要看下面的常见问题,否则就目前版本的 dracut 来说,生成的映像是一定不能用的!

[编辑]检查文件

dracut 生成的也是 cpio 压缩包,可以使用 lsinitrd 工具来查看:

lsinitrd /boot/initramfs-$(uname -r).img | less

查看镜像内文件的内容:

# lsinitrd /boot/initramfs-$(uname -r).img  /etc/ld.so.conf

[编辑]查看可用模块

dracut --list-module

注意这样列出的是所有 dracut 模块。你并不知道哪个将被包含到生成的 initramfs 中去。关于模块的描述请见优化章节。

[编辑]添加模块

dracut -a "模块名"

[编辑]忽略模块

dracut -o "模块名"

这点在后面优化的时候很有用。

[编辑]添加内核驱动

用来指定 kernel-modules 这个 dracut 配置模块将加载的内核驱动。默认 dracut 的 kernel-modules 会加载你在 lsmod 命令中能够见到的所有内核模块。因此如果你的内核像 openSUSE 的这么强大,那么基本上 lsmod 命令就列出了你这个硬件配置所需的模块,不必再添加新的了。有备无患:

dracut -a "内核驱动模块名"

[编辑]插入自定义文件

dracut -i 该文件在你本机上的位置 该文件在映像中的位置 // 一般是相同的

[编辑]只使用指定的模块

dracut -m "模块列表,空格分开"

[编辑]启用 dracut 生成的 initramfs

编辑 /boot/grub2/grub.cfg,替换下面这行:

       echo    'Loading initial ramdisk ...'
       initrd  /initd-3.6.3-1-desktop

[编辑]恢复 initramfs

如果你用 --hostonly 未能引导,而且你有通用 initramfs 映像。你可以在 grub2 中按 e 进入菜单条目,把里面的 initrd= 给替换成通用的。依然不能引导的话你可以换回 initrd。


[编辑]引导选项

以下操作都发生在 /etc/grub2/grub.cfg 中。

[编辑]指定 rootfs

就是 grub2 的语法。

rootfs=/dev/sda6
rootfs=UUID=blabla
rootfs=LABEL=blabla

[编辑]键盘布局设置

[编辑]屏蔽内核模块

比如你在使用 nouveau 开源显卡的时候,创建的通用 initramfs 映像,现在你想在私有的上面用,那就需要屏蔽掉一些内核驱动:

rd.driver.blacklist=nouveau

[编辑]加速引导

rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0

这将直接关闭针对 LUKS 磁盘加密、LVM 逻辑磁盘、MDRAID 多设备磁盘、DeviceMapper 设备映像器的检测(后三者多用于服务器)。

[编辑]调试

[编辑]优化

[编辑]模块列表和它们的用途

注意 本列表移植自 Gentoo 维基,官方并没有这样的说明。因此准确性无法保证。

下面列出了所有模块的功能,读者生成自己的 initramfs 时可以使用 dracut -m "想要的模块列表" 的方式也可以通过 dracut -o "不想要的模块列表" 的方式来去除自己用不到的模块。

[编辑]默认模块

模块描述启用
dash以 /bin/dash 作为 /bin/sh总是
i18n包含键盘布局、终端字体,等等总是
convertfs下次启动时将 / 合并到 /usr从不
kernel-modules包含内核模块总是
fstab-sys在挂载 root 分区前挂载其他分区/etc/fstab.sys 存在时,或使用 --fstab 或 --add-fstab 选项时
resume将系统从休眠中唤醒总是
rootfs-block挂载 rootfs总是
terminfo包含一个 terminfo 文件总是
udev-rules包含 udev 和基本规则总是
securityfs早早挂载 securityfs永不
usrmount启动时挂载 /usr总是
base基础工具总是
fs-lib文件系统工具 (包括 mount)总是
img-lib解压映像的工具从不
shutdown关机总是

[编辑]可选模块

Module ↓Purpose ↓Enabled? ↓USE Flag ↓Additional Packages ↓
biosdevname启用 BIOS 网络设备重命名总是

biosdevname pciutils

btrfs支持 btrfs rootfshost-only: rootfs

btrfsprogs

capssupports dropping capabilities before init总是

sys-libs/libcap

(also replaces dash with bash)
crypt支持加密 rootfshost-only: rootfsdevice-mapperstatic-libs4

cryptsetup

crypt-gpg支持 gpg 加密(需要 crypt 模块)永不

gnupg

dmraid支持 FakeRAID 上的 rootfshost-only: rootfsdevice-mapper

multipath-tools ,dmraid

dmsquash-live支持 LiveCD rootfs永不 (host-only: refused)device-mapper
gensplash包含静态 splash 屏幕永不static-libs4

media-gfx/splashutils

iscsi支持 iscsi 设备上的 rootfshost-only: rootfsnet

open-iscsi

livenet通过 HTTP 获取 rootfs (需要 dmsquash-live 模块)永不device-mappernet
lvm支持 LVM 设备上的 rootfshost-only: rootfsdevice-mapper

lvm2

mdraid支持软件 RAID 上的 rootfshost-only: rootfs

mdadm

multipath支持多路径设备上的 rootfshost-only: rootfs

multipath-tools

nbd支持在网络块设备上的 rootfshost-only: rootfsnet

ndb

nfs支持以 NFS 方式挂载的 rootfsnethost-only: rootfs

nfs-utils


rpcbind

plymouth启动动画总是libkms3

plymouth

ssh-client包含 ssh 和 scp 客户端永不net

openssl

syslog支持远程日志永不

app-admin/syslog-ng


app-admin/rsyslog

debug包含调试工具永不installed when USE=debug
dm包含 device-mapper永不installed when USE=device-mapper

sys-fs/device-mapper

or 

sys-fs/lvm2

ifcfg运行时生成网络配置永不installed when USE=net
network用于网络启动总是installed when USE=net

dhcp iproute2

selinux加载 selinux 策略永不installed when USE=selinux
url-lib包含 cUrl 和 SSL 证书永不installed when USE=net

net-misc/curl

bootchart watchdog busybox network cms qemu qemu-net cifs dasd dasd_mod fcoe virtfs zfcp znet masterkey ecryptfs integrity pollcdrom systemd suse

[编辑]压缩方式

  • --gzip 默认
  • --bzip2
  • --lzma
  • --xz
  • --no-compress

openSUSE 的内核支持以上所有 dracut 有的压缩方式,只要你在系统上能打开相应格式的软件包,那用它启动就没有问题。

[编辑]不同压缩方式对映像大小和启动速度的影响

压缩方式映像大小启动速度
gzip偏大示例
bzip适中示例
lzma最小示例
xz示例

[编辑]其他与优化相关的选项

  • -H, --host-only 解释见上,生成的 initramfs 会小一多半,一般在 5 MB 以下。
  • --nofscks 不安装磁盘修复工具,启动时也不检查磁盘,比如 btrfs 这类的就可以考虑一下
  • --strip 把 debuginfo 从即将包含进 initramfs 的二进制可执行文件中提取出来并丢掉
  • --kernel-only 只包含内核模块。不明白什么意思,但勇敢者可以尝试一下

[编辑]常见问题

[编辑]/bin/setfont/ bin/loadkey failed with error code 1

这是因为你开启了 i18n 模块却没有在 grub2 的内核命令行中设置 vconsole 字体和键盘布局导致的。

由于中文完全没有所谓的 console 字体(console 字体最多不能超过 256 个字符,中文你懂得),所以我们没有必要开启 i18n,在生成 initramfs 时使用 -o "i18n" 选项来屏蔽 i18n 模块。

[编辑]rpcbind: rpcbind terminating on signal. restart with "rpcbind -w"

这是由于你启用了 nfs 模块,在 initramfs 中却没有 rpcbind 命令导致的。解决方法有两种:

  • -o "nfs" 来禁用 nfs 模块。多用于桌面
  • -i /sbin/rpcbind /sbin/rpcbind 来将 rpcbind 放到 initrmfs 中。

[编辑]/bin/sh: error while loading shared libraries : libreadline.so.6. can not open shared object file: no such file or directory. kernel panic.

多见于使用了 --hostonly 选项时。这是因为生成的 initramfs 中没有 /lib64/libreadline.so.6.2,所以造成了 kernel panic。因此:

使用 -i /lib64/libreadline.so.6.2 /lib64/libreadline.so.6.2 将它放到 initramfs 中。

[编辑]参考文献

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多