низкоуровневый инструмент для создания образа initramfs / initrd (low-level tool for generating an initramfs/initrd image)
Использование (Usage)
To create a initramfs image, the most simple command is:
# dracut
This will generate a general purpose initramfs image, with all
possible functionality resulting of the combination of the
installed dracut modules and system tools. The image is
/boot/initramfs-<kernel version>.img and contains the kernel
modules of the currently active kernel with version <kernel
version>.
If the initramfs image already exists, dracut will display an
error message, and to overwrite the existing image, you have to
use the --force option.
# dracut --force
If you want to specify another filename for the resulting image
you would issue a command like:
# dracut foobar.img
To generate an image for a specific kernel version, the command
would be:
# dracut foobar.img 2.6.40-1.rc5.f20
A shortcut to generate the image at the default location for a
specific kernel version is:
# dracut --kver 2.6.40-1.rc5.f20
If you want to create lighter, smaller initramfs images, you may
want to specify the --hostonly or -H option. Using this option,
the resulting image will contain only those dracut modules,
kernel modules and filesystems, which are needed to boot this
specific machine. This has the drawback, that you can't put the
disk on another controller or machine, and that you can't switch
to another root filesystem, without recreating the initramfs
image. The usage of the --hostonly option is only for experts and
you will have to keep the broken pieces. At least keep a copy of
a general purpose image (and corresponding kernel) as a fallback
to rescue your system.
Inspecting the Contents
To see the contents of the image created by dracut, you can use
the lsinitrd tool.
# lsinitrd | less
To display the contents of a file in the initramfs also use the
lsinitrd tool:
# lsinitrd -f /etc/ld.so.conf
include ld.so.conf.d/*.conf
Adding dracut Modules
Some dracut modules are turned off by default and have to be
activated manually. You can do this by adding the dracut modules
to the configuration file /etc/dracut.conf or
/etc/dracut.conf.d/myconf.conf. See dracut.conf(5). You can also
add dracut modules on the command line by using the -a or --add
option:
# dracut --add module initramfs-module.img
To see a list of available dracut modules, use the --list-modules
option:
# dracut --list-modules
Omitting dracut Modules
Sometimes you don't want a dracut module to be included for
reasons of speed, size or functionality. To do this, either
specify the omit_dracutmodules variable in the dracut.conf or
/etc/dracut.conf.d/myconf.conf configuration file (see
dracut.conf(5)), or use the -o or --omit option on the command
line:
# dracut -o "multipath lvm" no-multipath-lvm.img
Adding Kernel Modules
If you need a special kernel module in the initramfs, which is
not automatically picked up by dracut, you have the use the
--add-drivers option on the command line or the drivers variable
in the /etc/dracut.conf or /etc/dracut.conf.d/myconf.conf
configuration file (see dracut.conf(5)):
# dracut --add-drivers mymod initramfs-with-mymod.img
Boot parameters
An initramfs generated without the "hostonly" mode, does not
contain any system configuration files (except for some special
exceptions), so the configuration has to be done on the kernel
command line. With this flexibility, you can easily boot from a
changed root partition, without the need to recompile the
initramfs image. So, you could completely change your root
partition (move it inside a md raid with encryption and LVM on
top), as long as you specify the correct filesystem LABEL or UUID
on the kernel command line for your root device, dracut will find
it and boot from it.
The kernel command line can also be provided by the dhcp server
with the root-path option. See the section called 'Network Boot'.
For a full reference of all kernel command line parameters, see
dracut.cmdline
(5).
To get a quick start for the suitable kernel command line on your
system, use the --print-cmdline option:
# dracut --print-cmdline
root=UUID=8b8b6f91-95c7-4da2-831b-171e12179081 rootflags=rw,relatime,discard,data=ordered rootfstype=ext4
Specifying the root Device
This is the only option dracut really needs to boot from your
root partition. Because your root partition can live in
various environments, there are a lot of formats for the
root= option. The most basic one is root=<path to device
node>:
root=/dev/sda2
Because device node names can change, dependent on the drive
ordering, you are encouraged to use the filesystem identifier
(UUID) or filesystem label (LABEL) to specify your root
partition:
root=UUID=19e9dda3-5a38-484d-a9b0-fa6b067d0331
or
root=LABEL=myrootpartitionlabel
To see all UUIDs or LABELs on your system, do:
# ls -l /dev/disk/by-uuid
or
# ls -l /dev/disk/by-label
If your root partition is on the network see the section
called 'Network Boot'.
Keyboard Settings
If you have to input passwords for encrypted disk volumes,
you might want to set the keyboard layout and specify a
display font.
A typical german kernel command line would contain:
rd.vconsole.font=eurlatgr rd.vconsole.keymap=de-latin1-nodeadkeys rd.locale.LANG=de_DE.UTF-8
Setting these options can override the setting stored on your
system, if you use a modern init system, like systemd.
Blacklisting Kernel Modules
Sometimes it is required to prevent the automatic kernel
module loading of a specific kernel module. To do this, just
add rd.blacklist=<kernel module name>, with <kernel module
name> not containing the .ko suffix, to the kernel command
line. For example:
rd.driver.blacklist=mptsas rd.driver.blacklist=nouveau
The option can be specified multiple times on the kernel
command line.
Speeding up the Boot Process
If you want to speed up the boot process, you can specify as
much information for dracut on the kernel command as
possible. For example, you can tell dracut, that you root
partition is not on a LVM volume or not on a raid partition,
or that it lives inside a specific crypto LUKS encrypted
volume. By default, dracut searches everywhere. A typical
dracut kernel command line for a plain primary or logical
partition would contain:
rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0
This turns off every automatic assembly of LVM, MD raids, DM
raids and crypto LUKS.
Of course, you could also omit the dracut modules in the
initramfs creation process, but then you would lose the
possibility to turn it on on demand.
Injecting custom Files
To add your own files to the initramfs image, you have several
possibilities.
The --include option let you specify a source path and a target
path. For example
# dracut --include cmdline-preset /etc/cmdline.d/mycmdline.conf initramfs-cmdline-pre.img
will create an initramfs image, where the file cmdline-preset
will be copied inside the initramfs to
/etc/cmdline.d/mycmdline.conf. --include can only be specified
once.
# mkdir -p rd.live.overlay/etc/cmdline.d
# mkdir -p rd.live.overlay/etc/conf.d
# echo "ip=dhcp" >> rd.live.overlay/etc/cmdline.d/mycmdline.conf
# echo export FOO=testtest >> rd.live.overlay/etc/conf.d/testvar.conf
# echo export BAR=testtest >> rd.live.overlay/etc/conf.d/testvar.conf
# tree rd.live.overlay/
rd.live.overlay/
`-- etc
|-- cmdline.d
| `-- mycmdline.conf
`-- conf.d
`-- testvar.conf
# dracut --include rd.live.overlay / initramfs-rd.live.overlay.img
This will put the contents of the rd.live.overlay directory into
the root of the initramfs image.
The --install option let you specify several files, which will
get installed in the initramfs image at the same location, as
they are present on initramfs creation time.
# dracut --install 'strace fsck.ext3 ssh' initramfs-dbg.img
This will create an initramfs with the strace, fsck.ext3 and ssh
executables, together with the libraries needed to start those.
The --install option can be specified multiple times.
Network Boot
If your root partition is on a network drive, you have to have
the network dracut modules installed to create a network aware
initramfs image.
If you specify ip=dhcp on the kernel command line, then dracut
asks a dhcp server about the ip address for the machine. The dhcp
server can also serve an additional root-path, which will set the
root device for dracut. With this mechanism, you have static
configuration on your client machine and a centralized boot
configuration on your TFTP/DHCP server. If you can't pass a
kernel command line, then you can inject
/etc/cmdline.d/mycmdline.conf, with a method described in the
section called 'Injecting custom Files'.
Reducing the Image Size
To reduce the size of the initramfs, you should create it
with by omitting all dracut modules, which you know, you
don't need to boot the machine.
You can also specify the exact dracut and kernel modules to
produce a very tiny initramfs image.
For example for a NFS image, you would do:
# dracut -m "nfs network base" initramfs-nfs-only.img
Then you would boot from this image with your target machine
and reduce the size once more by creating it on the target
machine with the --host-only option:
# dracut -m "nfs network base" --host-only initramfs-nfs-host-only.img
This will reduce the size of the initramfs image
significantly.