我想要创建一个启动脚本,它在根文件系统/被挂载之前运行,因为我想使用dm-cache来缓存它。脚本应该包含缓存设置命令。
我需要把这样的脚本放在哪里,它需要什么样的格式?
我无法通过googling找到任何有用的文档。
运行Fedora 17,内核3.9.10。
发布于 2013-08-22 20:54:27
按照dm-cache github上的说明,要创建缓存,您需要加载内核模块dm_mod和dm_cache (假设您已经安装了修补的内核),还需要访问dmsetup可执行文件,并且您可能希望填充/dev,以便访问要在其中创建缓存的设备。
正如cjm已经提到的,要做到这一点,您需要修改initramfs,这是一个文件系统,在硬盘挂载之前加载到内存中。
幸运的是,dmsetup已经安装在initramfs上(应该总是这样,因为它是卷管理所必需的;但是要检查使用"lsinitramfs /initrd.img grep dmsetup")
这就留下了两件必须添加到initramfs中的内容:两个模块和创建缓存的脚本。对于模块,只需编辑/usr/share/initramfs-tools/模块或/etc/initramfs-tools/模块
将您的引导脚本放置在/usr/share/initramfs-tools/local-预挂载或/etc/initramfs-tools/local-pre装入中。将其放入本地预挂载子目录将确保模块已经加载并填充了/dev,但/尚未挂载。脚本可以是一个普通的sh脚本。使用#!/bin/sh shebang,不要忘记使其可执行。我想你知道如何自己写(否则,请提供更多信息)
运行update-initramfs -u应用这些更改,您应该被设置。如果出了问题,请确保仍然有一个旧的内核需要引导。
阅读“man tools”以获得关于如何使用initramfs的一般说明-tools
使用dracut:
dracut使用模块化系统来管理其启动过程。类似于initramfs-tools,它拥有一个名为预挂载的钩子,您可以使用它。要安装脚本,需要定义一个使用此钩子的模块:
mkdir /usr/lib/dracut/modules.d/40dm-cache现在编辑文件/usr/lib/dracut/modules.d/40dm-cache/module-setup.sh
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
check() {
return 0
}
depends() {
return 0
}
install() {
inst_hook pre-mount 91 "$moddir/dm-cache.sh"
}
installkernel() {
instmods dm_mod
instmods dm_cache
}和/usr/lib/dracut/modules.d/40dm-cache/dm-cache.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
modprobe dm_mod
modprobe dm_cache
***here you insert your caching code. As before, dmsetup should be available at /sbin/dmsetup***如果让check()返回255而不是0,则只有在dracut的配置文件中指定的情况下才会加载该模块(通过返回0,它将无条件地加载)
现在要更新initrd:
dracut --forcedracut参考指南:https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html
https://unix.stackexchange.com/questions/87814
复制相似问题