Update OS-Agent 1.2.0 & adjust datadisk support (#1554)

* Update OS-Agent & adjust datadisk support

* Update Documentation/partition.md

Co-authored-by: Stefan Agner <stefan@agner.ch>
This commit is contained in:
Pascal Vizeli 2021-09-28 09:54:04 +02:00 committed by Stefan Agner
parent fe1d3fc29a
commit cbbecc355b
No known key found for this signature in database
GPG Key ID: AE01353D1E44747D
3 changed files with 12 additions and 101 deletions

View File

@ -41,40 +41,27 @@ Sometime the bootloader part can look different because there can be firmware or
The data partition is the only partition with real I/O. It will be expanded automatically at boot to the full size of the disk.
## Using datactl to move the data partition.
## Using CLI to move the data partition.
In a Home Assistant OS installation, the data is stored on the `/mnt/data` partition of the SD card. This is the only read+write partition on the SD drive. Using the `datactl` move command, this partition can be moved off of the SD card onto an externally connected drive, leaving the rest of the read-only system on the SD.
In a Home Assistant OS installation, the data is stored on the `/mnt/data` partition of the boot storage (typically the SD card). This is the only read/write partition on the boot storage. Using the `datadisk` move command, this partition can be moved to an externally connected drive, leaving the rest of the read-only system on the boot storage.
The storage capacity of the external drive must be larger than the storage capacity of the existing SD card.
The command needs to be run from the host console by either connecting a keyboard and monitor or making use of the [debug ssh access](https://developers.home-assistant.io/docs/operating-system/debugging/) over port 22222. The command will not work from within an SSH add-on container.
Log in as `root` to get to the Home Assistant CLI and then enter `login` to continue to the host.
Confirm your USB SSD/HD is connected and recognized using `fdisk -l`.
With the drive connected, use the following command (replacing sdx with your drive, without a partition number):
The storage capacity of the external drive must be larger than the storage capacity of the existing disk.
```sh
$ datactl move /dev/sdx
$ ha os datadisk move /dev/sdx
```
Enter "yes" to confirm the operation. This will prepare the disk, however, the
actual move will be running on next reboot. This will make the first boot significantly longer than usual; please be patient. Reboot with the following command:
This will make a reboot which going significantly longer than usual; please be patient!
For getting a list of supported detected devices which can be used by `datadisk`:
```sh
$ ha host reboot
$ ha os datadisk list
```
Once complete, the external drive
will contain the data and will need to be plugged in to successfully boot Home
Assistant.
## Using UI to move the data partition.
## Check if the move was succesful.
Within the Home Assistant interface you won't see if the move was succesful. To check this, go to your host console again (as described above) and enter:
```sh
$ systemctl status mnt-data.mount
```
If the data partition was moved to your USB drive you should see ```sh Active: active (mounted) ``` in the output. Also, it will show, which drive got mounted as /mnt/data (```sh Where ``` and ```sh what ``` section of the output)
__follow__
## Check Power Supply Rating

View File

@ -4,7 +4,7 @@
#
################################################################################
OS_AGENT_VERSION = 1.1.0
OS_AGENT_VERSION = 1.2.0
OS_AGENT_SITE = $(call github,home-assistant,os-agent,$(OS_AGENT_VERSION))
OS_AGENT_LICENSE = Apache License 2.0
OS_AGENT_LICENSE_FILES = LICENSE

View File

@ -1,76 +0,0 @@
#!/bin/sh
# ==============================================================================
# Home Assistant OS data partition handling
# ==============================================================================
set -e
# Use current mount point. This avoids "Can't be the same disk!" error
# when using a drive which has been used as a data drive previously.
DATA_DEVICE_CHILD="$(findmnt --noheadings --output=source /mnt/data)"
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
if [ "${1}" = "move" ] && [ -e "${2}" ]; then
NEW_DEVICE_ROOT="${2}"
# Check device
if ! lsblk "${NEW_DEVICE_ROOT}" | grep disk > /dev/null 2>&1; then
echo "[ERROR] Is not disk!"
exit 1
elif [ "${NEW_DEVICE_ROOT}" = "${DATA_DEVICE_ROOT}" ]; then
echo "[ERROR] Can't be the same disk!"
exit 1
fi
# Flag device
if [ -z "${DATACTL_NOCONFIRM}" ]; then
echo "WARNING: All partitions on ${NEW_DEVICE_ROOT} will be deleted!"
printf "Enter \"yes\" to confirm: "
read -r confirm
if [ "${confirm}" != "yes" ]; then
echo "Aborting."
exit 1
fi
fi
# Create GPT partition table with a single data partition
cat << EOF | sfdisk --wipe-partitions=always --wipe=always "${NEW_DEVICE_ROOT}"
label: gpt
uuid=a52a4597-fa3a-4851-aefd-2fbe9f849079, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name=hassos-data-external
EOF
# 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!"
echo "label: gpt" | sfdisk "${NEW_DEVICE_ROOT}"
exit 1
fi
touch "/mnt/overlay/move-data"
cat << EOF
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
make sure to leave the disk connected to the system from now on.
EOF
else
cat << EOF
Usage: datactl move <device>
Moves data partition to external device provided by <device> (without partition
number). A new partition table and a partition for the complete device will be
created by datactl.
EOF
fi