深入理解dracut模式(Centos进入dracut模式)

一、什么是dracut模式

dracut模式是一种用于初始化Linux系统的工具集。它以一个非常小的ramdisk为基础,将Linux内核和相关的模块加载到内存中,并在系统的启动过程中自动挂载必要的文件系统。

这种模式的主要优点是快速启动速度和一个可以自定义的、可扩展的初始化过程,使其成为一种流行的替代传统的initrd方式。

下面是一个简单的initrd和dracut比较:

传统initrd:
        - 可以容纳可启动的内核、文件等
        - 压缩(gzip、cpio)
        - /init脚本负责加载驱动、解压、挂载root文件系统等工作
        - 按顺序加载驱动,速度较慢
        - 无法判断硬件是否不支持
dracut:
        - 快速启动
        - 模块化加载,可以按需加载已经编译好的驱动,不必加载全量的驱动
        - 支持组件式的初始化过程,可切换、替换、调试
        - 能够自动检测硬件支持情况

二、如何使用dracut模式

默认情况下,大多数Linux发行版都使用dracut来初始化系统并挂载必要的文件系统。这一过程通常在系统启动期间自动完成,用户不需要进行任何特殊的配置或操作。

如果需要改变默认的dracut参数,可以通过修改/etc/dracut.conf文件以及在initrd解压之前设置环境变量来实现。

三、自定义dracut模式

1. 自定义moduel文件

dracut默认会加载一些模块文件,包括常见的文件系统、存储设备等。如果需要加载一些以前没有包含的模块文件,可以使用以下方法:

  1. 在/etc/dracut.conf.d目录下创建一个名为module.conf的文件,并在其中添加以下内容:
    add_drivers+="modulename"
  2. 将模块文件放到/lib/modules//extra/目录下,并生成一个名为modulename.modules的文件,其中包含以下内容:
            # Name: modulename
            # Version: 1.0
            # Type: kernel
            # Checksum: 1234567890
            # Description: this is a new module
            # Section: extra
            # ExtraVersion: 1.0
     
            modulename.ko
            

2. 自定义initrd配置文件

除了加载驱动程序之外,dracut还可以提供自定义初始化文件的能力。可以使用此功能创建自己的自定义模板以提供定制的操作或增强安全性。

要自定义initrd配置文件,可以通过以下步骤:

  1. 创建一个新的文件/etc/dracut.conf.d/99-custom.conf,其中包含以下代码:
            # Provide a custom initrd.conf.
            install_items+="etc/initrd.conf"
            
  2. 在/etc目录下创建一个名为initrd.conf的文件,并添加以下内容:
            # Sample custom initrd.conf
     
            ## Compression
            #FORCE_COMPRESSION="gzip"
            #FORCE_COMPRESSION="xz"
            FORCE_COMPRESSION="none"
     
            ## Modules
            #ADD_MODULES="ipmi megaraid_sas"
            #omit_drivers+="ipmi megaraid_sas"
            #add_drivers+="qeth"
     
            ## Files
            #mkdir -m0750 -p /mnt/root
            #mount /dev/hda1 /mnt/root
     
            ## Luks root
            #LUKS="yes"
     
            ## Md root
            #MDADM="yes"
     
            ## Network
            #NETWORK=yes
            #openssl ca -text -out tls-client.crt -infiles tls-client-csr
            NETWORK_MODULES="cnic vmxnet3"
     
            ## Resume from
            #RESUME=/dev/mapper/vg-swaplv
     
            ## Verbose output
            #VERBOSE=yes
            

四、dracut命令行参数

除了通过配置文件进行自定义之外,也可以在启动dracut时使用命令行参数进行覆盖。

常用的dracut命令行参数包括:

  1. –force:如果有需要重新生成initrd时,可以强制生成。
  2. –add-driver:手动添加单个驱动。
  3. –omit-driver:从默认列表中省略单个驱动。
  4. –add-module:手动添加一个模块文件。
  5. –omit-module:从默认列表中省略单个模块文件。

总结

dracut模式是一种快速启动和可定制的Linux系统初始化方式。通过自定义模块文件、初始化文件以及使用命令行参数,可以按需定制系统初始化过程,满足不同的需求。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平