From ab8d2910c4234581025b8728f255e647f1d77a3d Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Fri, 7 May 2021 11:58:46 +1200 Subject: [PATCH] Add element block-device-efi-lvm Element block-device-efi-lvm has been added which is like block-device-efi but defines an LVM logical group in the root partition. Three logical volumes are defined in that group, mounted to /, /var, and /home. This volume layout will not meet all requirements, but this is more of an example demonstrating the capability to encourage more usage of this existing feature. This is based on the overcloud-partition-uefi element in tripleo-image-elements, and I believe this capability is too useful to have the only working example buried in a related project repo. This change also fixes the element string matching in _arg_defaults_hack, the 'vm' test was also matching against 'lvm' and 'block-device-efi-lvm' elements. Also the 'block-device-' test now properly tests for this being the prefix of the block-device element. This change also makes block-device-efi fsck-passno compliant with the documentation[1] so that / has value 1 and all other mounts are set to 2. [1] https://www.man7.org/linux/man-pages/man5/fstab.5.html Change-Id: If86a0e49186ce5a65cc0084101d31ce59a97b854 Blueprint: whole-disk-default --- .../elements/block-device-efi-lvm/README.rst | 16 ++++ .../block-device-default.yaml | 73 +++++++++++++++++++ .../block-device-efi-lvm/element-provides | 1 + .../environment.d/15-block-device.bash | 10 +++ .../block-device-default.yaml | 2 +- diskimage_builder/lib/common-functions | 4 +- ...block-device-efi-lvm-c53272600ccd6d18.yaml | 10 +++ 7 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 diskimage_builder/elements/block-device-efi-lvm/README.rst create mode 100644 diskimage_builder/elements/block-device-efi-lvm/block-device-default.yaml create mode 100644 diskimage_builder/elements/block-device-efi-lvm/element-provides create mode 100644 diskimage_builder/elements/block-device-efi-lvm/environment.d/15-block-device.bash create mode 100644 releasenotes/notes/block-device-efi-lvm-c53272600ccd6d18.yaml diff --git a/diskimage_builder/elements/block-device-efi-lvm/README.rst b/diskimage_builder/elements/block-device-efi-lvm/README.rst new file mode 100644 index 000000000..cb6b479ba --- /dev/null +++ b/diskimage_builder/elements/block-device-efi-lvm/README.rst @@ -0,0 +1,16 @@ +==================== +Block Device EFI LVM +==================== + +This provides a block-device configuration for the ``vm`` element to +get a disk suitable for EFI booting which uses LVM to define multiple +volumes mounted to /, /tmp, /var, and /home. + +Please note that the sizes of the partitions may not +be enough for production usage, they will need to be resized properly after +deployment depending on the available disk size. + +Note on x86 this provides the extra `BIOS boot partition +`__ and a EFI boot +partition for maximum compatability. + diff --git a/diskimage_builder/elements/block-device-efi-lvm/block-device-default.yaml b/diskimage_builder/elements/block-device-efi-lvm/block-device-default.yaml new file mode 100644 index 000000000..4a1a6a390 --- /dev/null +++ b/diskimage_builder/elements/block-device-efi-lvm/block-device-default.yaml @@ -0,0 +1,73 @@ +- local_loop: + name: image0 + +- partitioning: + base: image0 + label: gpt + partitions: + - name: ESP + type: 'EF00' + size: 550MiB + mkfs: + type: vfat + mount: + mount_point: /boot/efi + fstab: + options: "defaults" + fsck-passno: 2 + - name: BSP + type: 'EF02' + size: 8MiB + - name: root + flags: [ boot ] + size: 40G +- lvm: + name: lvm + base: [ root ] + pvs: + - name: pv + base: root + options: [ "--force" ] + vgs: + - name: vg + base: [ "pv" ] + options: [ "--force" ] + lvs: + - name: lv_root + base: vg + extents: 23%VG + - name: lv_var + base: vg + extents: 57%VG + - name: lv_home + base: vg + extents: 20%VG +- mkfs: + name: fs_root + base: lv_root + type: xfs + label: "img-rootfs" + mount: + mount_point: / + fstab: + options: "rw,relatime" + fsck-passno: 1 +- mkfs: + name: fs_var + base: lv_var + type: xfs + mount: + mount_point: /var + fstab: + options: "rw,relatime" + fsck-passno: 2 +- mkfs: + name: fs_home + base: lv_home + type: xfs + mount: + mount_point: /home + fstab: + options: "rw,nodev,relatime" + fsck-passno: 2 + diff --git a/diskimage_builder/elements/block-device-efi-lvm/element-provides b/diskimage_builder/elements/block-device-efi-lvm/element-provides new file mode 100644 index 000000000..c0180a2cb --- /dev/null +++ b/diskimage_builder/elements/block-device-efi-lvm/element-provides @@ -0,0 +1 @@ +block-device \ No newline at end of file diff --git a/diskimage_builder/elements/block-device-efi-lvm/environment.d/15-block-device.bash b/diskimage_builder/elements/block-device-efi-lvm/environment.d/15-block-device.bash new file mode 100644 index 000000000..ad8a26745 --- /dev/null +++ b/diskimage_builder/elements/block-device-efi-lvm/environment.d/15-block-device.bash @@ -0,0 +1,10 @@ +# +# Arch gate +# + +if [[ "ppc64 ppc64le ppc64el" =~ "$ARCH" ]]; then + echo "block-device-efi is not supported on Power; use block-device-gpt or block-device-mbr" + exit 1 +fi + +export DIB_BLOCK_DEVICE=efi diff --git a/diskimage_builder/elements/block-device-efi/block-device-default.yaml b/diskimage_builder/elements/block-device-efi/block-device-default.yaml index 79b04fd27..c1d3ece9a 100644 --- a/diskimage_builder/elements/block-device-efi/block-device-default.yaml +++ b/diskimage_builder/elements/block-device-efi/block-device-default.yaml @@ -14,7 +14,7 @@ mount_point: /boot/efi fstab: options: "defaults" - fsck-passno: 1 + fsck-passno: 2 - name: BSP type: 'EF02' size: 8MiB diff --git a/diskimage_builder/lib/common-functions b/diskimage_builder/lib/common-functions index daeb360ac..66f4e7ed4 100644 --- a/diskimage_builder/lib/common-functions +++ b/diskimage_builder/lib/common-functions @@ -285,9 +285,9 @@ function _arg_defaults_hack() { local elements for arg do - if [[ "$arg" =~ "vm" ]]; then + if [[ $arg = vm ]]; then vm_seen=1 - elif [[ "$arg" =~ "block-device-" ]]; then + elif [[ $arg = block-device-* ]]; then blockdev_seen=1 fi elements="$elements $arg" diff --git a/releasenotes/notes/block-device-efi-lvm-c53272600ccd6d18.yaml b/releasenotes/notes/block-device-efi-lvm-c53272600ccd6d18.yaml new file mode 100644 index 000000000..3f500f6e4 --- /dev/null +++ b/releasenotes/notes/block-device-efi-lvm-c53272600ccd6d18.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Element block-device-efi-lvm has been added which is like block-device-efi + but defines an LVM logical group in the root partition. Four logical + volumes are defined in that group, mounted to /, /tmp, /var, and /home. + + This volume layout will not meet all requirements, but this is more of an + example demonstrating the capability to encourage more usage of this + existing feature.