Skip to content

Commit 78efdc2

Browse files
committed
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.
1 parent de4da0e commit 78efdc2

File tree

4 files changed

+10
-0
lines changed

4 files changed

+10
-0
lines changed

docs/release-notes.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ nav_order: 9
1515

1616
### Changes
1717

18+
- The Dracut module now installs partprobe
1819

1920
### Bug fixes
2021

2122
- Prevent races with udev after disk editing
23+
- A partition table re-read fixes corner cases where udev couldn't pick up changes
2224

2325

2426
## Ignition 2.16.2 (2023-07-12)

dracut/30ignition/module-setup.sh

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ install() {
3333
mkfs.xfs \
3434
mkswap \
3535
sgdisk \
36+
partprobe \
3637
useradd \
3738
userdel \
3839
usermod \

internal/distro/distro.go

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var (
3737
mdadmCmd = "mdadm"
3838
mountCmd = "mount"
3939
sgdiskCmd = "sgdisk"
40+
partprobeCmd = "partprobe"
4041
modprobeCmd = "modprobe"
4142
udevadmCmd = "udevadm"
4243
usermodCmd = "usermod"
@@ -90,6 +91,7 @@ func GroupdelCmd() string { return groupdelCmd }
9091
func MdadmCmd() string { return mdadmCmd }
9192
func MountCmd() string { return mountCmd }
9293
func SgdiskCmd() string { return sgdiskCmd }
94+
func PartprobeCmd() string { return partprobeCmd }
9395
func ModprobeCmd() string { return modprobeCmd }
9496
func UdevadmCmd() string { return udevadmCmd }
9597
func UsermodCmd() string { return usermodCmd }

internal/sgdisk/sgdisk.go

+5
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ func (op *Operation) Commit() error {
121121
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 {
122122
return fmt.Errorf("create partitions failed: %v", err)
123123
}
124+
// In contrast to similar tools, sgdisk does not trigger the update of the kernel partition table
125+
cmd = exec.Command(distro.PartprobeCmd(), op.dev)
126+
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 {
127+
return fmt.Errorf("re-reading partitions failed: %v", err)
128+
}
124129

125130
return nil
126131
}

0 commit comments

Comments
 (0)