侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux mkinitrd命令详解:创建初始内存盘镜像(附实例教程和注意事项)

Linux mkinitrd命令介绍

mkinitrd是一个用于创建初始内存盘(initrd)镜像的脚本。initrd是一个临时的根文件系统,它在内核启动时被加载到内存中,用于预加载一些必要的块设备模块(如IDE,SCSI或RAID),以便访问真正的根文件系统。mkinitrd可以自动加载文件系统模块(如ext3和jbd),IDE模块,/etc/modprobe.conf中的所有scsi_hostadapter条目,以及如果系统的根分区在RAID上的RAID模块,这使得使用模块化设备驱动程序构建和使用内核变得简单。initrd中加载的模块会根据/etc/modprobe.conf中指定的模块选项进行配置。内核使用的根文件系统仍然在引导配置文件中指定,如root=/dev/hda1或root=LABEL=rootPart等。

Linux mkinitrd命令适用的Linux版本

mkinitrd命令在大多数Linux发行版中都是可用的,但是有些发行版可能已经使用了其他的工具来生成initrd或initramfs(initrd的后继者),如dracut,update-initramfs等。如果你的系统没有mkinitrd命令,你可以尝试安装它,或者使用其他的工具来替代。下面是一些常见的Linux发行版中mkinitrd命令的安装或替代方法:

  • CentOS 7/8:CentOS 7/8使用dracut来生成initramfs,你可以使用dracut命令来创建或更新initramfs,或者使用mkinitrd命令作为dracut的兼容包装器。如果你想安装mkinitrd命令,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum install dracut-compat
  • Ubuntu/Debian:Ubuntu/Debian使用update-initramfs来生成initramfs,你可以使用update-initramfs命令来创建或更新initramfs。如果你想安装mkinitrd命令,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install initramfs-tools
  • Fedora:Fedora使用dracut来生成initramfs,你可以使用dracut命令来创建或更新initramfs,或者使用mkinitrd命令作为dracut的兼容包装器。如果你想安装mkinitrd命令,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install dracut-compat
  • SUSE:SUSE使用mkinitrd-suse来生成initramfs,你可以使用mkinitrd-suse命令来创建或更新initramfs,或者使用mkinitrd命令作为mkinitrd-suse的兼容包装器。如果你想安装mkinitrd命令,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo zypper install mkinitrd

Linux mkinitrd命令的基本语法

mkinitrd命令的基本语法格式如下:

mkinitrd [选项] [-o 输出文件] [-r 根设备] [内核版本]

其中,输出文件是要创建的initrd镜像的文件名,根设备是要访问的真正的根文件系统的设备名,内核版本是要生成initrd的内核版本号。如果不指定输出文件,mkinitrd会在/boot目录下创建一个默认的initrd文件,如initrd-内核版本.img。如果不指定根设备,mkinitrd会使用当前的根设备。如果不指定内核版本,mkinitrd会使用当前运行的内核版本。

Linux mkinitrd命令的常用选项说明

mkinitrd命令的常用选项如下表所示:

选项说明
--version显示mkinitrd的版本信息
-v, --verbose增加输出的详细程度
-f, --force覆盖已存在的initrd文件
--with=模块添加指定的内核模块到initrd中
--preload=模块在任何其他内核模块加载之前预加载指定的内核模块到initrd中,这可以用于确保一些设备的命名,但是建议使用/dev中的符号链接来代替
--nocompress不压缩生成的initrd文件
--image-version在输出文件的路径中追加内核版本号
--fstab=文件使用指定的文件来自动确定根文件系统的类型,通常是/etc/fstab
--builtin=模块假设指定的模块是内核内置的,mkinitrd不会寻找这个模块,也不会报错
--nopivot不使用pivot_root系统调用作为initrd的一部分,这可以让mkinitrd为Linux 2.2内核构建合适的镜像,但是会牺牲一些功能,如ext3文件系统可能无法正常工作,根文件系统的选项也不会被使用,这个选项不推荐使用,而且会在未来的版本中移除
--omit-lvm-modules不加载任何lvm模块,即使/etc/fstab需要它们
--omit-raid-modules不加载任何raid模块,即使/etc/fstab需要它们
--omit-scsi-modules不加载任何scsi模块,即使/etc/fstab需要它们
--with-fips为initrd添加一些检查,如果系统运行在fips模式下,首先会对内核进行完整性检查,然后加载所有的加密算法模块,并运行自检

Linux mkinitrd命令的实例

下面是一些使用mkinitrd命令的实例:

  • 为当前运行的内核创建一个默认的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd
  • 为指定的内核版本创建一个指定的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd -o /boot/myinitrd.img -r /dev/sda1 5.10.0
  • 为当前运行的内核创建一个不压缩的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --nocompress
  • 为当前运行的内核创建一个包含ext4模块的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --with=ext4
  • 为当前运行的内核创建一个预加载usb-storage模块的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --preload=usb-storage
  • 为当前运行的内核创建一个在输出文件路径中追加内核版本号的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --image-version -o /boot/myinitrd
  • 为当前运行的内核创建一个使用指定的fstab文件来确定根文件系统类型的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --fstab=/etc/myfstab
  • 为当前运行的内核创建一个假设ext4模块是内核内置的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --builtin=ext4
  • 为当前运行的内核创建一个不使用pivot_root系统调用的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --nopivot
  • 为当前运行的内核创建一个不加载任何lvm模块的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mk
initrd -o /boot/myinitrd-nolvm.img
  • 为当前运行的内核创建一个不加载任何raid模块的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --omit-raid-modules
  • 为当前运行的内核创建一个不加载任何scsi模块的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --omit-scsi-modules
  • 为当前运行的内核创建一个为fips模式添加检查的initrd文件
[linux@bashcommandnotfound.cn ~]$ sudo mkinitrd --with-fips

Linux mkinitrd命令的注意事项

使用mkinitrd命令时,需要注意以下几点:

  • mkinitrd命令需要root权限,所以要使用sudo或者su来执行。
  • mkinitrd命令会根据/etc/modprobe.conf中的配置来加载模块,所以要确保该文件中的内容是正确的。
  • mkinitrd命令会根据/etc/fstab中的配置来确定根文件系统的类型,所以要确保该文件中的内容是正确的。
  • mkinitrd命令会根据/boot目录下的内核文件来确定内核版本,所以要确保该目录下的文件是正确的。
  • mkinitrd命令会覆盖已存在的同名initrd文件,除非使用-f或--force选项,所以要注意备份原有的initrd文件。
  • 如果系统中没有mkinitrd命令,可能会出现bash: mkinitrd: command not found的错误,这时可以尝试安装mkinitrd命令,或者使用其他的工具来替代。
0

评论区