My Backup Was Crawling Because I Was Using Someone Else's API Quota
Description and use
Migrated a terabyte backup from OneDrive to Google Drive by creating a personal OAuth client to avoid shared quota limits, and purged the old remote to reclaim ~1 TB of space.
Problem
The OneDrive backup subscription ended, forcing a move of a terabyte of data to a Google Drive account that was using a shared OAuth client, which hit a global rate limit.
Outcome
The migration succeeded: backups now use the user’s own Google Drive quota, the restic repo identity is unchanged, and ~1 TB was reclaimed from the old remote. However, no snapshots exist yet because the seed has only uploaded 2.88 GB of ~1 TB.
Workflow
- Read existing rclone configs (GUI and CLI) and verify restic repo identity via guid = sha256(id).
- Append new Google Drive remotes to rclone.conf and update Portainer stack environment to use the new crypt remote.
- Initialize a new restic repo on Google Drive and update Backrest SetConfig to point to the new URI.
- Run the seed migration; monitor logs for RATE_LIMIT_EXCEEDED errors.
- Create a new Google Cloud project, set up OAuth consent screen as Desktop app, publish the app, and obtain client_id, client_secret, and refresh token.
- Insert the new credentials into both rclone configs and enable use_trash=false and stop_on_upload_limit=true.
- Purge the old remote to reclaim space, verifying the operation by reading the used/free space rather than exit code.
- Pause the file-sync container to confirm load average reduction and ensure network is not the bottleneck.
- Verify that the new repo has the same repo id/guid and that snapshots will be created once the seed completes.
- Monitor the seed progress and confirm that the first snapshot lands before considering the backup complete.
Evidence
The call came in the least convenient way: the OneDrive account holding my nightly backups had no subscription any more, and I had a 1.5-year Google subscription sitting unused.
Two rclone configs, which is the kind of detail that bites: the GUI config that Backrest (the restic front end) uses, plus a separate stale CLI copy that a cron job or a human shell had been using at some point.
'Read requests per minute' ... reason: RATE_LIMIT_EXCEEDED consumer: projects/202264815644 <- not my project quota_limit_value: 840000
There is exactly one real fix: stop using the shared client and bring your own. That means a Google Cloud project, an OAuth consent screen, and a credential.
The old remote reported an error — itemNotFound — and the space came back anyway: Used: 1.012 TiB -> 3.800 GiB Free: ~0 -> 1.007 TiB
- Record date: 2026-10-25T05:11:29.597Z