A repeatable backup process and a step-by-step hardware migration workflow for Home Assistant. What backups actually contain, what they don’t, and how to move your entire setup to new hardware without losing anything.
If you do nothing else from this guide today, do this. It will not cover every scenario, but it will get you out of the worst one: total loss with no recoverable backup.
Install types: Home Assistant OS, Supervised, Container/Core, Proxmox VM. Some commands and add-ons apply only to HAOS/Supervised; Container/Core users may need manual storage paths or rclone workflows directly. Where it matters, this guide flags the difference.
Assumes: you can reach Settings → System → Backups, and you can store the backup encryption key outside Home Assistant. Both are non-negotiable; everything else is detail.
Verified against: Home Assistant 2026.4.
Most people think “Home Assistant backup” is one thing. It is three things, and missing any of them turns a recovery into a rebuild.
secrets.yaml. These are documented in Appendix B.If you have nothing today, this is the smallest setup that will save you from disaster:
An untested backup is a hope, not a backup. Chapter 06 covers the 15-minute restore drill. Run it once, today. Most people learn their backups don’t restore the way they thought during a real outage.
Spin up a Home Assistant VM, virtual machine, or even a spare Raspberry Pi. Restore your most recent backup to it. Notice what works, what doesn’t, and what asks you to log in again. The answers are the contents of Appendix B: the integration re-auth tracker.
This is the chapter most guides skip. It is the only chapter that matters when something is actually broken.
Every command block in this guide carries a Run on: tag; this is the map those tags point into. The single most common way a backup workflow fails is running the right command in the wrong container.
| Installation | Native backup UI | Apps | Where host tools (rclone, cron, scripts) run | Recommended off-host path |
|---|---|---|---|---|
| HA OS | Yes | Yes | Never in Core shell_command. Use a separate always-on machine (the “runner”), or skip host tools entirely by using native locations | Native location: network storage or Google Drive (§4.1, §4.4) |
| HA Container | Yes | No | The Docker host, via cron, with the backup directory mounted; or a dedicated sidecar | Host rclone (§4.2) or native location |
| HA Core | Yes | No | The host OS, via cron or a systemd timer | Host service or native location |
| Proxmox VM | Yes (inside HA) | Per guest | PVE/PBS commands run on the hypervisor or PBS host, never inside the HA guest | HA backup plus PBS VM backup (Ch 05) |
Most people learn this the hard way mid-migration: an HA backup is not a snapshot of your entire smart home. It is a snapshot of most of it. The gap is where guides fail people, and it’s where this one starts.
An HA backup is a single .tar archive containing a structured snapshot of your installation. The default full backup includes:
configuration.yaml, automations.yaml, scripts.yaml, scenes.yaml, your dashboards, custom blueprints, and the contents of /config/.storage/.addons folder: locally created or manually installed apps only. Store-installed app packages aren’t archived as packages; they’re reinstalled during restore./config, all included in a regular backup.secrets.yaml) and any other files in /config/.HA gives you two backup types. The naming is misleading.
Neither version is “everything that exists in your HA instance.” The next page documents what neither of them captures.
This list is the most-printed page of this guide for a reason. None of these are bugs. They’re design choices that make sense individually and collectively turn a restore into a chase.
Integrations configured through the UI live as configuration entries under /config/.storage, which is part of Home Assistant settings and restores with the backup, stored tokens included. What a provider does after restore is its own business: most accept the restored token and carry on; some expire or revoke it and trigger a reauthentication flow in HA. Appendix B documents what to expect, integration by integration.
Treat reauthorization as integration-specific, not a universal consequence of new hardware. The failure mode to plan for is a provider-side rejection (expired token, revoked app, changed redirect URL), which HA surfaces as a visible repair or reauth prompt: annoying, obvious, fixable.
This is where most migrations break.
zigbee.db) in the config directory and survives. Z-Wave JS stores a .json network store. But both depend on the USB device path being the same on the new host. If your dongle was /dev/ttyUSB0 on the old host and is /dev/ttyACM0 on the new one, you’ll edit your config before HA recognizes it.devices.yaml file is in the Z2M add-on’s data. If you didn’t opt into add-on data backup, you’ll re-pair every device.The complete integration-by-integration breakdown is Appendix B. That table is a working reference: keep it open during a migration and tick off each integration as you confirm it’s working.
An HA backup protects data stored inside the HA installation, plus the apps and folders you selected. It does not automatically protect anything that merely talks to HA. If part of your stack runs on another box, it has its own blast radius and needs its own plan.
/config.For every dependency, record: where it runs · where its config lives · where its data lives · which backup protects it · how it’s restored · when that restore was last tested. If the answer to “which backup contains this?” is unclear, treat the service as unprotected, because it is. Appendix B flags the rows where an external deployment falls outside this guide’s backup entirely.
You've read what HA backup actually covers. The full blueprint covers the three-layer safety net, native HA backups done right, where backups should land, when HA-native isn't enough, restore testing, full hardware migration, SD-vs-SSD durability, pre-update safety, and disaster recovery. About 85 pages.