From 789668deb3e6f8584ffab964d2204ddcb75f0a06 Mon Sep 17 00:00:00 2001 From: Frederick Grose Date: Mon, 20 Aug 2018 09:47:50 -0400 Subject: [PATCH] dmsquash-live: Support a flattened squashfs.img A simplified root filesystem structure may be provided for OverlayFS overlays by squashing the root filesystem directly instead of squashing an embedded image file at /LiveOS/rootfs.img. Detect and configure such a squashed root filesystem for live booting. For OverlayFS boots, avoid the read-only Device-mapper linear device at /dev/mapper/live-base. Create a consistent device link at /dev/live-base for the read-only base loop device for all overlayed live root filesystems. Consistently provide a link at /dev/root for wait_for_dev. Update documentation. --- dracut.cmdline.7.asc | 126 +++++++++++++++--------- modules.d/90dmsquash-live/dmsquash-live-root.sh | 51 ++++++---- 2 files changed, 110 insertions(+), 67 deletions(-) diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc index df633e5d..882035af 100644 --- a/dracut.cmdline.7.asc +++ b/dracut.cmdline.7.asc @@ -838,23 +838,24 @@ Booting live images Dracut offers multiple options for live booted images: ===================== -SquashFS with read-only filesystem image::: The system will boot with a read -only filesystem from the SquashFS and apply a writable device-mapper snapshot -over the read only filesystem. Using this method ensures a relatively fast -boot and lower RAM usage. Users **must be careful** to avoid writing too many -blocks to the snapshot volume. Once the blocks of the snapshot overlay are -exhausted, the root filesystem becomes read only and may cause application -failures. The overlay file is marked 'Overflow', and a difficult recovery is -required to repair and enlarge the overlay offline. Non-persistent overlays -are sparse files in RAM that only consume content space as required blocks are -allocated. They default to an apparent size of 32 GiB in RAM. The size can be -adjusted with the **rd.live.overlay.size=** kernel command line option. +SquashFS with read-only filesystem image::: The system will boot with a +read-only filesystem from the SquashFS and apply a writable Device-mapper +snapshot or an OverlayFS overlay mount for the read-only base filesystem. This +method ensures a relatively fast boot and lower RAM usage. Users **must be +careful** to avoid writing too many blocks to a snapshot volume. Once the +blocks of the snapshot overlay are exhausted, the root filesystem becomes +read-only and may cause application failures. The snapshot overlay file is +marked 'Overflow', and a difficult recovery is required to repair and enlarge +the overlay offline. Non-persistent overlays are sparse files in RAM that only +consume content space as required blocks are allocated. They default to an +apparent size of 32 GiB in RAM. The size can be adjusted with the +**rd.live.overlay.size=** kernel command line option. + -The filesystem structure is expected to be: +The filesystem structure is traditionally expected to be: + [listing] -- -squashfs.img | Squashfs from LiveCD .iso downloaded via network +squashfs.img | SquashFS from LiveCD .iso !(mount) /LiveOS |- rootfs.img | Filesystem image to mount read-only @@ -865,21 +866,35 @@ squashfs.img | Squashfs from LiveCD .iso downloaded via network ... | -- + -Dracut uses this method of live booting by default. No additional command line -options are required other than **root=live:** to specify the location -of your squashed filesystem. +For OverlayFS mount overlays, the filesystem structure may also be a direct +compression of the root filesystem: ++ +[listing] +-- +squashfs.img | SquashFS from LiveCD .iso + !(mount) + /bin | Live filesystem + /boot | + /dev | + ... | +-- ++ +Dracut uses one of the overlay methods of live booting by default. No +additional command line options are required other than **root=live:** to +specify the location of your squashed filesystem. + - The compressed SquashFS image can be copied during boot to RAM at `/run/initramfs/squashed.img` by using the **rd.live.ram=1** option. -- A device with a persistent overlay can be booted read only by using the +- A device with a persistent overlay can be booted read-only by using the **rd.live.overlay.readonly** option on the kernel command line. This will -cause a temporary, writable overlay to be stacked over a read-only snapshot -of the root filesystem. +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 +filesystem image, __rootfs.img__, is expanded on installation and no SquashFS is involved during boot. + - If **rd.live.ram=1** is used in this situation, the full, uncompressed @@ -887,12 +902,12 @@ root filesystem is copied during boot to `/run/initramfs/rootfs.img` in the `/run` tmpfs. + - If **rd.live.overlay=none** is provided as a kernel command line option, -a writable, linear device-mapper target is created on boot with no overlay. +a writable, linear Device-mapper target is created on boot with no overlay. -writable filesystem image::: +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 +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. There @@ -902,7 +917,7 @@ The filesystem structure is expected to be: + [listing] -- -rootfs.tgz | Compressed tarball containing fileystem image +rootfs.tgz | Compressed tarball containing filesystem image !(unpack) /rootfs.img | Filesystem image at /run/initramfs/fsimg/ !(mount) @@ -930,11 +945,11 @@ NOTE: There must be enough free RAM available to hold the complete image. This method is very suitable for diskless boots. **root=**live:____:: -Boots a live image retrieved from ____. Requires dracut 'livenet' module. -Valid handlers: __http, https, ftp, torrent, tftp__. +Boots a live image retrieved from ____. Requires the dracut 'livenet' +module. Valid handlers: __http, https, ftp, torrent, tftp__. + [listing] -.Example +.Examples -- root=live:http://example.com/liveboot.img root=live:ftp://ftp.example.com/liveboot.img @@ -946,7 +961,7 @@ Enables debug output from the live boot process. **rd.live.dir=**____:: Specifies the directory within the boot device where the squashfs.img or -rootfs.img can be found. By default, this is __LiveOS__. +rootfs.img can be found. By default, this is `/LiveOS`. **rd.live.squashimg=**____:: Specifies the filename for a SquashFS image of the root filesystem. @@ -954,35 +969,52 @@ 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, i.e., a DVD which needs to be ejected later on. +when the image resides on, e.g., a DVD which needs to be ejected later on. **rd.live.overlay={**____[:__{|auto}__]|__none__}:: -Allow the usage of a permanent overlay. -- __ specifies the path to a device with a mountable filesystem. -- __ is the path to a file within that filesystem, which shall be +Manage the usage of a permanent overlay. ++ +-- +* __ specifies the path to a device with a mountable filesystem. +* __ is the path to a file within that filesystem, which shall be used to persist the changes made to the device specified by the **root=live:____** option. -- _none_ specifies no overlay when an uncompressed live root filesystem is -available. -If a persistent overlay is detected at the standard LiveOS path, the overlay & -overlay type detected (whether Device-mapper or OverlayFS) will be used. ++ +The default _pathspec_, when _auto_ or no _:_ is given, is +`/<+++rd.live.dir+++>/overlay-