dracut 使用笔记

2023-11-13

dracut 维基     https://dracut.wiki.kernel.org/index.php/Main_Page

dracut  官方手册  https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html#dracutkernel7

dracut 下载地址   https://www.kernel.org/pub/linux/utils/boot/dracut/

dracut是什么

关于这点网上能找到的翻译和介绍也不少,我就说说我的理解吧,dracut是用来制作initramfs的工具。这个initramfs是在系统启动前加载到内存中的一个临时文件系统。作用就是帮助我们正确引导系统,如果没有initramfs这个东东我们的系统是启动不了的。

其实编译内核的时候是会生成对应的initramfs文件的,在编译完内核,执行了make install之后就会在/boot/目录下生成以“initramfs”开头,以“.img”结尾的文件,中级内容一般是对应的版本号。如图:

既然编译内核能够生成initramfs文件,为什么还要用dracut再生成一次呢?

大概原因有二:一是内核太过庞大,重新编太过麻烦。另一个原因就是有时需要加一些定制化的东西,直接改内核要求太高,用dracut就方便许多了。 

支持FakeRaid和软Raid

修改脚本

系统进入initramfs之后默认看不到raid分区的各个磁盘,需要执行命令

mdadm -As --auto=yes --run

后才能看到,我把这个命令加到了/lib/dracut/modules.d/90mdraid/parse-md.sh文件的最后。

如图:

 parse-md.sh这个脚本是有一个触发钩子的,在/lib/dracut/modules.d/90mdraid/module-setup.sh中挂载:

 pre-trigger可以理解为钩子的挂载点,具体有哪些挂载点,有代表什么位置,可以看看官方的帮助文档:dracut.modules(7) - Linux manual page

添加完命令,就可以生成文件了。

生成initramfs文件

不论是FakeRaid还是软Raid都要用到一个mdadm的工具,我编译好的initramfs是不带的,可以通过命令添加:

dracut --add "mdraid" /root/initramfs-raid.img 5.4.155 --force
  • --add 后面是要添加的模块名称。
  • initramfs-raid.img 是要生成的文件名。
  • 5.4.155 是我内核的版本号,dracut会自动去/lib/modules/5.4.155下加载相关模块内容。版本号可以不写,默认是加载当前运行内核的版本。
  • --force 是强制执行,如果已经有目标文件存在,则会覆盖该文件。

执行完成之后可以查看模块加载是否成功:

lsinitrd -m /root/initramfs-raid.img
  • -m 为只显示模块名字,不加的话还会现在一大堆文件信息。
  • initramfs-raid.img就只前面生成的initramfs文件。

支持LVM(逻辑卷)

修改脚本

和Raid类似,lvm一会有看不到分区的问题,需要在/lib/dracut/modules.d/90lvm/下创建脚本“pre-trigger-lvm.sh”,脚本的内容是两行命令

vgchange -a y 
vgmknodes

这两行命令的作用在我的另一篇文章LVM踩坑总结中做了介绍。

在/lib/dracut/modules.d/90lvm/module-setup.sh中使用inst_hook挂载刚才创建的脚本。

inst_hook mount 30 "$moddir/pre-trigger-lvm.sh"
  • mount同上面一样,也是钩子的挂载点。

 生成initramfs文件

dracut --add "multipath lvm" initramfs-lvm.img 5.4.155 --force

