Skip to content

Commit

Permalink
Always use NVMe datadisk on Yellow if it's present on first boot
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
sairon committed Nov 21, 2024
1 parent af833db commit 58eccc8
Showing 1 changed file with 50 additions and 12 deletions.
62 changes: 50 additions & 12 deletions buildroot-external/rootfs-overlay/usr/libexec/haos-data-disk-detach
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,53 @@ sleep 10s

datapartitions=$(blkid --match-token LABEL="hassos-data" --output device)

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}, mark it disabled..."
e2label "${datapart}" hassos-data-dis
fi
done
. /etc/os-release

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

0 comments on commit 58eccc8

Please sign in to comment.