mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-07-28 07:26:28 +00:00
Make the datactl command more robust (#1059)
* Make the datactl command more robust Validate target disk (partition) size to avoid a copy attempt which will fail. If e2image operation fails, make sure the leftover copy is not regonized as data partition. * Fix hassos-data service device unit dependencies
This commit is contained in:
parent
78b456d05c
commit
6672046b6f
@ -9,6 +9,11 @@ set -e
|
|||||||
DATA_DEVICE_CHILD="$(findmnt --noheadings --output=source /mnt/data)"
|
DATA_DEVICE_CHILD="$(findmnt --noheadings --output=source /mnt/data)"
|
||||||
DATA_DEVICE_ROOT="/dev/$(lsblk -no pkname "${DATA_DEVICE_CHILD}")"
|
DATA_DEVICE_ROOT="/dev/$(lsblk -no pkname "${DATA_DEVICE_CHILD}")"
|
||||||
|
|
||||||
|
if [ "${DATA_DEVICE_ROOT}" = "" ]; then
|
||||||
|
echo "[ERROR] Data disk device not found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Move command
|
# Move command
|
||||||
if [ "${1}" = "move" ] && [ -e "${2}" ]; then
|
if [ "${1}" = "move" ] && [ -e "${2}" ]; then
|
||||||
NEW_DEVICE_ROOT="${2}"
|
NEW_DEVICE_ROOT="${2}"
|
||||||
@ -39,8 +44,20 @@ if [ "${1}" = "move" ] && [ -e "${2}" ]; then
|
|||||||
-u "0:a52a4597-fa3a-4851-aefd-2fbe9f849079" \
|
-u "0:a52a4597-fa3a-4851-aefd-2fbe9f849079" \
|
||||||
"${NEW_DEVICE_ROOT}"
|
"${NEW_DEVICE_ROOT}"
|
||||||
|
|
||||||
|
# Since we create a new partition table etc. we are guaranteed the target
|
||||||
|
# partition is partition 1
|
||||||
|
NEW_DEVICE_PART_SIZE=$(cat "/sys/class/block/$(basename "${NEW_DEVICE_ROOT}")1/size")
|
||||||
|
OLD_DEVICE_PART_SIZE=$(cat "/sys/class/block/$(basename "${DATA_DEVICE_CHILD}")/size")
|
||||||
|
|
||||||
|
if [ "${NEW_DEVICE_PART_SIZE}" -lt "${OLD_DEVICE_PART_SIZE}" ]; then
|
||||||
|
echo "[INFO] Target device too small!"
|
||||||
|
sgdisk --zap-all "${NEW_DEVICE_ROOT}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
touch "/mnt/overlay/move-data"
|
touch "/mnt/overlay/move-data"
|
||||||
cat << EOF
|
cat << EOF
|
||||||
|
|
||||||
Disk ${NEW_DEVICE_ROOT} has been prepared to be used as data drive and the data
|
Disk ${NEW_DEVICE_ROOT} has been prepared to be used as data drive and the data
|
||||||
move has been scheduled for the next reboot. Please reboot the device now and
|
move has been scheduled for the next reboot. Please reboot the device now and
|
||||||
make sure to leave the disk connected to the system from now on.
|
make sure to leave the disk connected to the system from now on.
|
||||||
|
@ -3,9 +3,9 @@ Description=Home Assistant OS data partition migration
|
|||||||
DefaultDependencies=no
|
DefaultDependencies=no
|
||||||
RefuseManualStart=true
|
RefuseManualStart=true
|
||||||
RefuseManualStop=true
|
RefuseManualStop=true
|
||||||
Requires=mnt-overlay.mount dev-disk-by\x2dlabel-hassos\x2ddata.device dev-disk-by\x2dpartlabel-hassos\x2ddata\x2dexternal.service
|
Requires=mnt-overlay.mount dev-disk-by\x2dlabel-hassos\x2ddata.device dev-disk-by\x2dpartlabel-hassos\x2ddata\x2dexternal.device
|
||||||
Wants=hassos-expand.service
|
Wants=hassos-expand.service
|
||||||
After=mnt-overlay.mount dev-disk-by\x2dlabel-hassos\x2ddata.device systemd-fsck@dev-disk-by\x2dlabel-hassos\x2ddata.service dev-disk-by\x2dpartlabel-hassos\x2ddata\x2dexternal.service
|
After=mnt-overlay.mount dev-disk-by\x2dlabel-hassos\x2ddata.device systemd-fsck@dev-disk-by\x2dlabel-hassos\x2ddata.service dev-disk-by\x2dpartlabel-hassos\x2ddata\x2dexternal.device
|
||||||
Before=hassos-expand.service
|
Before=hassos-expand.service
|
||||||
ConditionPathExists=/mnt/overlay/move-data
|
ConditionPathExists=/mnt/overlay/move-data
|
||||||
|
|
||||||
|
@ -10,9 +10,18 @@ OLD_DEVICE_CHILD="$(readlink -f "/dev/disk/by-label/hassos-data")"
|
|||||||
# Rely on systemd-udev symlinks to find external data partition by partlabel
|
# Rely on systemd-udev symlinks to find external data partition by partlabel
|
||||||
NEW_DEVICE_CHILD="$(readlink -f "/dev/disk/by-partlabel/hassos-data-external")"
|
NEW_DEVICE_CHILD="$(readlink -f "/dev/disk/by-partlabel/hassos-data-external")"
|
||||||
|
|
||||||
|
NEW_DEVICE_PART_SIZE=$(cat "/sys/class/block/$(basename "${NEW_DEVICE_CHILD}")/size")
|
||||||
|
OLD_DEVICE_PART_SIZE=$(cat "/sys/class/block/$(basename "${OLD_DEVICE_CHILD}")/size")
|
||||||
|
if [ "${NEW_DEVICE_PART_SIZE}" -lt "${OLD_DEVICE_PART_SIZE}" ]; then
|
||||||
|
echo "[INFO] Target device too small!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "[INFO] Moving data from ${OLD_DEVICE_CHILD} to ${NEW_DEVICE_CHILD}"
|
echo "[INFO] Moving data from ${OLD_DEVICE_CHILD} to ${NEW_DEVICE_CHILD}"
|
||||||
if ! e2image -ra -p "${OLD_DEVICE_CHILD}" "${NEW_DEVICE_CHILD}"; then
|
if ! e2image -ra -p "${OLD_DEVICE_CHILD}" "${NEW_DEVICE_CHILD}"; then
|
||||||
echo "[ERROR] Copying data partition to external device failed!"
|
echo "[ERROR] Copying data partition to external device failed!"
|
||||||
|
# Rename partition to make sure HAOS does not try to mount a failed copy attempt.
|
||||||
|
e2label "${NEW_DEVICE_CHILD}" hassos-data-failed || true
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user