fix potential boot disk detection bug on NVMe

This commit is contained in:
jjm2473 2023-01-31 18:12:19 +08:00
parent 762870e331
commit cfd3dd4af6
2 changed files with 32 additions and 27 deletions

View File

@ -2,14 +2,14 @@
# mmcblk0
_getbootdisk()
{
local rootpart="`grep -Fm1 ' - squashfs /dev/root ' /proc/self/mountinfo | cut -d' ' -f3`"
[ -z "$rootpart" ] && return 1
local devpath="`readlink /sys/dev/block/$rootpart`"
[ -z "$devpath" ] && return 1
rootpart="${devpath##*/}"
devpath="${devpath%%/$rootpart}"
local rootdisk="${devpath##*/}"
echo $rootdisk
local rootpart="`grep -Fm1 ' - squashfs /dev/root ' /proc/self/mountinfo | cut -d' ' -f3`"
[ -z "$rootpart" ] && return 1
local devpath="`readlink /sys/dev/block/$rootpart`"
[ -z "$devpath" ] && return 1
rootpart="${devpath##*/}"
devpath="${devpath%%/$rootpart}"
local rootdisk="${devpath##*/}"
echo "$rootdisk"
}
# > getpartofdisk sda 3
@ -18,15 +18,16 @@ _getbootdisk()
# mmcblk0p3
_getpartofdisk()
{
local disk="$1"
local part="$2"
local dev="`cat /sys/block/$disk/dev`"
[ -z "$dev" ] && return 1
local major="${dev%%:*}"
local minor="${dev##*:}"
local devpath="`readlink /sys/dev/block/$major:$(($minor + $part))`"
[ -z "$devpath" ] && return 1
echo "${devpath##*/}"
local disk="$1" offset="$2" part
if [[ "$offset" = 0 ]]; then
echo "$disk"
else
part="$disk"
echo "$part" | grep -q '^.*\d$' && part="${part}p"
part="${part}"$(( ${offset} ))
echo "$part"
fi
return 0
}
_get_overlay_partition_default()

View File

@ -156,6 +156,7 @@ export_bootdevice() {
done < /tmp/.bootdisk
export BOOTDEV_MAJOR=$MAJOR
export BOOTDEV_MINOR=$MINOR
export BOOTDEV_DEVNAME=$DEVNAME
return 0
fi
@ -219,6 +220,7 @@ export_bootdevice() {
done < "$uevent"
export BOOTDEV_MAJOR=$MAJOR
export BOOTDEV_MINOR=$MINOR
export BOOTDEV_DEVNAME=$DEVNAME
return 0
fi
fi
@ -227,18 +229,20 @@ export_bootdevice() {
}
export_partdevice() {
local var="$1" offset="$2"
local uevent line MAJOR MINOR DEVNAME DEVTYPE
for uevent in /sys/class/block/*/uevent; do
while read line; do
export -n "$line"
done < "$uevent"
if [ $BOOTDEV_MAJOR = $MAJOR -a $(($BOOTDEV_MINOR + $offset)) = $MINOR -a -b "/dev/$DEVNAME" ]; then
export "$var=$DEVNAME"
local var="$1" offset="$2" part
offset=$(( ${offset} ))
if [[ "$offset" = 0 ]]; then
export "$var=$BOOTDEV_DEVNAME"
return 0
else
part="$BOOTDEV_DEVNAME"
echo "$part" | grep -q '^.*\d$' && part="${part}p"
part="${part}${offset}"
if [ -b "/dev/$part" ]; then
export "$var=$part"
return 0
fi
done
fi
return 1
}