diff options
author | Liam Hopkins <liamh@google.com> | 2020-03-25 10:17:50 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-25 10:17:50 -0700 |
commit | dad8239611d85fc697ff0905d60f00cc66ad747d (patch) | |
tree | 4db9108aa9e7e32008176add3455b6a6ab987e4b /packages/gce-disk-expand/src/usr | |
parent | eff97a73ff7e8a8f06ba77175e91f4b1dfc6d05e (diff) | |
download | google-compute-image-packages-dad8239611d85fc697ff0905d60f00cc66ad747d.tar.gz |
fix bugs in disk-expand (#879)
Diffstat (limited to 'packages/gce-disk-expand/src/usr')
4 files changed, 24 insertions, 14 deletions
diff --git a/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/expand_rootfs.sh b/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/expand_rootfs.sh index 3d12b35..62d7171 100755 --- a/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/expand_rootfs.sh +++ b/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/expand_rootfs.sh @@ -16,6 +16,12 @@ # Contains dracut-specific logic for detecting disk, then calls appropriate # library functions. +# Notes for developing dracut modules: this module must never exit with anything +# other than a 0 exit code. That means no use of set -e or traps on err, and +# every command must be defensively written so that errors are caught and +# logged, rather than causing end of execution. Note that error handling in the +# main() function always calls return 0 + kmsg() { echo "expand_rootfs: $@" > /dev/kmsg } @@ -49,13 +55,14 @@ main() { kmsg "Resizing disk ${rootdev}" + # First, move the secondary GPT to the end. + if ! out=$(sgdisk_fix_gpt "$disk"); then + kmsg "Failed to fix GPT: ${out}" + fi + if ! out=$(parted_resizepart "$disk" "$partnum"); then - # Try fixing the GPT and try resizing again. - parted_fix_gpt "$disk" - if ! out=$(parted_resizepart "$disk" "$partnum"); then - kmsg "Failed to resize partition: ${out}" - return - fi + kmsg "Failed to resize partition: ${out}" + return fi if ! out=$(resize_filesystem "$rootdev"); then diff --git a/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/install b/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/install index cdd021d..4fa6a5b 100755 --- a/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/install +++ b/packages/gce-disk-expand/src/usr/share/dracut/modules.d/50expand_rootfs/install @@ -21,6 +21,7 @@ inst_hook pre-mount 50 "$moddir/expand_rootfs.sh" inst_hook pre-pivot 99 "$moddir/xfs_growfs.sh" dracut_install parted +dracut_install sgdisk dracut_install cut dracut_install sed dracut_install grep diff --git a/packages/gce-disk-expand/src/usr/share/initramfs-tools/hooks/expand-rootfs b/packages/gce-disk-expand/src/usr/share/initramfs-tools/hooks/expand-rootfs index dae461a..a463ea5 100755 --- a/packages/gce-disk-expand/src/usr/share/initramfs-tools/hooks/expand-rootfs +++ b/packages/gce-disk-expand/src/usr/share/initramfs-tools/hooks/expand-rootfs @@ -36,3 +36,5 @@ copy_exec /sbin/e2fsck /bin copy_exec /sbin/blkid /bin copy_exec /sbin/resize2fs /bin copy_exec /bin/udevadm /bin +copy_exec /usr/sbin/dmidecode /bin +copy_exec /sbin/sgdisk /bin diff --git a/packages/gce-disk-expand/src/usr/share/initramfs-tools/scripts/local-premount/expand_rootfs b/packages/gce-disk-expand/src/usr/share/initramfs-tools/scripts/local-premount/expand_rootfs index a380bc2..9b59b20 100755 --- a/packages/gce-disk-expand/src/usr/share/initramfs-tools/scripts/local-premount/expand_rootfs +++ b/packages/gce-disk-expand/src/usr/share/initramfs-tools/scripts/local-premount/expand_rootfs @@ -29,15 +29,15 @@ esac . /scripts/expandfs-lib.sh if ! rootdev=$(resolve_device "${ROOT}"); then - log_failure_message "Failed to resolve root device for \"${ROOT}\"" + log_failure_msg "Failed to resolve root device for \"${ROOT}\"" fi if ! fs_type=$(get_fstype "${rootdev}"); then - log_failure_message "Failed to determine fstype for \"${rootdev}\"" + log_failure_msg "Failed to determine fstype for \"${rootdev}\"" fi if ! out=$(split_partition "$rootdev"); then - log_failure_message "Failed to detect disk and partition info: ${out}" + log_failure_msg "Failed to detect disk and partition info: ${out}" exit 0 fi @@ -45,23 +45,23 @@ disk=${out%:*} partnum=${out#*:} if ! parted_needresize "${disk}" "${partnum}"; then - log_success_message "Disk ${rootdev} doesn't need resizing." + log_success_msg "Disk ${rootdev} doesn't need resizing." exit 0 fi -if ! out=$(parted_fix_gpt "$disk"); then - log_failure_message "Failed to fix GPT: ${out}" +if ! out=$(sgdisk_fix_gpt "$disk"); then + log_failure_msg "Failed to fix GPT: ${out}" exit 0 fi echo "Resizing partition on ${rootdev}" if ! out=$(parted_resizepart "${disk}" "${partnum}"); then - log_failure_message "Failed to resize partition: ${out}" + log_failure_msg "Failed to resize partition: ${out}" exit 0 fi echo "Resizing filesystem on ${rootdev}" if ! out=$(resize_filesystem "${rootdev}"); then - log_failure_message "Failed to resize filesystem: ${out}" + log_failure_msg "Failed to resize filesystem: ${out}" exit 0 fi |