DRACUT.CMDLINE(7)
π NAME π
dracut.cmdline β dracut kernel command line options. This is section 7 of the dracut manual, bestie, and it's literally the map for all the kernel command line parameters dracut processes. π«Ά
β¨ DESCRIPTION β¨
Okay so first: the root device used by the kernel is specified in the boot configuration file on the kernel command line, as always. That part is not new.
The traditional root=/dev/sda1 style device specification is allowed, but not encouraged. The root device should better be identified by LABEL or UUID. If a label is used, as in root=LABEL=<label_of_root>, the initramfs will search all available devices for a filesystem with the appropriate label, and mount that device as the root filesystem. root=UUID=<uuidnumber> will mount the partition with that UUID as the root filesystem.
In the following, all kernel command line parameters which are processed by dracut are described.
Quick vibe check: "rd.*" parameters mentioned without = are boolean parameters. They can be turned on/off by setting them to {0|1}. If the assignment with = is missing, =1 is implied. For example, rd.info can be turned off with rd.info=0 or turned on with rd.info=1 or rd.info. The last value in the kernel command line is the value which is honored. π
π Standard π
init=<path to real init>β specify the path to the init program to be started after the initramfs has finished. β¨root=<path to blockdevice>β specify the block device to use as the root filesystem.
Example, bestie:
root=/dev/sda1
root=/dev/disk/by-path/pci-0000:00:1f.1-scsi-0:0:1:0-part1
root=/dev/disk/by-label/Root
root=LABEL=Root
root=/dev/disk/by-uuid/3f5ad593-4546-4a94-a374-bcfb68aa11f7
root=UUID=3f5ad593-4546-4a94-a374-bcfb68aa11f7
root=PARTUUID=3f5ad593-4546-4a94-a374-bcfb68aa11f7
rootfstype=<filesystem type>β this one is"auto"if not specified.
Example:
rootfstype=ext4
rootflags=<mount options>β specify additional mount options for the root filesystem. If not set,/etc/fstabof the real root will be parsed for special mount options and mounted accordingly.roβ force mounting/and/usr(if it is a separate device) read-only. If none ofroandrwis present, both are mounted according to/etc/fstab.rwβ force mounting/and/usr(if it is a separate device) read-write. See also therooption.rootfallback=<path to blockdevice>β specify the block device to use as the root filesystem, if the normal root cannot be found. This can only be a simple block device with a simple file system, for which the filesystem driver is either compiled in, or added manually to the initramfs. This parameter can be specified multiple times.rd.auto,rd.auto=1β enable autoassembly of special devices likecryptoLUKS,dmraid,mdraidorlvm. Default is off as of dracut version>= 024.rd.hostonly=0β removes all compiled in configuration of the host system the initramfs image was built on. This helps booting, if any disk layout changed, especially in combination withrd.autoor other parameters specifying the layout.rd.cmdline=askβ prompts the user for additional kernel command line parameters.rd.fstab=0β do not honor special mount options for the root filesystem found in/etc/fstabof the real root.resume=<path to resume partition>β resume from a swap partition.
Example:
resume=/dev/disk/by-path/pci-0000:00:1f.1-scsi-0:0:1:0-part1
resume=/dev/disk/by-uuid/3f5ad593-4546-4a94-a374-bcfb68aa11f7
resume=UUID=3f5ad593-4546-4a94-a374-bcfb68aa11f7
rd.skipfsckβ skip fsck for rootfs and/usr. If you're mounting/usrread-only and the init system performs fsck before remount, you might want to use this option to avoid duplication. π«Ά
π iso-scan/filename π
Mount all mountable devices and search for ISO pointed by the argument. When the ISO is found, set it up as a loop device. Device containing this ISO image will stay mounted at /run/initramfs/isoscandev. Using iso-scan/filename with a Fedora/Red Hat/CentOS Live iso should just work by copying the original kernel cmdline parameters. Requires the dracut dmsquash-live module.
Example:
menuentry 'Live' --class gnu-linux --class gnu --class os {
set isolabel=Live-x86_64
set isofile="/boot/iso/Live-x86_64.iso"
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 boot=isolinux iso-scan/filename=$isofile root=live:LABEL=$isolabel ro rd.live.image quiet
initrd (loop)/isolinux/initrd0.img
}
π§ Misc π§
rd.emergency=[reboot|poweroff|halt]β specify what action to execute in case of a critical failure.
rd.shell=0 must also be specified. No cap, that part matters. β οΈ
rd.driver.blacklist=<drivername>[,<drivername>,...]β do not load kernel module<drivername>. This parameter can be specified multiple times.rd.driver.pre=<drivername>[,<drivername>,...]β force loading kernel module<drivername>. This parameter can be specified multiple times.rd.driver.post=<drivername>[,<drivername>,...]β force loading kernel module<drivername>after all automatic loading modules have been loaded. This parameter can be specified multiple times.rd.driver.exportβ making all drivers from initramfs available to rootfs afterswitch_root. This parameter can be set toforcefor exporting over existing modules. Requires the dracutkernel-modules-exportmodule.rd.retry=<seconds>β specify how long dracut should retry theinitqueueto configure devices. The default is180seconds. After2/3of the time, degraded raids are force started. If you have hardware, which takes a very long time to announce its drives, you might want to extend this value. Requires the dracutinitqueuemodule.rd.timeout=<seconds>β specify how long dracut should wait for devices to appear. The default is0, which means forever. Note that this timeout should be longer thanrd.retryto allow for proper configuration.rd.noverifysslβ accept self-signed certificates for ssl downloads. Requires the dracuturl-libmodule.rd.ctty=<terminal device>β specify the controlling terminal for the console. This is useful, if you have multipleconsole=arguments.rd.shutdown.timeout.umount=<seconds>β specify how long dracut should wait for an individual umount to finish during shutdown. This avoids the system from blocking when unmounting a file system cannot complete and waits indefinitely. Value0means to wait forever. The default is90seconds. Requires the dracutshutdownmodule. π°οΈ
π Debug π
If you are dropped to an emergency shell, the file /run/initramfs/rdsosreport.txt is created, which can be saved to a (to be mounted by hand) partition (usually /boot) or a USB stick. Additional debugging info can be produced by adding rd.debug to the kernel command line. /run/initramfs/rdsosreport.txt contains all logs and the output of some tools. It should be attached to any report about dracut problems.
rd.infoβ print informational output even though"quiet"is set.rd.shellβ allow dropping to a shell, if root mounting fails.rd.debugβ set-xfor the dracut shell. If systemd is active in the initramfs, all output is logged to the systemd journal, which you can inspect withjournalctl -ab. If systemd is not active, the logs are written to dmesg and/run/initramfs/init.log. If"quiet"is set, it also logs to the console.rd.memdebug=[0-5]β print memory usage info at various points, set the verbose level from0to5.
Higher level means more debugging output:
0 - no output
1 - partial /proc/meminfo
2 - /proc/meminfo
3 - /proc/meminfo + /proc/slabinfo
4 - /proc/meminfo + /proc/slabinfo + memstrack summary
NOTE: memstrack is a memory tracing tool that tracks the total memory
consumption, and peak memory consumption of each kernel modules
and userspace progress during the whole initramfs runtime, report
is generated and the end of initramfs run.
5 - /proc/meminfo + /proc/slabinfo + memstrack (with top memory stacktrace)
NOTE: memstrack (with top memory stacktrace) will print top memory
allocation stack traces during the whole initramfs runtime.
rd.breakβ drop to a shell at the end.rd.break={cmdline|pre-udev|pre-trigger|initqueue|pre-mount|mount|pre-pivot|cleanup}β drop to a shell before the defined breakpoint starts. This parameter can be specified multiple times.rd.udev.log_level={err|info|debug}β set udev log level. The default iserr.
π I18N π
Requires the dracut i18n module.
rd.vconsole.keymap=<keymap base file name>β keyboard translation table loaded byloadkeys; taken fromkeymapsdirectory; will be written asKEYMAPto/etc/vconsole.confin the initramfs.
Example:
rd.vconsole.keymap=de-latin1-nodeadkeys
rd.vconsole.keymap.ext=<list of keymap base file names>β list of extra keymaps to be loaded (sep. by space); will be written asEXT_KEYMAPto/etc/vconsole.confin the initramfs.rd.vconsole.unicodeβ boolean, indicating UTF-8 mode; will be written asUNICODEto/etc/vconsole.confin the initramfs.rd.vconsole.font=<font base file name>β console font; taken fromconsolefontsdirectory; will be written asFONTto/etc/vconsole.confin the initramfs.
Example:
rd.vconsole.font=eurlatgr
rd.vconsole.font.map=<console map base file name>β see description of-mparameter insetfontmanual; taken fromconsoletransdirectory; will be written asFONT_MAPto/etc/vconsole.confin the initramfs.rd.vconsole.font.unimap=<unicode table base file name>β see description of-uparameter insetfontmanual; taken fromunimapsdirectory; will be written asFONT_UNIMAPto/etc/vconsole.confin the initramfs.rd.locale.LANG=<locale>β taken from the environment; if noUNICODEis defined we set its value in basis ofLANGvalue (whether it ends with".utf8"(or similar) or not); will be written asLANGto/etc/locale.confin the initramfs.
Example:
rd.locale.LANG=pl_PL.utf8
rd.locale.LC_ALL=<locale>β taken from the environment; will be written asLC_ALLto/etc/locale.confin the initramfs.
π½ LVM π½
Requires the dracut lvm module.
rd.lvm=0β disable LVM detection.rd.lvm.vg=<volume group name>β only activate all the logical volumes sitting inside the volume groups with that given name. And yes bestie,rd.lvm.vgcan be specified multiple times on the kernel command line β stack 'em up πrd.lvm.lv=<volume group name>/<logical volume name>β only activate the logical volumes with that given name. Same deal:rd.lvm.lvcan be specified multiple times on the kernel command line β¨rd.lvm.conf=0β removes any/etc/lvm/lvm.confthat might be hanging around in the initramfs. bye felicia π
π crypto LUKS π
Requires the dracut crypt module.
rd.luks=0β disables crypto LUKS detection entirely πrd.luks.uuid=<luks uuid>β only activate the LUKS partitions with the given UUID. Anyluks-at the front of the LUKS UUID gets stripped before comparing to <luks uuid>. The comparison also matches if <luks uuid> is only the beginning of the LUKS UUID β so no cap, you don't have to type the whole thing out. This parameter can be specified multiple times. <luks uuid> may also be prefixed by the keywordkeysource:, seerd.luks.keybelow πrd.luks.allow-discards=<luks uuid>β allow using discards (TRIM) requests for the LUKS partitions with the given UUID. Anyluks-of the LUKS UUID is removed before comparing to <luks uuid>. Matching also works if <luks uuid> is only the beginning of the LUKS UUID, so you don't have to specify the full UUID. This parameter can be specified multiple times πΈrd.luks.allow-discardsβ allow using discards (TRIM) requests on all LUKS partitions. periodt π«Άrd.luks.crypttab=0β don't check whether the LUKS partition is in/etc/crypttabrd.luks.timeout=<seconds>β specify how long dracut should wait when waiting for the user to enter the password. This avoids blocking the boot if no password is entered. It does not apply to luks key. The default is0, which means forever π
ποΈ crypto LUKS - key on removable device support ποΈ
NB: If systemd is included in the dracut initrd, dracut's built-in removable device keying support won't work. systemd will prompt for a password from the console even if you've suppliedrd.luks.key. You may be able to use standard systemdman:fstab[5,external]syntax to get the same effect. If you really do needrd.luks.keyto work, you'll have to exclude thesystemddracut module and any modules that depend on it. Seeman:dracut.conf[5]andhttps://bugzilla.redhat.com/show_bug.cgi?id=905683for more info π
rd.luks.key=<keypath>[:<keydev>[:<luksdev>]]β okay so <keypath> is the pathname of a key file, relative to the root of the filesystem on some device. It's REQUIRED. When <keypath> ends with.gpgit's considered to be key encrypted symmetrically with GPG. You'll be prompted for the GPG password on boot. GPG support requires thecrypt-gpgdracut module, which needs to be added explicitly π
<keydev> identifies the device on which the key file resides. It may be the kernel name of the device (should start with "/dev/"), a UUID (prefixed with "UUID=") or a label (prefix with "LABEL="). You don't have to specify a full UUID β just its beginning will suffice, even if it's ambiguous. All matching devices will be probed. This parameter is recommended, but not required. If it's not present, all block devices will be probed, which may significantly increase boot time π
If <luksdev> is given, the specified key will only be used for the specified LUKS device. Possible values are the same as for <keydev>. Unless you have several LUKS devices, you don't have to specify this parameter. The simplest usage is:
Example
rd.luks.key=/foo/bar.key
As you can see, you can skip colons in such a case β iconic behavior tbh π
Note
Your LUKS partition must match your key file.
dracut provides keys to cryptsetup with -d (an older alias for --key-file). This uses the entire binary content of the key file as part of the secret. If you pipe a password into cryptsetup without -d or --key-file, it will be treated as text user input, and only characters before the first newline will be used π¬ So when you're creating an encrypted partition for dracut to mount, and you pipe a key into cryptsetup luksFormat, you must use -d -.
Here's an example for a key encrypted with GPG (warning: --batch-mode will overwrite the device without asking for confirmation β do not do this casually bestie π):
gpg --quiet --decrypt rootkey.gpg | \
cryptsetup --batch-mode --key-file - \
luksFormat /dev/sda47
If you use unencrypted key files, just use the key file pathname instead of the standard input. For a random key with 256 bits of entropy, you might use:
head -32c /dev/urandom > rootkey.key
cryptsetup --batch-mode --key-file rootkey.key \
luksFormat /dev/sda47
You can also use regular key files on an encrypted keydev π₯
Compared to using GPG encrypted keyfiles on an unencrypted device, this provides the following advantages:
- you can unlock your disk(s) using multiple passphrases
- better security by not losing the key stretching mechanism
To use an encrypted keydev you must ensure that it becomes available by using the keyword keysource, e.g. rd.luks.uuid=keysource:aaaa β aaaa being the uuid of the encrypted keydev β¨
Example:
Let's assume you have three disks A, B and C with the uuids aaaa, bbbb and cccc. You want to unlock A and B using keyfile keyfile. The unlocked volumes be A', B' and C' with the uuids AAAA, BBBB and CCCC. keyfile is saved on C' as /keyfile.
One luks keyslot of each A, B and C is setup with a passphrase. Another luks keyslot of each A and B is setup with keyfile.
To boot this configuration you could use:
rd.luks.uuid=aaaa
rd.luks.uuid=bbbb
rd.luks.uuid=keysource:cccc
rd.luks.key=/keyfile:UUID=CCCC
Dracut asks for the passphrase for C and uses the keyfile to unlock A and B. If getting the passphrase for C fails it falls back to asking for the passphrases for A and B π€
If you want C' to stay unlocked, specify a luks name for it, e.g. rd.luks.name=cccc=mykeys, otherwise it gets closed when not needed anymore π
rd.luks.key.tout=0β specify how many times dracut will try to read the keys specified inrd.luks.key. This gives a chance to the removable device containing the key to initialize π
πΎ MD RAID πΎ
Requires the dracut mdraid module.
rd.md=0β disable MD RAID detectionrd.md.imsm=0β disable MD RAID for imsm/isw raids, use DM RAID insteadrd.md.ddf=0β disable MD RAID for SNIA ddf raids, use DM RAID insteadrd.md.conf=0β ignoremdadm.confincluded in initramfsrd.md.waitclean=1β wait for any resync, recovery, or reshape activity to finish before continuing β³rd.md.uuid=<md raid uuid>β only activate the raid sets with the given UUID. This parameter can be specified multiple times π«Ά
π§ DM RAID π§
Requires the dracut dmraid module.
rd.dm=0β disable DM RAID detectionrd.dm.uuid=<dm raid uuid>β only activate the raid sets with the given UUID. This parameter can be specified multiple times β¨
π MULTIPATH π
Requires the dracut multipath module.
rd.multipath=0β disable multipath detectionrd.multipath=defaultβ use default multipath settings
π‘οΈ FIPS π‘οΈ
Requires the dracut fips module.
rd.fipsβ enable FIPS πboot=<boot device>β specify the device where/bootis located.
Example
boot=/dev/sda1
boot=/dev/disk/by-path/pci-0000:00:1f.1-scsi-0:0:1:0-part1
boot=UUID=<uuid>
boot=LABEL=<label>
rd.fips.skipkernelβ skip checksum check of the kernel image. Useful if the kernel image is not in a separate boot partition π‘
π Network π
Important
It is recommended to either bind an interface to a MAC with the ifname argument, or to use the systemd-udevd predictable network interface names.
Predictable network interface device names based on:
- firmware/bios-provided index numbers for on-board devices
- firmware-provided pci-express hotplug slot index number
- physical/geographical location of the hardware
- the interface's MAC address
See: http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
Two character prefixes based on the type of interface:
enβ ethernetwlβ wlanwwβ wwan
Type of names:
o<index>β on-board device index numbers<slot>[f<function>][d<dev_id>]β hotplug slot index numberx<MAC>β MAC address[P<domain>]p<bus>s<slot>[f<function>][d<dev_id>]β PCI geographical location[P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]β USB port number chain
All multi-function PCI devices will carry the [f<function>] number in the device name, including the function 0 device.
When using PCI geography, the PCI domain is only prepended when it is not 0 β¨
For USB devices the full chain of port numbers of hubs is composed. If the name gets longer than the maximum number of 15 characters, the name is not exported. The usual USB configuration == 1 and interface == 0 values are suppressed.
PCI ethernet card with firmware index "1":
eno1
PCI ethernet card in hotplug slot with firmware index number:
ens1
PCI ethernet multi-function card with 2 ports:
enp2s0f0enp2s0f1
PCI wlan card:
wlp3s0
USB built-in 3G modem:
wwp0s29u1u4i6
USB Android phone:
enp0s29u1u2
The following options are supported by the network-legacy dracut module. Other network modules might support a slightly different set of options β refer to the documentation of the specific network module in use. For NetworkManager, see man:nm-initrd-generator[8] π
ip={dhcp|on|any|dhcp6|auto6|either6|link6|single-dhcp}dhcp|on|anyβ get ip from dhcp server from all interfaces. Ifnetroot=dhcp, loop sequentially through all interfaces (eth0,eth1, ...) and use the first with a valid DHCP root-path π₯
single-dhcpβ ok so this one yeets DHCP at all available interfaces in parallel, not one after another, no waiting your turn bestie π . The literal millisecond the first DHCP response comes back, it stops DHCP on every other interface. The result is the fastest boot time ever because you're just using the IP on whichever interface won the DHCP race during early boot π₯. Caveat tho: this does not apply to Network Manager. nope. not today.auto6β IPv6 autoconfiguration β¨dhcp6β IPv6 DHCP π¦either6β ifauto6fails, thendhcp6. backup-plan energy, we love a safety net π«Άlink6β bring up interface for IPv6 link-local addressingip=<interface>:{dhcp|on|any|dhcp6|auto6|link6}[:[<mtu>][:<macaddr>]]β this parameter can be specified multiple times, so stack 'em up bestie πdhcp|on|any|dhcp6β get ip from dhcp server on a specific interfaceauto6β do IPv6 autoconfigurationlink6β bring up interface for IPv6 link local address<macaddr>β optionally set<macaddr>on the<interface>. This cannot be used in conjunction with theifnameargument for the same<interface>. like, pick a lane girlie π
ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<mtu>][:<macaddr>]]β explicit network configuration, i.e. you're hand-typing the whole thing instead of letting DHCP do its thing βοΈ. If you want do define a IPv6 address, put it in brackets (e.g.[2001:DB8::1]). This parameter can be specified multiple times.<peer>is optional and is the address of the remote endpoint for pointopoint interfaces and it may be followed by a slash and a decimal number, encoding the network prefix length. look at her knowing her prefixes π<macaddr>β optionally set<macaddr>on the<interface>. This cannot be used in conjunction with theifnameargument for the same<interface>. (same rule as above, we're not doing duplicates β)
ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<dns1>][:<dns2>]]β explicit network configuration. If you want do define a IPv6 address, put it in brackets (e.g.[2001:DB8::1]). This parameter can be specified multiple times.<peer>is optional and is the address of the remote endpoint for pointopoint interfaces and it may be followed by a slash and a decimal number, encoding the network prefix length. same deal as the last one, except this flavour lets you hand-pick your DNS servers at the end πifname=<interface>:<MAC>β assign network device name<interface>(i.e."bootnet") to the NIC with MAC<MAC>. it's giving "you are who I say you are" π
β οΈ Warning β Do not use the default kernel naming scheme for the interface name, as it can conflict with the kernel names. So, don't use"eth[0-9]+"for the interface name. Better name it"bootnet"or"bluesocket". seriously bestie, don't fight the kernel, the kernel wins π
rd.route=<net>/<netmask>:<gateway>[:<interface>]β add a static route with route options, which are separated by a colon. IPv6 addresses have to be put in brackets. π§
Example:
rd.route=192.168.200.0/24:192.168.100.222:ens10
rd.route=192.168.200.0/24:192.168.100.222
rd.route=192.168.200.0/24::ens10
rd.route=[2001:DB8:3::/8]:[2001:DB8:2::1]:ens10
bootdev=<interface>β specify network interface to use routing and netroot information from. Required if multipleip=lines are used. iconic, mandatory, non-negotiable πBOOTIF=<MAC>β specify network interface to use routing and netroot information from. (yes, same description asbootdev=, just a different way in π¦)rd.bootif=0β disable BOOTIF parsing, which is provided by PXE.nameserver=<IP> [nameserver=<IP> ...]β specify nameserver(s) to use β¨ (yes you can pass more than one, go off)rd.peerdns=0β disable DNS setting of DHCP parameters.biosdevname=0β boolean, turn off biosdevname network interface renaming. bye bye renaming πΈrd.neednet=1β boolean, bring up network even withoutnetrootset.vlan=<vlanname>:<phydevice>β set up vlan device named<vlanname>on<phydevice>. We support the four styles of vlan names:VLAN_PLUS_VID(vlan0005),VLAN_PLUS_VID_NO_PAD(vlan5),DEV_PLUS_VID(eth0.0005),DEV_PLUS_VID_NO_PAD(eth0.5). four aesthetics, all valid πbond=<bondname>[:<bondslaves>:[:<options>[:<mtu>]]]β set up bonding device<bondname>on top of<bondslaves>.<bondslaves>is a comma-separated list of physical (ethernet) interfaces.<options>is a comma-separated list on bonding options (modinfo bondingfor details) in format compatible with initscripts. If<options>includes multi-valuedarp_ip_targetoption, then its values should be separated by semicolon. if the mtu is specified, it will be set on the bond master. Bond without parameters assumesbond=bond0:eth0,eth1:mode=balance-rr. teamwork makes the dream work fr fr π€team=<teammaster>:<teamslaves>[:<teamrunner>]β set up team device<teammaster>on top of<teamslaves>.<teamslaves>is a comma-separated list of physical (ethernet) interfaces.<teamrunner>is the runner type to be used (seeman:teamd.conf[5,external]); defaults toactivebackup. Team without parameters assumesteam=team0:eth0,eth1:activebackup.bridge=<bridgename>:<ethnames>β set up bridge<bridgename>with<ethnames>.<ethnames>is a comma-separated list of physical (ethernet) interfaces. Bridge without parameters assumesbridge=br0:eth0. bridging the friend group together π
π NFS π
Requires the dracut nfs module.
root=<root-dir>[:<nfs-options>]β mount nfs share from<server-ip>:/<root-dir>, if noserver-ipis given, use dhcpnext_server. Ifserver-ipis an IPv6 address it has to be put in brackets, e.g.[2001:DB8::1]. NFS options can be appended with the prefix":"or","and are separated by",". π§root=nfs:[<server-ip>:]<root-dir>[:<nfs-options>],root=nfs4:[<server-ip>:]<root-dir>[:<nfs-options>],root={dhcp|dhcp6}βnetroot=dhcpalone directs initrd to look at the DHCProot-pathwhere NFS options can be specified. π
Example:
root-path=<server-ip>:<root-dir>[,<nfs-options>]
root-path=nfs:<server-ip>:<root-dir>[,<nfs-options>]
root-path=nfs4:<server-ip>:<root-dir>[,<nfs-options>]
root=/dev/nfs nfsroot=<root-dir>[:<nfs-options>]β Deprecated! kernelDocumentation/filesystems/nfsroot.txtdefines this method. This is supported by dracut, but not recommended. like yeah it still works but don't πrd.nfs.domain=<NFSv4 domain name>β set the NFSv4 domain name. Will override the settings in/etc/idmap.conf.rd.net.dhcp.retry=<cnt>β if this option is set, dracut will try to connect via dhcp<cnt>times before failing. Default is1.rd.net.timeout.dhcp=<arg>β if this option is set,dhclientis called with"--timeout <arg>".rd.net.timeout.iflink=<seconds>β wait<seconds>until link shows up. Default is60seconds. β³rd.net.timeout.ifup=<seconds>β wait<seconds>until link has state"UP". Default is20seconds.rd.net.timeout.route=<seconds>β wait<seconds>until route shows up. Default is20seconds.rd.net.timeout.ipv6dad=<seconds>β wait<seconds>until IPv6 DAD is finished. Default is50seconds.rd.net.timeout.ipv6auto=<seconds>β wait<seconds>until IPv6 automatic addresses are assigned. Default is40seconds.rd.net.timeout.carrier=<seconds>β wait<seconds>until carrier is recognized. Default is10seconds.
πΈ CIFS πΈ
Requires the dracut cifs module.
root=cifs://[<username>[:<password>]@]<server-ip>:<root-dir>β mount cifs share from<server-ip>:/<root-dir>, if noserver-ipis given, use dhcpnext_server. ifserver-ipis an IPv6 address it has to be put in brackets, e.g.[2001:DB8::1]. If a username or password are not specified as part of the root, then they must be passed on the command line throughcifsuser/cifspass.
β οΈ Warning β Passwords specified on the kernel command line are visible for all users via the file/proc/cmdlineand viadmesgor can be sniffed on the network, when using DHCP with DHCP root-path. bestie I am BEGGING you, be careful with this one π
cifsuser=<username>β set the cifs username, if not specified as part of the root.cifspass=<password>β set the cifs password, if not specified as part of the root.
β οΈ Warning β Passwords specified on the kernel command line are visible for all users via the file/proc/cmdlineand viadmesgor can be sniffed on the network, when using DHCP with DHCP root-path. (yes, again. it's that serious π)
π¦ iSCSI π¦
Requires the dracut iscsi module.
root=iscsi:[<username>:<password>[:<reverse>:<password>]@][<servername>]:[<protocol>]:[<port>][:[<iscsi_iface_name>]:[<netdev_name>]]:[<LUN>]:<targetname>βprotocoldefaults to"6",LUNdefaults to"0". If the"servername"field is provided by BOOTP or DHCP, then that field is used in conjunction with other associated fields to contact the boot server in the Boot stage. However, if the"servername"field is not provided, then the"targetname"field is then used in the Discovery Service stage in conjunction with other associated fields. Seerfc4173<http://tools.ietf.org/html/rfc4173#section-5>. π
β οΈ Warning β Passwords specified on the kernel command line are visible for all users via the file/proc/cmdlineand viadmesgor can be sniffed on the network, when using DHCP with DHCP root-path.
Example:
root=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0
If servername is an IPv6 address, it has to be put in brackets:
Example:
root=iscsi:[2001:DB8::1]::::iqn.2009-06.dracut:target0
root=???netroot=iscsi:[<username>:<password>[:<reverse>:<password>]@][<servername>]:[<protocol>]:[<port>][:[<iscsi_iface_name>]:[<netdev_name>]]:[<LUN>]:<targetname>...β multiplenetrootoptions allow setting up multiple iscsi disks, which is honestly kind of a slay π
Example:
root=UUID=12424547
netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0
netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target1
If servername is an IPv6 address, it has to be put in brackets:
Example:
netroot=iscsi:[2001:DB8::1]::::iqn.2009-06.dracut:target0
β οΈ Warning β Passwords specified on the kernel command line are visible for all users via the file/proc/cmdlineand viadmesgor can be sniffed on the network, when using DHCP with DHCP root-path. You may want to userd.iscsi.firmware. π«Ά
root=??? rd.iscsi.initiator=<initiator> rd.iscsi.target.name=<target name> rd.iscsi.target.ip=<target ip> rd.iscsi.target.port=<target port> rd.iscsi.target.group=<target group> rd.iscsi.username=<username> rd.iscsi.password=<password> rd.iscsi.in.username=<in username> rd.iscsi.in.password=<in password>β manually specify alliscsistartparameter (seeiscsistart --help). full control, you're the main character now π
β οΈ Warning
β οΈ real talk before we start: anything you type as a password on the kernel command line is lowkey public. Like, every user on the box can read it in/proc/cmdline, it shows up indmesg, and if you're doing DHCP with a DHCP root-path it can literally be sniffed off the network. not the vibe. You might wanna userd.iscsi.firmwareinstead. π
root=??? netroot=iscsi rd.iscsi.firmware=1β this one pulls the iscsi parameter straight out of the BIOS firmware. firmware girlies stay winning β¨rd.iscsi.login_retry_max=<num>β sets the maximum number of login retries. That's it, that's the whole thing πrd.iscsi.param=<param>β whatever you put in<param>gets handed toiscsistartas--param <param>. You can drop this parameter multiple times if you've got a lot of feelings (params) to share π¦
Example:
"netroot=iscsi rd.iscsi.firmware=1 rd.iscsi.param=node.session.timeo.replacement_timeout=30"
will result in:
iscsistart -b --param node.session.timeo.replacement_timeout=30
rd.iscsi.ibft,rd.iscsi.ibft=1β turns on iBFT autoconfiguration for the interfaces. autoconfig era πrd.iscsi.mp,rd.iscsi.mp=1β configures all iBFT interfaces, not just the one you're booting from (this is the multipath one, iykyk).rd.iscsi.waitnet=0β turns off waiting for all interfaces to come up before it tries to log in to the iSCSI targets. impatient queen behavior βrd.iscsi.testroute=0β turns off the check that asks "hey is the route to the iSCSI target IP even possible?" before trying to log in.rd.iscsi.transport=<transport_name>β sets the iSCSI transport name (peep man:iscsiadm[8,external] for that one). Okay so iSCSI offload transports likebnx2idon't need the network up to bring up iSCSI connections. What this parameter is telling you is that network setup can be skipped in the initramfs, which makes booting with iSCSI offload cards faster and more reliable. speed AND reliability?? we love to see it π₯ Heads up tho: right now this parameter only does anything when<transport_name>=bnx2ior<transport_name>=qedi.
FCoE π
Needs the dracut fcoe module, bestie. Don't forget it.
rd.fcoe=0β disables FCoE and lldpad. goodbye πfcoe=<edd|interface|MAC>:{dcb|nodcb}:{fabric|vn2vn}β tries to connect to a FCoE SAN through the NIC specified by<interface>or<MAC>or EDD settings. The second argument says whether DCB should be used or not. The optional third argument says whetherfabricorVN2VNmode should be used. You can specify this parameter multiple times π
π£ PSA: letters in the MAC-address must be lowercase! NoAA:BB:CC, onlyaa:bb:cc. fr fr.
NVMf π¦
Needs the dracut nvmf module.
rd.nonvmfβ disables NVMf. periodt.rd.nvmf.nonbftβ stops it from connecting to targets from the NVMe Boot Firmware Table. Without this parameter, NBFT connections take precedence overrd.nvmf.discover. whoever's first wins, apparently πrd.nvmf.nostaticβ stops it from connecting to targets that were statically configured when the initramfs was built. Targets you specified withrd.nvmf.discoveron the kernel command line will still be tried, tho π«Άrd.nvmf.hostnqn=<hostNQN>β the NVMe host NQN to use.rd.nvmf.hostid=<hostID>β the NVMe host id to use.rd.nvmf.discover={rdma|fc|tcp},<traddr>,[<host_traddr>],[<trsvcid>]β discovers and connects to a NVMe-over-Fabric controller specified by<traddr>and the optionally<host_traddr>or<trsvcid>. The first argument is the transport to use; currently onlyrdma,fc, ortcpare supported. You can specify this parameter multiple times β¨
Examples:
rd.nvmf.discover=tcp,192.168.10.10,,4420
rd.nvmf.discover=fc,nn-0x201700a05634f5bf:pn-0x201900a05634f5bf,nn-0x200000109b579ef3:pn-0x100000109b579ef3
rd.nvmf.discover=fc,autoβ this special syntax says "actually, use Fibre Channel autodiscovery instead of regular NVMe discovery." And it takes precedence over all otherrd.nvmf.discover=arguments. main character energy, honestly π
NBD π
Needs the dracut nbd module.
root=???andnetroot=nbd:<server>:<port/exportname>[:<fstype>[:<mountopts>[:<nbdopts>]]]β mounts the nbd share from<server>.
π NOTE: if you give "exportname" instead of "port", the standard port is used. And newer versions of nbd are only supported with "exportname". iykyk π
root=/dev/root netroot=dhcpwith dhcp androot-path=nbd:<server>:<port/exportname>[:<fstype>[:<mountopts>[:<nbdopts>]]]βnetroot=dhcpon its own tells initrd to go look at the DHCP root-path, where the NBD options can be specified. This syntax is only usable in cases where you're directly mounting the volume as the rootfs.
π NOTE (again, yes really): if you give "exportname" instead of "port", the standard port is used. Newer versions of nbd are only supported with "exportname".
VIRTIOFS π§
Needs the dracut virtiofs module.
root=virtiofs:<mount-tag>β mounts the virtiofs share using the tag<mount-tag>. The tag name is arbitrary and must match the tag given in the qemu-devicecommand. matching tags = matching outfits, it's giving coordination πrootfstype=virtiofs root=<mount-tag>β also mounts the virtiofs share using the tag<mount-tag>. Same deal: the tag name is arbitrary and must match the tag given in the qemu-devicecommand.
Both formats are supported by the virtiofs dracut module. See https://gitlab.com/virtio-fs/virtiofsd for more information π
Example:
root=virtiofs:host rw
DASD π
Needs the dracut dasd module.
rd.dasd=....β same syntax as the kernel module parameter (s390 only). For the full lore on the syntax, go read the IBM book "Linux on IBM Z and IBM LinuxONE - Device Drivers, Features, and Commands" athttps://www.ibm.com/docs/en/linux-on-systems?topic=overview-device-drivers-features-commands. You can specify this parameter multiple times π
β οΈ NOTE: this parameter is no longer handled by dracut itself β it's handled with the exact same syntax by https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/dracut/95zdev. not me finding out it moved π
ZFCP β
Needs the dracut zfcp module.
rd.zfcp=<zfcp adaptor device bus ID>,<WWPN>,<FCPLUN>βrd.zfcpcan be specified multiple times on the kernel command line.
β οΈ NOTE: this parameter is no longer handled by dracut itself β it's handled with the exact same syntax by https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/dracut/95zdev.
rd.zfcp=<zfcp adaptor device bus ID>β if NPIV is enabled and theallow_lun_scanparameter to the zfcp module is set toY, then the zfcp driver will be initiating a scan internally and the<WWPN>and<FCPLUN>parameters can be omitted. less typing, more slaying β¨
β οΈ NOTE: this parameter is no longer handled by dracut itself β it's handled with the exact same syntax by https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/dracut/95zdev.
Example:
rd.zfcp=0.0.4000,0x5005076300C213e9,0x5022000000000000
rd.zfcp=0.0.4000
rd.zfcp.conf=0β ignoreszfcp.confincluded in the initramfs. bye π
ZNET π¦
Needs the dracut znet module.
rd.znet=<nettype>,<subchannels>,<options>β activates a channel-attached network interface on s390 architecture. So<nettype>is one of:qeth,lcs,ctc.<subchannels>is a comma-separated list of ccw device bus-IDs β the list has 3 entries with nettypeqeth, and 2 for other nettype. And<options>is a comma-separated list of<name>=<value>pairs, where<name>refers to a device sysfs attribute to which<value>gets written.rd.znetcan be specified multiple times on the kernel command line πrd.znet_ifname=<ifname>:<subchannels>β assigns the network device name<interface>(i.e. "bootnet") to the NIC that corresponds to the subchannels. This is useful when dracut's defaultifname=doesn't work because the device has a changing MAC address. the glow-up your ifname needed π
Example:
rd.znet=qeth,0.0.0600,0.0.0601,0.0.0602,layer2=1,portname=foo
rd.znet=ctc,0.0.0600,0.0.0601,protocol=bar
OverlayFS π
Needs the dracut overlayfs module.
rd.overlayβ enables the use of the OverlayFS kernel module, if available, to provide a copy-on-write union directory for the root filesystem. So here's the tea: OverlayFS overlays are directories of the files that have changed on the read-only base (lower) filesystem. The root filesystem is provided through a special overlay type mount that merges at least two directories, designated the lower and the upper. If an OverlayFS upper directory is not present on the boot device, a tmpfs directory will be created at/run/overlayfsto provide temporary storage. surprise storage, cute π
Persistent storage can be provided on vfat or msdos formatted devices by supplying the OverlayFS upper directory within an embedded filesystem that supports the creation of trusted.* extended attributes and provides a valid d_type in readdir responses, such as with btrfs, ext4, f2fs, & xfs. On non-vfat-formatted devices, a persistent OverlayFS overlay can extend the available root filesystem storage up to the capacity of the LiveOS disk device. capacity queen π₯
The rd.overlay.readonly option, which allows a persistent overlayfs to be mounted read-only through a higher level transient overlay directory, has been implemented through the multiple lower layers feature of OverlayFS.
rd.overlay=tmpfs:[size=<size>][,nr_blocks=<n>][,nr_inodes=<n>]β mounts a dedicated tmpfs with the specified options for the OverlayFS upper directory, instead of using the default/runtmpfs. This lets you control the size of the writable overlay at boot time, which is useful for deployments where the available RAM is known in advance (e.g. MAAS ephemeral environments). planning ahead?? we stan β¨
Supported options (comma-separated):
size=<size>β Maximum size of the tmpfs (e.g.4G,512M,25%). Accepts the same values as the tmpfssize=mount option.nr_blocks=<n>β Maximum number of blocks allocated to the tmpfs.nr_inodes=<n>β Maximum number of inodes in the tmpfs.
Examples:
rd.overlay=tmpfs:size=4G
rd.overlay=tmpfs:size=25%
rd.overlay=tmpfs:size=512M,nr_inodes=100000
rd.overlay={LABEL=<label>|UUID=<uuid>|PARTUUID=<uuid>|PARTLABEL=<label>|/dev/<device>}β specifies the storage device for persistent overlay (for both live images and regular OverlayFS). When a block device is specified, it will be mounted and used for persistent overlay storage. For live images withLABEL=specification, if the labeled partition does not exist, it will be automatically created using available free space on the device. it literally builds itself?? iconic π
Supported device specifications:
LABEL=<label>β Use the device with the specified filesystem label.UUID=<uuid>β Use the device with the specified UUID.PARTUUID=<uuid>β Use the device with the specified partition UUID.PARTLABEL=<label>β Use the device with the specified partition label./dev/<device>β Use the specified device path directly.
Examples:
rd.overlay=LABEL=persist
rd.overlay=UUID=12345678-1234-1234-1234-123456789abc
rd.overlay=/dev/sdb1
rd.overlay.crypt=<device>[,<option>]...β requires the dracutoverlayfs-cryptmodule. spicy and encrypted ππ
okay so rd.overlay.crypt= is literally your LUKS bestie π β it marks out an encrypted (LUKS) device for persistent overlay storage. Here's the vibe: if that device already has a valid LUKS volume on it, you get prompted for the passphrase interactively (via Plymouth if that's a thing on your system, otherwise straight up via TTY, no filter π). If it doesn't have one? bestie, that device is getting wiped β formatted with LUKS using a randomly generated passphrase, and a brand new filesystem gets created on top. That random passphrase lives at /run/initramfs/overlayfs.passwd for the duration of the boot, then it's gone, iykyk.
You pass the device as the first argument, then whatever optional comma-separated options you want:
<device>β (Required) the device spec. It's giving one of:LABEL=,UUID=,PARTLABEL=,PARTUUID=, or/dev/<device>.mapname=<name>β the device mapper name. Default isoverlay-cryptβ¨fstype=<type>β filesystem type, pick fromext2,ext3, orext4. Default:ext4πmkfs=<0|1>β what to do about creating a filesystem:0= literally never create one (so you'd better already have a LUKS volume on there, fr),1= create it if needed (this is the default).timeout=<seconds>β how long to wait for the device to show up. By default the globalrd.timeoutvalue is used. Set it to0and you skip waiting entirely, zero patience, respect π
Examples
rd.overlay.crypt=LABEL=CRYPTOVL
rd.overlay.crypt=UUID=12345678-1234-1234-1234-123456789abc,fstype=ext3
π¦ Booting live images π¦
This whole situation needs the dracut dmsquash-live module, no exceptions. Dracut's got multiple options for live booted images, so let's get into it π
πΈ SquashFS (read-only) base filesystem image πΈ
Note β there are actually 3 separate overlay types available:
- Device-mapper snapshots (the original offering, the OG)
- Device-mapper thin provisioning snapshots (see
rd.live.overlay.thin, a later offering) - OverlayFS based overlay mounts (a more recent offering β¨)
Using one of these technologies, the system provides a writable overlay for the base, read-only SquashFS root filesystem. These methods enable a relatively fast boot and lower RAM usage. slay π«Ά
With the original Device-mapper snapshot overlay, bestie you gotta be careful β do not write too many blocks to the snapshot device. Once the blocks of the snapshot overlay are exhausted, the whole root filesystem goes read-only and your applications start failing π. The snapshot overlay device gets marked Overflow, and a difficult recovery is required to repair and enlarge the overlay offline. So like, genuinely a whole ordeal.
When rd.overlay= is not specified for persistent overlay storage β or the specified file isn't found or isn't writable β a Device-mapper snapshot based non-persistent or temporary overlay is automatically created as a sparse file in RAM of the initramfs. This file only consumes content space as required blocks get allocated. That snapshot based overlay defaults to an apparent size of 32 GiB in RAM, and you can adjust it with the rd.live.overlay.size= kernel command line option. This file is hidden (and appears deleted π») when the boot process switches out of the initramfs to the main root filesystem β but its loop device remains connected to the Device-mapper snapshot.
Even with large Device-mapper overlay files for write space, the available root filesystem capacity is limited by the total allocated size of the base root filesystem, which often provides only a small number of gigabytes of free space. rude, honestly.
That shortage could be remedied by building the root filesystem with more allocated free space β or you can use the OverlayFS based overlay mount method instead. your call π
When the rd.overlay option is specified, or when rd.overlay= points to an appropriate directory with a sister at /../ovlwork, then an OverlayFS based overlay mount is employed. Such a persistent OverlayFS overlay can extend the available root filesystem storage up to the capacity of the LiveOS disk device. iconic.
For non-persistent OverlayFS overlays, the /run/overlayfs directory in the /run tmpfs is used for temporary storage. This filesystem is typically sized to one half of the RAM total in the system. The command:
mount -o remount,size=<nbytes> /run
will resize this virtual filesystem after booting. handy π
The internal SquashFS structure is traditionally expected to be:
squashfs.img | SquashFS from LiveCD .iso
!(mount)
/LiveOS
|- rootfs.img | Usually a ext4 filesystem image to mount read-only
!(mount)
/bin | Base Live root filesystem
/boot |
/dev |
... |
For OverlayFS mount overlays, the internal SquashFS structure may be a direct compression of the root filesystem:
squashfs.img | SquashFS from LiveCD .iso
!(mount)
/bin | Base Live root filesystem
/boot |
/dev |
... |
Dracut uses one of the overlay methods of live booting by default β so genuinely no additional command line options are required other than root=live:<path to blockdevice> or root=live:<URL> to specify the location of your squashed root filesystem. easy β¨
- The compressed SquashFS image can be copied during boot to RAM at
/run/initramfs/squashed.imgby using therd.live.ram=1option. - A device with a persistent overlay can be booted read-only by using the
rd.live.overlay.readonlyoption on the kernel command line. This will either cause a temporary, writable overlay to be stacked over a read-only snapshot of the root filesystem, or the OverlayFS mount will use an additional lower layer with the root filesystem.
π Uncompressed live filesystem image π
When the live system was installed with the --skipcompress option of the livecd-iso-to-disk installation script for Live USB devices, the root filesystem image, rootfs.img, is expanded on installation and no SquashFS is involved during boot. no compression, no drama π
- If
rd.live.ram=1is used in this situation, the full, uncompressed root filesystem is copied during boot to/run/initramfs/rootfs.imgin the/runtmpfs. - If
rd.overlay=noneis provided as a kernel command line option, a writable, linear Device-mapper target is created on boot with no overlay.
β Writable filesystem image β
The system will retrieve a compressed filesystem image, extract it to /run/initramfs/fsimg/rootfs.img, connect it to a loop device, create a writable, linear Device-mapper target at /dev/mapper/live-rw, and mount that as a writable volume at /. More RAM is required during boot, but the live filesystem is easier to manage if it becomes full. Users can make a filesystem image of any size and that size will be maintained when the system boots. That said β there is no persistence of root filesystem changes between boots with this option. gone with the wind π
The filesystem structure is expected to be:
rootfs.tgz | Compressed tarball containing filesystem image
!(unpack)
/rootfs.img | Filesystem image at /run/initramfs/fsimg/
!(mount)
/bin | Live filesystem
/boot |
/dev |
... |
To use this boot option, ensure that rd.writable.fsimg=1 is in your kernel command line and add the root=live:<URL> to specify the location of your compressed filesystem image tarball or SquashFS image.
π rd.writable.fsimg=1 π
Enables writable filesystem support. The system will boot with a fully writable (but non-persistent) filesystem without snapshots (see the notes above about available live boot options π). You can use the rootflags option to set mount options for the live filesystem as well (see documentation about rootflags in the Standard section above). This implies that the whole image is copied to RAM before the boot continues. this method is very suitable for diskless boots, ngl π
Note There must be enough free RAM available to hold the complete image. like, the whole thing. don't skip this check π
π«Ά rd.minmem=<megabyte> π«Ά
Specify minimum free RAM in MB after copying a live disk image into memory. The default is 1024.
This parameter only applies together with the parameters rd.writable.fsimg or rd.live.ram. it's picky like that π
πΈ root=live:<url> πΈ
Boots a live image retrieved from <url>. Requires the dracut livenet module. Valid handlers: http, https, ftp, torrent, tftp.
Examples
root=live:http://example.com/liveboot.img
root=live:ftp://ftp.example.com/liveboot.img
root=live:torrent://example.com/liveboot.img.torrent
π¦ root=<http-url> π¦
This is an alias for root=live:<url> β same energy, different name π. Boots a live image retrieved from <http-url>. Requires the dracut livenet module. Valid handlers: http, https.
Examples
root=http://example.com/root.squashfs
root=https://example.com/live.sqfs
π rd.live.debug=1 π
Enables debug output from the live boot process. use it when something's acting sus and you need the receipts π
π rd.live.dir=<path> π
Specifies the directory within the boot device where the squashfs.img or rootfs.img can be found. By default, this is /LiveOS.
π₯ rd.live.squashimg=<filename of SquashFS image> π₯
Specifies the filename for a SquashFS image of the root filesystem. By default, this is squashfs.img.
πΎ rd.live.ram=1 πΎ
Copy the complete image to RAM and use this for booting. This is useful when the image resides on, e.g., a DVD which needs to be ejected later on. (eject that disc, bestie β¨)
π§ rd.overlay={<devspec>[:{<pathspec>|auto}]|none} π§
Manage the usage of a persistent overlay for live images. this is the main character option fr π
<devspec>specifies the path to a device with a mountable filesystem.<pathspec>is a path within the<devspec>filesystem to either- a file (that is loop mounted for a Device-mapper overlay) or
- a directory (that is symbolically linked to
/run/overlayfsfor a OverlayFS mount overlay). (A required sister directory/<pathspec>/../ovlworkis automatically made. no cap π«Ά)
none(the word itself) β means no overlay at all, periodt. Use this when youβve got an uncompressed, writable live root filesystem already available. π
The above method is how you persist changes made to the root filesystem specified within the root=live:<path to blockdevice> or root=live:<url> device.
The default pathspec, when :auto or no :<pathspec> is given, is /<rd.live.dir>/overlay-<label>-<uuid>, where <label> and <uuid> are the LABEL and UUID of the filesystem specified by the root=live:<path|url> device.
If a persistent overlay is detected at the standard LiveOS path, and rd.overlay is not set to 1, the overlay type (either Device-mapper or OverlayFS) will be detected and it will be used. β¨
Examples:
rd.overlay=/dev/sdb1:/persistent-overlay.img
rd.overlay=UUID=99440c1f-8daa-41bf-b965-b7240a8996f4
rd.live.overlay.cowfs=[btrfs|ext4|xfs]β tells it which filesystem to use when formatting the overlay partition. The default isext4. πrd.live.overlay.size=<size_MiB>β sets a non-persistent Device-mapper overlay size in MiB. The default is32768. π¦rd.live.overlay.readonly=1β boots in read-only mode with a normally read-write persistent overlay. With this option:- Device-mapper overlays will have an additional, non-persistent, writable snapshot overlay stacked over a read-only snapshot (
/dev/mapper/liveβro) of the base root filesystem and the persistent overlay, or - for writable
rootfs.imgimages, the above over a read-only loop device, or - an OverlayFS mount will link the persistent overlay directory at
/run/overlayfsβras an additional read-only lower layer stacked over the base root filesystem, and/run/overlayfsbecomes the temporary, writable, upper directory overlay, to complete the bootable root filesystem.
- Device-mapper overlays will have an additional, non-persistent, writable snapshot overlay stacked over a read-only snapshot (
rd.live.overlay.nouserconfirmprompt=β suppresses theUsing temporary overlayblocking prompt that asks for user confirmation before proceeding to boot. This lets the boot process continue to completion without any user interaction. πrd.overlay.reset=1β says a persistent overlay should be reset on boot. All previous root filesystem changes are vacated by this action. πrd.live.overlay.thin=1β enables thin snapshots instead of classic dm snapshots. The advantage of thin snapshots is that they support discards, and will free blocks that are not claimed by the filesystem. In this use case, this means that memory is given back to the kernel when the filesystem does not claim it anymore. π₯
π§ ZIPL π§
Requires the dracut zipl module.
rd.zipl=<path to blockdevice>β updates the dracut commandline with the values found in thedracut-cmdline.conffile on the given device. The values are merged into the existing commandline values and the udev events are regenerated. β¨
Example:
rd.zipl=UUID=0fb28157-99e3-4395-adef-da3f7d44835a
π CIO_IGNORE π
Requires the dracut cio_ignore module.
rd.cio_accept=<device-ids>β removes the devices listed in<device-ids>from the defaultcio_ignorekernel command-line settings.<device-ids>is a list of comma-separated CCW device ids. The default for this value is taken from the/boot/zipl/active_devices.txtfile. π«Ά
Example:
rd.cio_accept=0.0.0180,0.0.0800,0.0.0801,0.0.0802
π Plymouth Boot Splash π
Requires the dracut plymouth module.
plymouth.enable=0β disables the plymouth bootsplash completely. πrd.plymouth=0β disables the plymouth bootsplash only for the initramfs. πΈ
π Kernel keys π
masterkey=<kernel master key path name>β sets the path name of the kernel master key.
Example:
masterkey=/etc/keys/kmk-trusted.blob
masterkeytype=<kernel master key type>β sets the type of the kernel master key.
Example:
masterkeytype=trusted
evmkey=<EVM HMAC key path name>β sets the path name of the EVM HMAC key.
Example:
evmkey=/etc/keys/evm-trusted.blob
evmx509=<EVM X.509 cert path name>β sets the path name of the EVM X.509 certificate.
Example:
evmx509=/etc/keys/x509_evm.der
ecryptfskey=<eCryptfs key path name>β sets the path name of the eCryptfs key.
Example:
ecryptfskey=/etc/keys/ecryptfs-trusted.blob
π Deprecated, renamed Options π
Hereβs the list of options and their new replacement. Lowkey important if youβre holding onto old habits, bestie.
rd_NO_DMβrd.dm=0(since version 008)rd_NO_MDADMCONFβrd.md.conf=0(since version 008)rd_NO_MDIMSMβrd.md.imsm=0(since version 008)rd_NO_MDβrd.md=0(since version 008)rd_MD_UUIDβrd.md.uuid(since version 008)iscsi_initiatorβrd.iscsi.initiator(since version 008)iscsi_target_nameβrd.iscsi.target.name(since version 008)iscsi_target_ipβrd.iscsi.target.ip(since version 008)iscsi_target_portβrd.iscsi.target.port(since version 008)iscsi_target_groupβrd.iscsi.target.group(since version 008)iscsi_usernameβrd.iscsi.username(since version 008)iscsi_passwordβrd.iscsi.password(since version 008)iscsi_in_usernameβrd.iscsi.in.username(since version 008)iscsi_in_passwordβrd.iscsi.in.password(since version 008)iscsi_firmwareβrd.iscsi.firmware=0(since version 008)rdudevdebugβrd.udev.udev_log=debug(since version 102)rdudevinfoβrd.udev.udev_log=info(since version 102)rd.udev.debugβrd.udev.udev_log=debug(since version 102)rd.udev.infoβrd.udev.udev_log=info(since version 102)KEYMAPβvconsole.keymap(since version 008)KEYTABLEβvconsole.keymap(since version 008)SYSFONTβvconsole.font(since version 008)CONTRANSβvconsole.font.map(since version 008)UNIMAPβvconsole.font.unimap(since version 008)UNICODEβvconsole.unicode(since version 008)EXT_KEYMAPβvconsole.keymap.ext(since version 008)rd.live.overlay.overlayfsβrd.overlay(since version 110)rd.live.overlay.readonlyβrd.overlay.readonly(since version 110)rd.live.overlayβrd.overlay(since version 110)rd.live.overlay.resetβrd.overlay.reset(since version 110)
π Configuration in the Initramfs π
/etc/conf.d/β any files found in/etc/conf.d/will be sourced in the initramfs to set initial values. Command line options will override these values set in the configuration files. π/etc/cmdlineβ can contain additional command line options. Deprecated, better use/etc/cmdline.d/*.conf. π/etc/cmdline.d/*.confβ can contain additional command line options. π
π AUTHOR π
Harald Hoyer
π SEE ALSO π
man:dracut[8] man:dracut.conf[5]
This cutie is from the dracut source/version, dated 2026-06-01, and it lives at DRACUT.CMDLINE(7) β bye bestie, go slay your boot config! ππ
π¦ where this page comes from
- alpine 3.24: dracut-doc 111-r1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms