The goal of this Article is to teach you how to find out what takes how much space on your HAOS system.
At the end of this article you should have an interactive way to explore your storage similar to this.

To check the recorder database size/stats I recommend the DBStats app/container.
First some background to understand how HAOS and its storage works.
Almost everything is run in docker containers. Every App (formerly known as Addon), even HA itself or the supervisor are docker containers.
Some paths on the OS are bind mounted into those containers so multiple apps can have access to the same files and to persist data. Containers are considered ephemeral/replaceable. Here's some examples of paths that might be shared and where they originate
| Path on OS | Path in container/app |
|---|---|
/mnt/data/supervisor/share/ |
/share |
/mnt/data/supervisor/homeassistant |
/config or /homeassistant |
/mnt/data/supervisor/backup |
/backup |
What this means is that apps don't have access to everything on the OS side so if you want to check what takes space on there you have to use some tricks.
HAOS architecture diagram. Source for picture.

As explained above, apps can only see certain things but this might be all you need.
You can use either the Core SSH App or the Advanced SSH App. I'd recommend the latter as it has more features. You need it for the extended steps below anyways.
Run this to install and start gdu.
apk add gdu
# Use this if you want to ignore shares/mounts
gdu --show-mtime --show-item-count --no-unicode --ignore-dirs /share /
# Otherwise use this
gdu --show-mtime --show-item-count --no-unicode /You can press m (toggle file modification dates), c (toggle file counts) and i (toggle item info) and look around with the arrow keys.
Press ? for shortcuts, q to close modals. Ask someone you trust before deleting anything if you're unsure ๐
As explained in the introduction this requires OS level access. To achieve this we bind mount the root / path of the OS into the /host path of a temporary docker container.
This is made possible by using the Advanced SSH App with disabled protection mode.
To make it harder to accidentely delete anything the commands use :ro to mount the path read only.
You need the Advanced SSH App with disabled protection mode (restart it after disabling it) to get access to the docker command.

You can then run one of these docker commands
# We ignore /var/lib/docker because it's the same as /mnt/data/docker (bind mount) and would be counted twice otherwise
# Use this if you want to ignore shares/mounts
docker run --rm -ti -v /:/host:ro alpine sh -c "apk add gdu; gdu --show-mtime --show-item-count --no-unicode --ignore-dirs /host/var/lib/docker --ignore-dirs /host/mnt/data/supervisor/share --ignore-dirs /host/mnt/data/supervisor/mounts /host"
# Otherwise use this
docker run --rm -ti -v /:/host:ro alpine sh -c "apk add gdu; gdu --show-mtime --show-item-count --no-unicode --ignore-dirs /host/var/lib/docker /host"You can press m (toggle file modification dates), c (toggle file counts) and i (toggle item info) and look around with the arrow keys.
Press ? for shortcuts, q to close modals. Ask someone you trust before deleting anything if you're unsure ๐
If you get a Unsupported system - Unsupported software notification don't worry. The temporary container created as part of this process is automatically removed when it is stopped due to the --rm flag. If the warning doesn't go away on its own after a day or so running ha supervisor repair and then ha host reboot should help.
This is a very simple and universal way using standard linux tools that works for apps and OS alike. I only recommend this if you are unable to use the other ways. For example due to too little space or lack of network connectivity.
It's a more rudimentary non-interactive option which you likely don't want to use any more once you've used the interactive one above.
The paths are different (see introduction for why) depending on if you use an app or not. Don't panic, this can take a few seconds to return anything depending on how fast your system/storage is.
du -shc /* | sort -h
# Go deeper
du -shc /bigdirectory/* | sort -h
# And so on...
du -shc /bigdirectory/.../* | sort -hSince version 17 HAOS uses the containerd storage/snapshotter. It tends to use more space.
You can see the size of your docker images and such like this
docker system df -vNote than Containers space usage does not count the bind mounted data which is what basically all HAOS containers use.
You can prune unused data like this
docker system prune -aThis should be save but take backups first.
Alternatively, do a supervisor repair and reboot. It does something similar
ha supervisor repair
ha host reboot
There is now a built in Cake diagram that shows exactly how much space is used by which addon!