70 lines
2.0 KiB
Bash
Executable File
70 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# shellcheck disable=SC2039
|
|
# ==============================================================================
|
|
# HassOS data partition handler
|
|
# ==============================================================================
|
|
set -e
|
|
|
|
OPTION_FILE=/mnt/overlay/data.opt
|
|
|
|
# New data partition exits
|
|
if ! [ -e "${OPTION_FILE}" ]; then
|
|
echo "[INFO] No data option found"
|
|
exit 0
|
|
else
|
|
NEW_DEVICE_ROOT="$(cat ${OPTION_FILE})"
|
|
rm ${OPTION_FILE}
|
|
fi
|
|
|
|
# Get device information
|
|
OLD_DEVICE_CHILD="$(findfs LABEL="hassos-data")"
|
|
OLD_DEVICE_ROOT="/dev/$(lsblk -no pkname "${OLD_DEVICE_CHILD}")"
|
|
OLD_PART_NUM="${OLD_DEVICE_CHILD: -1}"
|
|
|
|
# Create new partition
|
|
echo "[INFO] Create new hassos-data partition"
|
|
sgdisk -o "${NEW_DEVICE_ROOT}"
|
|
sgdisk \
|
|
-n "0:0:0" \
|
|
-c "0:hassos-data" \
|
|
-t "0:0FC63DAF-8483-4772-8E79-3D69D8477DE4" \
|
|
-u "0:a52a4597-fa3a-4851-aefd-2fbe9f849079" \
|
|
"${NEW_DEVICE_ROOT}"
|
|
sgdisk -v "${NEW_DEVICE_ROOT}"
|
|
partx -u "${NEW_DEVICE_ROOT}"
|
|
|
|
NEW_DEVICE_CHILD="$(fdisk -l "${NEW_DEVICE_ROOT}" | grep '^/dev' | cut -d' ' -f1 | head -n 1)"
|
|
|
|
echo "[INFO] Move hassos-data from ${OLD_DEVICE_CHILD} to ${NEW_DEVICE_CHILD}"
|
|
if ! dd if="${OLD_DEVICE_CHILD}" of="${NEW_DEVICE_CHILD}" status=none; then
|
|
echo "[ERROR] Data copy fails!"
|
|
|
|
# Reset new data partition
|
|
sgdisk -o "${NEW_DEVICE_ROOT}"
|
|
partx -u "${NEW_DEVICE_ROOT}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[INFO] Remove old hassos-data partition ${OLD_PART_NUM} / ${OLD_DEVICE_ROOT}"
|
|
if sfdisk -dq "${OLD_DEVICE_ROOT}" | grep -q 'label: gpt'; then
|
|
sgdisk -d "${OLD_PART_NUM}" "${OLD_DEVICE_ROOT}"
|
|
sgdisk -v "${OLD_DEVICE_ROOT}"
|
|
|
|
else
|
|
sfdisk --delete "${OLD_PART_NUM}" "${OLD_DEVICE_ROOT}" --force
|
|
sfdisk -V "${OLD_DEVICE_ROOT}"
|
|
fi
|
|
|
|
echo "[INFO] fix filesystem & layout"
|
|
|
|
# Fix filesystem
|
|
e2fsck -y "${NEW_DEVICE_CHILD}"
|
|
resize2fs -f "${NEW_DEVICE_CHILD}"
|
|
|
|
# Fix partition layout
|
|
partx -d "${OLD_DEVICE_CHILD}"
|
|
partx -u "${OLD_DEVICE_ROOT}"
|
|
partx -u "${NEW_DEVICE_ROOT}"
|
|
|
|
echo "[INFO] Finish hassos data movement"
|