Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run partprobe after Ignition partition changes #1202

Merged
merged 1 commit into from
Oct 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/bugfixes/2023-09-29-ignition-partition.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Triggered re-reading of partition table to fix adding partitions to the boot disk [scripts#1202](https://github.com/flatcar/scripts/pull/1202)
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
From e5c4e6bd9f3bad3b27e338e4da2f3b0b53ab1599 Mon Sep 17 00:00:00 2001
From: Kai Lueke <kailuke@microsoft.com>
Date: Fri, 29 Sep 2023 18:06:09 +0200
Subject: [PATCH] sgdisk: Run partprobe after partition changes

The sgdisk tool does not update the kernel partition table in contrast
to other similar tools. Often udev can detect the changes but not always
as experienced when adding a new partition on Flatcar's boot disk.
Instead of implicitly relying on some other component to re-read the
kernel partition table, trigger the re-read with partprobe.
---
dracut/30ignition/module-setup.sh | 1 +
internal/distro/distro.go | 2 ++
internal/sgdisk/sgdisk.go | 5 +++++
3 files changed, 8 insertions(+)

diff --git a/dracut/30ignition/module-setup.sh b/dracut/30ignition/module-setup.sh
index ad7e80fd..3cdcb631 100755
--- a/dracut/30ignition/module-setup.sh
+++ b/dracut/30ignition/module-setup.sh
@@ -33,6 +33,7 @@ install() {
mkfs.xfs \
mkswap \
sgdisk \
+ partprobe \
useradd \
userdel \
usermod \
diff --git a/internal/distro/distro.go b/internal/distro/distro.go
index 61ca87ae..c1c13b62 100644
--- a/internal/distro/distro.go
+++ b/internal/distro/distro.go
@@ -37,6 +37,7 @@ var (
mdadmCmd = "mdadm"
mountCmd = "mount"
sgdiskCmd = "sgdisk"
+ partprobeCmd = "partprobe"
modprobeCmd = "modprobe"
udevadmCmd = "udevadm"
usermodCmd = "usermod"
@@ -90,6 +91,7 @@ func GroupdelCmd() string { return groupdelCmd }
func MdadmCmd() string { return mdadmCmd }
func MountCmd() string { return mountCmd }
func SgdiskCmd() string { return sgdiskCmd }
+func PartprobeCmd() string { return partprobeCmd }
func ModprobeCmd() string { return modprobeCmd }
func UdevadmCmd() string { return udevadmCmd }
func UsermodCmd() string { return usermodCmd }
diff --git a/internal/sgdisk/sgdisk.go b/internal/sgdisk/sgdisk.go
index 29915809..e70a3881 100644
--- a/internal/sgdisk/sgdisk.go
+++ b/internal/sgdisk/sgdisk.go
@@ -121,6 +121,11 @@ func (op *Operation) Commit() error {
if _, err := op.logger.LogCmd(cmd, "deleting %d partitions and creating %d partitions on %q", len(op.deletions), len(op.parts), op.dev); err != nil {
return fmt.Errorf("create partitions failed: %v", err)
}
+ // In contrast to similar tools, sgdisk does not trigger the update of the kernel partition table
+ cmd = exec.Command(distro.PartprobeCmd(), op.dev)
+ if _, err := op.logger.LogCmd(cmd, "re-reading of %d deleted partitions and %d created partitions on %q", len(op.deletions), len(op.parts), op.dev); err != nil {
+ return fmt.Errorf("re-reading partitions failed: %v", err)
+ }

return nil
}
--
2.41.0

Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ PATCHES=(
"${FILESDIR}/0019-docs-Add-re-added-platforms-to-docs-to-pass-tests.patch"
"${FILESDIR}/0020-usr-share-oem-oem.patch"
"${FILESDIR}/0021-internal-exec-stages-mount-Mount-oem.patch"
"${FILESDIR}/0022-sgdisk-Run-partprobe-after-partition-changes.patch"
)

src_compile() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ CROS_WORKON_REPO="https://github.com"
if [[ "${PV}" == 9999 ]]; then
KEYWORDS="~amd64 ~arm ~arm64 ~x86"
else
CROS_WORKON_COMMIT="2c0968a0c26a3f39721e76fb99368ee0fabffc7c" # flatcar-master
CROS_WORKON_COMMIT="9eaeae2fbbdef1d6364a95192bf8e5b35dca8ed1" # flatcar-master
KEYWORDS="amd64 arm arm64 x86"
fi

Expand Down