用生成的initramfs替换掉/boot/下的文件,在系统启动的开始阶段就能够读到Raid和LVM分区了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dracut 使用笔记 的相关文章

  • 如何使用客户端/服务器 Nailgun(在 Debian Stretch 上)运行简单的 Java 程序?

    我尝试使用Nailgun http www martiansoftware com nailgun on Debian GNU Linux 9 延伸 Nailgun 是一个客户端 协议和服务器 用于从命令行运行 Java 程序 而不会产生
  • 将 gcc libs .data 放在特定部分?

    我正在尝试为我们的嵌入式系统切换到 GNU GCC 编译器 但由于我们芯片的内存布局被分割 我在链接该项目时遇到了问题 RAM section 1 0x10000 0x12FFF RAM section 2 0x18000 0x1BFFF
  • 使用中间服务器创建点对点连接

    我想连接两个客户端 通过 TCP IP 套接字 客户端可以使用中间服务器发现彼此 一旦客户端发现彼此 服务器就不应该有任何参与 我对此做了一些研究 发现很多人建议JXTA 但我想自己从头开始创建协议 因为将来我可能也必须使用 WebSock
  • Linux/ 将目录作为文件打开

    我一直在阅读 Brian Kernighan 和 Dennis Ritchie C 编程语言 第 8 6 章是关于 UNIX 操作系统下的目录列表的 他们说一切 甚至目录都是文件 这意味着我应该能够将目录作为文件打开 我已经尝试使用 std
  • 对于 Makefile 变量的每个目标

    我的 makefile 如下所示 apps app1 app2 app3 all dir app1 app2 app3 zip cleanup 现在我想在列表上做一些循环apps多变的 就像是 loop on apps endloop 是否
  • 让 GNU C 编译器在 iOS 6.x 上运行

    我有一台越狱 evasi0n 第四代 iPad 带有 iOS 6 1 固件 通过 Cydia 我安装了移动终端 版本 520 2 然后 遵循this http iklive org cc compiling on ios 教程中 我已经下载
  • 作为单独用户运行应用程序的最佳初始化脚本

    我有一个在用户帐户 基于 Plack 中运行的应用程序 并且需要一个初始化脚本 它看起来就像 sudo user start server 一样简单 我刚刚使用 start stop daemon 编写了一个 LSB 脚本 它确实很笨拙且冗
  • 比较 timespec 值

    比较两个 timespec 值以查看哪个先发生的最佳方法是什么 下面这句话有什么问题吗 bool BThenA timespec a timespec b Returns true if b happened first b will be
  • 为什么我在使用 WifiP2pManager 时总是显示 BUSY?

    我正在尝试使用 Wi Fi Direct 连接两个 Android 设备 在我的 HTC 手机 One SV 上它似乎可以工作 但在我的第二台设备 LG Optimus 4xhd 上它不起作用 在我的 onResume 函数中 我启动以下线
  • Gnu 时间和格式化输出

    我想使用 gnu time 来测量一些小 c 程序的运行时间 人 中写道 f FORMAT format FORMAT Use FORMAT as the format string that controls the output of
  • 同步通过 LAN 电缆连接的两台 Windows 7 计算机之间的时间

    我有许多笔记本电脑 它们运行我们的应用程序 同时通过以太网电缆成对连接 但未连接到任何外部网络或互联网 时间 我需要连接对来同步其系统时间 但由于每台计算机都需要能够与任何其他计算机同步 因此我无法将一台计算机定义为时间服务器 而另一台计算
  • 无法在 R 中安装插入符号包(在我的 Linux 机器中)

    我在尝试在 R 中安装插入符号包时遇到以下错误 g error tmp Rtmp2Tos7n R INSTALL2e6e30153a74 nloptr nlopt 2 4 2 lib libnlopt cxx a No such file
  • 如何在 Debian 上编译 DOS 程序?

    在我的汇编语言课程中 我们使用 DPMI 编写 DOS 程序 不幸的是 我无法一直使用 32 位 Windows 机器 我在我使用的几乎每台计算机上都安装了 Debian 虚拟机 我已经安装了 DOSBox 和 DOSEMU 有什么办法可以
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • sed 没有给我正确的 Mac 换行符替换操作 - GNU sed 和 BSD / OSX sed 之间的差异 [重复]

    这个问题在这里已经有答案了 我正在使用这个参考 sed 帮助 匹配和替换文字 n 不是换行符 https stackoverflow com questions 19762365 sed help matching and replacin
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • GNU Global 和 GTAGS 找不到类定义

    我在全局查找类 结构定义时遇到问题 我可以使用丰富的 ctags 和 cscope 找到它们 所有标记文件都是从相同的源文件列表构建的 我配置并构建了全局等 仅指定了 prefix configure 确实发现了 exhuberant 并且

