Always use NVMe datadisk on Yellow if it's present on first boot (#3686)

If HAOS on Yellow is booted for the first time with NVMe data disk present, it
should be preferred over the empty eMMC data partition. This will ease
reinstall of the system and migration from CM4 to CM5. All other data disks
(e.g. if a USB drive is used for them) are still treated as before, requiring
manual adoption using the Supervisor repair.

(cherry picked from commit 98ac7f017089f28d7f231eed1a51533dfa62a475)
This commit is contained in:
Jan Čermák 2024-11-21 19:42:26 +01:00 committed by Jan Čermák
parent 1291848041
commit 74af855056
No known key found for this signature in database
GPG Key ID: A78C897AA3AF012B

View File

@ -1,4 +1,5 @@
#!/bin/sh
# shellcheck disable=SC1091
# Find root using rdev command
rootpart=$(rdev | cut -f 1 -d ' ')
@ -9,15 +10,53 @@ sleep 10s
datapartitions=$(blkid --match-token LABEL="hassos-data" --output device)
for datapart in ${datapartitions}
do
datadev=$(lsblk -no pkname "${datapart}")
. /etc/os-release
# If major does not match our root device major, it is an external data
# disk. Rename to make sure it gets ignored.
if [ "$rootdev" != "$datadev" ]
then
echo "Found external data disk device on ${datapart}, mark it disabled..."
e2label "${datapart}" hassos-data-dis
fi
done
disable_data_partition() {
e2label "${1}" hassos-data-dis
}
if [ "$VARIANT_ID" = "yellow" ]; then
emmc_data_partition=""
nvme_data_partition=""
for datapart in ${datapartitions}; do
datadev=$(lsblk -no pkname "${datapart}")
case "${datadev}" in
mmc*)
# Data partition on internal eMMC
if [ "$rootdev" = "$datadev" ]; then
emmc_data_partition="${datapart}"
fi
;;
nvme0*)
# Data partition on first NVMe disk
nvme_data_partition="${datapart}"
;;
*)
# Disable all other data disks as normally
if [ "$rootdev" != "$datadev" ]; then
echo "Found extra external data disk device on ${datapart}, marking it disabled..."
disable_data_partition "${datapart}"
fi
;;
esac
done
if [ -n "${emmc_data_partition}" ] && [ -n "${nvme_data_partition}" ]; then
echo "Found both eMMC and NVMe data disk devices, marking eMMC as disabled"
disable_data_partition "${emmc_data_partition}"
fi
else
for datapart in ${datapartitions}; do
datadev=$(lsblk -no pkname "${datapart}")
# If major does not match our root device major, it is an external data
# disk. Rename to make sure it gets ignored.
if [ "$rootdev" != "$datadev" ]; then
echo "Found external data disk device on ${datapart}, marking it disabled..."
disable_data_partition "${datapart}"
fi
done
fi