dgtlmoon/changedetection.io · critical · OSError
Disk quota exceeded: Cannot save {label}
Error message
Disk quota exceeded: Cannot save {label} What it means
An OSError raised by save_json_atomic when the write fails with errno 122 (EDQUOT) — the filesystem or NFS/quota subsystem reports the user's disk quota was exceeded. Functionally identical to the disk-full path but caused by a quota limit rather than physical space.
Source
Thrown at changedetectionio/store/file_saving_datastore.py:159
except OSError as e:
# Cleanup temp file
if not fd_closed:
try:
os.close(fd)
except:
pass
if os.path.exists(temp_path):
try:
os.unlink(temp_path)
except:
pass
# Provide helpful error messages
if e.errno == 28: # ENOSPC
raise OSError(f"Disk full: Cannot save {label}") from e
elif e.errno == 122: # EDQUOT
raise OSError(f"Disk quota exceeded: Cannot save {label}") from e
else:
raise OSError(f"I/O error saving {label}: {e}") from e
except Exception as e:
# Cleanup temp file
if not fd_closed:
try:
os.close(fd)
except:
pass
if os.path.exists(temp_path):
try:
os.unlink(temp_path)
except:
pass
raise e
View on GitHub (pinned to 5d9c7c6da7)
Solutions
- Check your quota: quota -s or df -h <datastore-path>; raise the quota if possible
- Delete old snapshots/watch history inside the datastore directory to get back under quota
- Move the datastore to a non-quota volume and restart
- Set snapshot retention limits to prevent recurrence
Defensive patterns
Strategy: try-catch
Validate before calling
# NFS/quota environments: check quota before heavy saves import subprocess subprocess.run(['quota', '-s'], check=False) # inspect in ops tooling
Try / catch
try:
datastore.save_entity_atomic(uuid, data)
except OSError as e:
if 'Quota exceeded' in str(e):
alert_ops('datastore quota exceeded'); prune_history() Prevention
- Alert on quota usage, not just physical disk, on NFS/shared hosting
- Avoid NAS-backed datastore volumes for high-frequency watches
- Prune snapshots regularly to stay under quota
When it happens
Trigger: Saving settings or a watch entity on a quota-enabled filesystem (NFS with rpc.rquotad, shared hosting, per-user quota on ext4/xfs) and the block limit is hit during the atomic temp-file write.
Common situations: Shared-hosting or NAS-backed installs where the user's quota is smaller than the physical disk; team environments where several processes share one quota; monitoring-heavy accounts whose snapshots silently consume the quota.
Related errors
- Disk full: Cannot save {label}
- I/O error saving {label}: {e}
- Migration failed: Could not save watch {uuid}. url-watches.j
- Migration failed: {len(missing)} watch files missing: {missi
- Migration failed: Could not create changedetection.json. url
AI-assisted analysis of dgtlmoon/changedetection.io@5d9c7c6da7 (2026-08-27).
Data as JSON: /api/errors/9a65fb4a9139ade1.
Report an issue: GitHub.