Ensure loop device partition nodes are created (#741)

Although the loop block device is created before attaching the image
to it, the devices for the partition that the image contains are still
not created. This patch creates those devices as well, when they are
not already available.

Fixes #482

Signed-off-by: Vasilis Tsiligiannis <acinonyx@openwrt.gr>
This commit is contained in:
Vasilis Tsiligiannis 2024-01-04 13:05:51 +02:00 committed by GitHub
parent 02b371de1a
commit 1377e903b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 0 deletions

View File

@ -46,6 +46,7 @@ if [ "${NO_PRERUN_QCOW2}" = "0" ]; then
fi fi
done done
ensure_loopdev_partitions "$LOOP_DEV"
BOOT_DEV="${LOOP_DEV}p1" BOOT_DEV="${LOOP_DEV}p1"
ROOT_DEV="${LOOP_DEV}p2" ROOT_DEV="${LOOP_DEV}p2"

View File

@ -22,6 +22,7 @@ until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$IMG_
fi fi
done done
ensure_loopdev_partitions "$LOOP_DEV"
BOOT_DEV="${LOOP_DEV}p1" BOOT_DEV="${LOOP_DEV}p1"
ROOT_DEV="${LOOP_DEV}p2" ROOT_DEV="${LOOP_DEV}p2"

View File

@ -110,3 +110,17 @@ ensure_next_loopdev() {
[[ -b "$loopdev" ]] || mknod "$loopdev" b 7 "$loopmaj" [[ -b "$loopdev" ]] || mknod "$loopdev" b 7 "$loopmaj"
} }
export -f ensure_next_loopdev export -f ensure_next_loopdev
ensure_loopdev_partitions() {
local line
local partition
local majmin
lsblk -r -n -o "NAME,MAJ:MIN" "$1" | grep -v "^${1#/dev/} " | while read -r line; do
partition="${line%% *}"
majmin="${line#* }"
if [ ! -b "/dev/$partition" ]; then
mknod "/dev/$partition" b "${majmin%:*}" "${majmin#*:}"
fi
done
}
export -f ensure_loopdev_partitions