mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-07-24 13:36:31 +00:00
Delete Bluetooth device cache regularly (#2751)
* Delete Bluetooth device cache regularly Delete stale Bluetooth devices from the BlueZ device cache every week. This makes sure that the overlay partition doesn't run out of inodes which has happened in real world scenarios where many new Bluetooth devices are discovered. BlueZ maintains these files on a best effort base. So removing them while BlueZ is running should be safe. An alternative considered was to lower BlueZ GATT caching (e.g. by using Cache=yes instead of always, to cache only paired devices). However, this would hurt performance and battery lifetime of Bluetooth devices due to additional unnecessary GATT attributes reads. This is in particular true for Bluetooth 5.1 devices which support the Database Hash charactristic. Caching has also helped reliability with intermittent connections (see https://github.com/bluez/bluez/issues/191). More importantly, besides the GATT attribute cache the same files are also used to cache the device names as well. This is independent of the above mentioned GATT cache configuration (see device_store_cached_name in BlueZ). So disabling the GATT caching alone wouldn't solve the particular problem we are facing. See also: https://github.com/home-assistant/supervisor/issues/4490 * Use access timestamp instead of modification timestamp The modification timestamp gets updated regularly (on each connect) it seems. However, using access timestamp might be more accurate, as it seems to preserves slightly more cache files. This additional devices might be devices we don't regularly connect but are still around (and therefor we shouldn't reread the GATT attributes regularly). So deleting cache entries with access time older than 7 days. Which essentially deletes all the entries of devices which haven't been seen the last 7 days.
This commit is contained in:
parent
26dd95cb03
commit
f8f2e61967
@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Remove Bluetooth cache entries older than one week
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/bin/sh -c 'find /var/lib/bluetooth/*/cache -mindepth 1 -type f -atime +7 -exec rm {} \;'
|
||||
PrivateDevices=yes
|
||||
PrivateNetwork=yes
|
||||
PrivateUsers=no
|
||||
ProtectKernelTunables=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectControlGroups=yes
|
||||
MemoryDenyWriteExecute=yes
|
||||
SystemCallFilter=@default @file-system @basic-io @system-service
|
||||
|
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=Remove Bluetooth cache entries
|
||||
ConditionPathExistsGlob=/var/lib/bluetooth/*/cache
|
||||
|
||||
[Timer]
|
||||
OnCalendar=weekly
|
||||
AccuracySec=1h
|
||||
Persistent=true
|
||||
RandomizedDelaySec=6000
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
|
Loading…
x
Reference in New Issue
Block a user