随机推荐

  • Shell脚本的变量

    目录 1 Shell脚本变量简介 2 变量的作用 3 变量的类型 4 自定义变量 4 1自定义变量命名要求 4 2定义与查看变量 4 3赋值时使用的引号 4 4从键盘输入内容为变量赋值 4 5 变量的运算 4 5 1整数变量的运算 4 5
  • Systemverilog中的队列操作

    systemverilog中的队列操作十分简单 只需要调用函数即可 Exercise platform Questa Sim 10 1b module queue int q function void sep for int i 0 i
  • 【lucky-canvas插件】在Vue3实现大转盘&九宫格&老虎机抽奖

    目录 前言 一 lucky canvas介绍 二 lucky canvas使用 Vue3 1 安装 2 注册 3 使用 三 九宫格为例的具体使用 1 组件使用 2 常用配置 blocks 背景 prizes 奖品 buttons 抽奖按钮
  • C++文件读取的四种方式

    C 可以根据不同的目的来选取文件的读取方式 目前为止学习了C 中的四种文件读取方式 C 文件读取的一般步骤 1 包含头文件 include
  • 第2章-Java基本语法

    Java基础知识图解 1 关键字与保留字 关键字 Java保留字 现有Java版本尚未使用 但以后版本可能会作为关键字使用 自己命名标识符时要避免使用这些保留字 goto const 2 标识符 Java 对各种变量 方法和类等要素命名时使
  • 计算机原码,反码,补码,以及之间的转换 ,计算机底层为什么要用二进制反码和二进制补码

    1 为什么要使用二进制 首先我们需要知道 计算机底层的存储方式 所有数字在计算机底层都以二进制形式存在 二进制数据的存储方式 所有的数值 不管正负 底层都以补码的方式存储 二进制是机器语言 由于计算机并不能像人一样计算与思考 而使用二进制
  • 微服务特点

    单体架构与微服务的区别 单体架构 用一个归档包 war 解决所有问题的方法论 适合 简单小型 应用 缺点 部署慢 效率低 无法按需扩展 微服务特点 每个微服务可独立运行在自己的进程里 每个微服务都是一个tomcat 一系列独立运行的微服务共
  • 安卓系统模拟位置(刷为系统app)

    现在安卓玩pokemongo 虚拟定位比较常用的欺骗方法是将fake gps软件弄为系统app 用其他普通的方法模拟定位会被检测出来 不过之前不明白是什么原理 所以到github上找了找 找到了xiangtailiang FakeGPS F
  • 【游戏音效】Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity

    集成教程 游戏音效 Unity集成Wwise并进行开发的全流程教程 一 准备工作 游戏音效 Unity集成Wwise并进行开发的全流程教程 二 Wwise项目 前言 这一篇章是Unity接入Wwise的代码 如果看了前面两章的介绍 那么就会
  • pyechart基本绘图(python)

    charts base 基本图表篇 本篇文档为 pyecharts 基本图表详情文档 介绍了关于 pyecharts 各类基本图表的细节 图表详细配置请参考 图表配置篇 基本图表类 Bar 柱状图 条形图 Bar3D 3D 柱状图 Boxp
  • STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

    STM32使用HAL库之Msp回调函数 1 问题提出 在STM32的HAL库使用中 会发现库函数大都被设计成了一对 HAL PPP PPPP Init HAL PPP PPPP MspInit 而且HAL PPP PPPP MspInit函
  • 统计学学习笔记:L1-总体、样本、均值、方差

    目录 一 总体和样本 二 集中趋势分析 2 1 均值 2 1 1 样本均值 2 1 2 总体均值 2 2 众数 中位数 三 离散趋势分析 3 1 总体方差 3 2 样本方差 3 3 标准差 一 总体和样本 比如要计算全国男性的平均身高 但是
  • 国内首个生成式AI标准发布,aiXcoder为核心编写单位

    3月20日 首届生成智能产业峰会在北京成功举办 aiXcoder凭借其在生成式人工智能技术方面的卓越表现 被评选为核心编写单位 深度参与 生成式人工智能技术及产品评估方法 系列标准的研制和发布 万物智生 百业赋能 首届生成智能产业峰会于3月
  • c语言逐行存储到txt,c语言逐行读取txt文件数据

    我写的是linux下的程序 一个文件叫MYFILE里面是一行一行的写内容的 我可以使用fgets函数 1 函数名 fgets 2 声明 char fgets char buf int bufsize FILE stream 3 头文件 st
  • Android JNI2--C++基础

    1 基础结构 C 标准支持 include
  • MATLAB之极坐标绘图

    目标是要绘制一个二维的极坐标彩色图 输入参数有三个 一个是角度 一个是半径 一个是颜色 说到极坐标绘图 第一个想到的就是polar啦 那就先试试吧 1 polar绘图 polar函数用来绘制极坐标图 调用格式为 polar theta rh
  • 数据结构-最小生成树、prim算法、kruskal算法

    目录 最小生成树 Prim算法 普里姆 Kruskal算法 科普斯卡尔 prim算法的实现思想 Kruskal算法的实现思想 最小生成树 如果一个连通图本身就是一棵树 则其最小生成树就是它本身 只有连通图才有生成树 非连通图只有生成森林 P
  • telnet 使用教程(新手篇)及问题集锦

    telnet经常用于测试网络及端口占用情况 具体使用如下 测试端口命令 telnet host 端口 例 telnet 192 168 31 100 8081 连接失败表示端口未占用 否则表示被占用 如下 8080端口已占用 例 telne
  • RACI模型

    1 什么是RACI模型 释义 RACI是一个相对直观的模型 用以明确组织变革过程中的各个角色及其相关责任 我们知道 变革过程是不可能自发或者自动进行的 必须有人对其进行作用 促使进程发生变化 因而 就很有必要对谁做什么 以及促发什么样的变革
  • dracut 使用笔记

    dracut 维基 https dracut wiki kernel org index php Main Page dracut 官方手册 https www kernel org pub linux utils boot dracut