#!/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}" # Wait for devices timeout 90 \ ash -c \ "until [ -e \"${NEW_DEVICE_ROOT}\" ]; do sleep 5; done" \ > /dev/null 2>&1 || true; # Check if block device is exists if [ ! -b "${NEW_DEVICE_ROOT}" ]; then echo "[ERROR] No block device ${NEW_DEVICE_ROOT}!" exit 1 fi echo "[INFO] Cleanup device ${NEW_DEVICE_ROOT}!" sgdisk -Z "${NEW_DEVICE_ROOT}" # 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"