Google Drive storage gets bigger after deleting Backups

Bug Summary

I’ve noticed that Google Drive storage gets bigger with around 100MB anytime I delete a backup from LocalWP > Backups
Is that a normal behavior? Shouldn’t it get smaller?

Steps to reproduce

Open LocalWP, start a website. Go to Backups. Delete a backup.

Environment Info

Describe your environment.

  • Linux Mint 22.2 Zara
  • nginx-1.26.1+3
    php-8.3.30+1
    mysql 8.4.0
  • LocalWP Version 10.1.2+7004

local-lightning.log (970.4 KB)

local-logs.zip (1.1 MB)

There’s a mistake in my post but I can’t edit it anymore. Actually my Google Drive storage doesn’t get bigger with each deleted backup but smaller or vice-versa/the occupied space gets bigger :slight_smile:

Also, the “Steps to reproduce” content should actually be:
Check Google Drive storage and note the occupied space.
Open Local, go to Backups. Delete a backup.
Check Google Drive storage occupied space again - it has increased instead of decreasing.

I did some digging on my end and I think I might have found the likely cause, though I’m not 100% sure.

Cloud Backups uses Restic under the hood, which does incremental, deduplicated backups - each “backup” is really a snapshot referencing shared data blocks (packs), not a standalone archive. Deleting a snapshot in Restic normally requires two separate steps:

forget - marks the snapshot as removed from the index, but does NOT free physical space, since the underlying data blocks may still be referenced by other snapshots
prune - this is the step that actually removes unreferenced data. It also works by writing new repacked pack files before deleting the old ones, so storage usage can temporarily increase during this process.

My suspicion (unconfirmed) is that when I delete a backup from Local, only forget is being run without a full/completed prune afterwards. That would explain why storage keeps growing instead of shrinking - the index and metadata grow slightly with each deletion, but the old data underneath never actually gets removed.

Could someone confirm whether this is indeed what’s happening, and if so, is there a fix planned or an ETA for it? Thanks!

Hi @lucianpascu!

I’m seeing a lot of errors in your Local Logs that indicate other problems might be preventing the Local Backup functions from working normally.

{"class":"BackupService","error":"Command failed: %%resourcesPath%%/bin/rclone/linux/rclone copy googleDrive:LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b/ /tmp/metadata-K37kkhOFl-4ea4a152-abe6-4083-8e32-f78619e2eb1b-111941624453527003528\n2026/05/12 16:51:49 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:51:49 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 16:51:50 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:51:50 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 16:51:50 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:51:50 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 16:51:50 NOTICE: Failed to copy: directory not found\n","level":"warn","message":"Failed to copy metadata from remote","repoId":"4ea4a152-abe6-4083-8e32-f78619e2eb1b","thread":"main","timestamp":"2026-05-12T13:51:50.692Z"}
{"class":"BackupService","error":"Command failed: %%resourcesPath%%/bin/rclone/linux/rclone copy googleDrive:LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b/ /tmp/metadata-K37kkhOFl-4ea4a152-abe6-4083-8e32-f78619e2eb1b-111941624453527003528\n2026/05/12 16:52:25 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:52:25 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 16:52:26 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:52:26 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 16:52:26 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:52:26 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 16:52:26 NOTICE: Failed to copy: directory not found\n","level":"warn","message":"Failed to copy metadata from remote","repoId":"4ea4a152-abe6-4083-8e32-f78619e2eb1b","thread":"main","timestamp":"2026-05-12T13:52:26.451Z"}
{"class":"BackupService","error":"Command failed: %%resourcesPath%%/bin/rclone/linux/rclone copy googleDrive:LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b/ /tmp/metadata-K37kkhOFl-4ea4a152-abe6-4083-8e32-f78619e2eb1b-111941624453527003528\n2026/05/12 16:55:03 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:55:03 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 16:55:03 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:55:03 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 16:55:03 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:55:03 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 16:55:03 NOTICE: Failed to copy: directory not found\n","level":"warn","message":"Failed to copy metadata from remote","repoId":"4ea4a152-abe6-4083-8e32-f78619e2eb1b","thread":"main","timestamp":"2026-05-12T13:55:03.586Z"}
{"class":"BackupService","error":"Command failed: %%resourcesPath%%/bin/rclone/linux/rclone copy googleDrive:LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b/ /tmp/metadata-K37kkhOFl-4ea4a152-abe6-4083-8e32-f78619e2eb1b-111941624453527003528\n2026/05/12 16:57:04 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:57:04 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 16:57:04 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:57:04 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 16:57:04 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:57:04 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 16:57:04 NOTICE: Failed to copy: directory not found\n","level":"warn","message":"Failed to copy metadata from remote","repoId":"4ea4a152-abe6-4083-8e32-f78619e2eb1b","thread":"main","timestamp":"2026-05-12T13:57:04.622Z"}
{"class":"BackupService","error":"Command failed: %%resourcesPath%%/bin/rclone/linux/rclone copy googleDrive:LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b/ /tmp/metadata-K37kkhOFl-4ea4a152-abe6-4083-8e32-f78619e2eb1b-111941624453527003528\n2026/05/12 16:58:41 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:58:41 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 16:58:41 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:58:41 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 16:58:41 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:58:41 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 16:58:41 NOTICE: Failed to copy: directory not found\n","level":"warn","message":"Failed to copy metadata from remote","repoId":"4ea4a152-abe6-4083-8e32-f78619e2eb1b","thread":"main","timestamp":"2026-05-12T13:58:41.863Z"}
{"class":"BackupService","error":"Command failed: %%resourcesPath%%/bin/rclone/linux/rclone copy googleDrive:LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b/ /tmp/metadata-K37kkhOFl-4ea4a152-abe6-4083-8e32-f78619e2eb1b-111941624453527003528\n2026/05/12 16:59:28 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:59:28 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 16:59:28 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:59:28 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 16:59:29 ERROR : Google drive root 'LocalBackups/metadata/4ea4a152-abe6-4083-8e32-f78619e2eb1b': error reading source root directory: directory not found\n2026/05/12 16:59:29 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 16:59:29 NOTICE: Failed to copy: directory not found\n","level":"warn","message":"Failed to copy metadata from remote","repoId":"4ea4a152-abe6-4083-8e32-f78619e2eb1b","thread":"main","timestamp":"2026-05-12T13:59:29.214Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:05 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:05 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:05 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:05 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:06 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:06 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:06 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:06.228Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:07 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:07 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:08 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:08 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:08 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:08 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:08 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:08.804Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:15 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:15 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:16 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:16 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:16 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:16 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:16 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:16.536Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:18 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:18 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:18 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:18 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:18 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:18 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:18 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:18.845Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:20 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:20 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:20 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:20 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:21 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:21 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:21 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:21.298Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:22 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:22 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:23 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:23 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:23 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:23 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:23 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:23.483Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:01:24 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:24 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:25 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:25 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:25 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:01:25 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:01:25 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:01:25.544Z"}
{"class":"OAuthLoopbackServer","level":"error","message":"Failed to start OAuth loopback session OAuth callback timeout","stack":"Error: OAuth callback timeout\n    at Timeout.<anonymous> (%%appPath%%/main/oauth/loopbackServer/index.js:199:57)\n    at listOnTimeout (node:internal/timers:588:17)\n    at process.processTimers (node:internal/timers:523:7)","thread":"main","timestamp":"2026-05-12T14:04:06.236Z"}
{"class":"GoogleDriveOAuthHandler","level":"error","message":"Google Drive OAuth authentication failed OAuth callback timeout","stack":"Error: OAuth callback timeout\n    at Timeout.<anonymous> (%%appPath%%/main/oauth/loopbackServer/index.js:199:57)\n    at listOnTimeout (node:internal/timers:588:17)\n    at process.processTimers (node:internal/timers:523:7)","thread":"main","timestamp":"2026-05-12T14:04:06.239Z"}
{"class":"GoogleDriveService","level":"error","message":"Google Drive authentication failed OAuth callback timeout","stack":"Error: OAuth callback timeout\n    at Timeout.<anonymous> (%%appPath%%/main/oauth/loopbackServer/index.js:199:57)\n    at listOnTimeout (node:internal/timers:588:17)\n    at process.processTimers (node:internal/timers:523:7)","thread":"main","timestamp":"2026-05-12T14:04:06.239Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:enabled-providers","stringifiedCallback":"(siteId) => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(yield (0, hubQueries_1.getEnabledBackupProviders)(), siteId);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.CLONE_BACKUP: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, siteId);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.487Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:backup-site","stringifiedCallback":"(siteId, provider, description) => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    const siteJSON = LocalMain.SiteData.getSite(siteId);\n                    const site = new Local.Site(siteJSON);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(yield (0, backupService_1.createBackup)(site, provider, description), siteId);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.IPCASYNC_EVENTS: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, siteId);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.487Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:provider-snapshots","stringifiedCallback":"(siteId, provider, pageOffset) => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    const site = (0, utils_1.getSiteDataFromDisk)(siteId);\n                    const backupRepo = (yield (0, hubQueries_1.getBackupReposByProviderID)(provider)).find(({ hash }) => hash === site.localBackupRepoID);\n                    if (!backupRepo) {\n                        return [];\n                    }\n                    const result = yield (0, hubQueries_1.getBackupSnapshotsByRepo)(backupRepo.id, SNAPSHOTS_PAGE_LIMIT, pageOffset);\n                    // Hub returns the \"config\" data as a single string, so we need to convert back to object\n                    result.snapshots.forEach((snapshot) => {\n                        snapshot.configObject = JSON.parse(snapshot.config);\n                        snapshot.siteId = siteId;\n                    });\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(result, siteId);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.GET_SITE_PROVIDER_BACKUPS: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, siteId);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.487Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:restore-backup","stringifiedCallback":"(siteId, provider, snapshotID) => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    const site = (0, utils_1.getSiteDataFromDisk)(siteId);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(yield (0, restoreService_1.restoreFromBackup)({ site, provider, snapshotID }), siteId);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.RESTORE_BACKUP: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, siteId);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.487Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:restore-site-clone","stringifiedCallback":"(baseSite, newSiteName, provider, snapshotHash) => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(yield (0, cloneFromBackupService_1.cloneFromBackup)({ baseSite, newSiteName, provider, snapshotHash }), baseSite.id);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.CLONE_BACKUP: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, baseSite.id);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.488Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:check-for-duplicate-sitename","stringifiedCallback":"(siteName) => __awaiter(this, void 0, void 0, function* () { return yield (0, checkForDuplicateSiteName_1.checkForDuplicateSiteName)(siteName); })","thread":"main","timestamp":"2026-05-12T14:05:16.488Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:edit-backup-description","stringifiedCallback":"(_a) => __awaiter(this, [_a], void 0, function* ({ metaData, snapshot, siteId }) {\n                try {\n                    const result = yield (0, hubQueries_1.updateBackupSnapshot)({\n                        metaData,\n                        snapshotID: snapshot.id,\n                        resticSnapshotHash: snapshot.hash,\n                        status: 'complete',\n                    });\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(Object.assign(Object.assign({}, result), { metaData }), siteId);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.EDIT_BACKUP_DESCRIPTON: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, siteId);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.488Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:get-all-sites-for-user","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () {\n                // get available providers\n                const providers = yield (0, hubQueries_1.getEnabledBackupProviders)();\n                // get all repos for each active provider\n                const repos = yield Promise.all(providers.map((provider) => __awaiter(this, void 0, void 0, function* () { return yield (0, hubQueries_1.getBackupReposByProviderID)(provider.id); })));\n                // flatten array\n                const allRepos = repos.reduce((acc, curVal) => acc.concat(curVal), []);\n                // get all sites for all repos\n                const backupSites = yield Promise.all(allRepos.map((repo) => __awaiter(this, void 0, void 0, function* () { return yield (0, hubQueries_1.getBackupSitesByRepoID)(repo.hash); })));\n                // flatten array\n                const allBackupSites = backupSites.reduce((acc, curVal) => acc.concat(curVal), []);\n                return allBackupSites;\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.488Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:get-repos-by-site-id","stringifiedCallback":"(siteID) => __awaiter(this, void 0, void 0, function* () { return yield (0, hubQueries_1.getBackupReposBySiteID)(siteID); })","thread":"main","timestamp":"2026-05-12T14:05:16.488Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:get-enabled-providers-multi-machine","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    return yield (0, hubQueries_1.getEnabledBackupProviders)();\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.MULTI_MACHINE_GET_AVAILABLE_PROVIDERS: ${error.toString()}`);\n                    return error;\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.488Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:get-all-snapshots-for-site","stringifiedCallback":"(siteUUID, provider, requestedPage) => __awaiter(this, void 0, void 0, function* () {\n                const repos = yield (0, hubQueries_1.getBackupReposByProviderID)(provider);\n                const paginationNumber = requestedPage !== null && requestedPage !== void 0 ? requestedPage : 0;\n                let repoID;\n                // check all repos for the given provider\n                // find the repo that matches the siteUUID\n                // set the repoID so we can query snapshots by repo\n                repos.forEach((repo) => {\n                    if (repo.hash === siteUUID) {\n                        repoID = repo.id;\n                    }\n                });\n                if (repoID) {\n                    const snapshots = yield (0, hubQueries_1.getBackupSnapshotsByRepo)(repoID, SNAPSHOTS_PAGE_LIMIT, paginationNumber);\n                    // Hub returns the \"config\" data as a single string, so we need to convert back to object\n                    snapshots.snapshots.forEach((snapshot) => {\n                        snapshot.configObject = JSON.parse(snapshot.config);\n                    });\n                    return snapshots;\n                }\n                return [];\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.489Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:should-load-promo-banner","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    return yield LocalMain.UserData.get(constants_1.SHOW_CLOUD_BACKUPS_PROMO_BANNER);\n                }\n                catch (e) {\n                    // noop\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.489Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:remove-promo-banner","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () { return yield LocalMain.UserData.remove(constants_1.SHOW_CLOUD_BACKUPS_PROMO_BANNER); })","thread":"main","timestamp":"2026-05-12T14:05:16.489Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:open-file-at-path","stringifiedCallback":"(path) => __awaiter(this, void 0, void 0, function* () { return yield electron_1.shell.openPath(path); })","thread":"main","timestamp":"2026-05-12T14:05:16.489Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:uninstall-addon","stringifiedCallback":"(addonSlug) => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    const addon = addonLoader.loadedAddons.find(a => a.slug === addonSlug);\n                    logger.info(`Uninstalling addon: ${addonSlug}`);\n                    if (!addon) {\n                        throw new Error(`Addon ${addonSlug} not found`);\n                    }\n                    LocalMain.sendIPCEvent('addonInstallerService:uninstall', addon);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)({ success: true }, null);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.UNINSTALL_ADDON: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, null);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.489Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:migrate-start","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    if ((0, migrationService_1.isMigrationInProgress)()) {\n                        throw new Error('Migration is already running');\n                    }\n                    logger.info('Starting backup migration...');\n                    const result = yield (0, migrationService_1.migrateBackups)();\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)(result, null);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.MIGRATE_BACKUPS_START: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, null);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.489Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:migrate-status","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    const migrated = yield (0, migrationService_1.hasMigrationCompleted)();\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)({ migrated }, null);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.MIGRATE_BACKUPS_STATUS: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, null);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.490Z"}
{"class":"addIpcAsyncListener","level":"warn","message":"Duplicate callback appears to be getting added to backups:migrate-cancel","stringifiedCallback":"() => __awaiter(this, void 0, void 0, function* () {\n                try {\n                    logger.info('Migration cancel requested');\n                    yield (0, migrationService_1.cancelMigration)();\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncResult)({ cancelled: true }, null);\n                }\n                catch (error) {\n                    logger.error(`Error - IPCASYNC_EVENTS.MIGRATE_BACKUPS_CANCEL: ${error.toString()}`);\n                    return (0, createIpcAsyncResponse_1.createIpcAsyncError)(error, null);\n                }\n            })","thread":"main","timestamp":"2026-05-12T14:05:16.490Z"}
{"class":"SiteProvisionerService","level":"error","message":"Unable to provision site.","stack":"Error: Command failed: %%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysqld --defaults-file=%%site.runData%%/conf/mysql/my.cnf --initialize-insecure\n%%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory\n\n    at genericNodeError (node:internal/errors:983:15)\n    at wrappedFn (node:internal/errors:537:14)\n    at ChildProcess.exithandler (node:child_process:417:12)\n    at ChildProcess.emit (node:events:519:28)\n    at maybeClose (node:internal/child_process:1101:16)\n    at Socket.<anonymous> (node:internal/child_process:456:11)\n    at Socket.emit (node:events:519:28)\n    at Pipe.<anonymous> (node:net:346:12)","thread":"main","timestamp":"2026-05-12T14:05:16.576Z"}
{"eventId":"7d086378f20b41a195d89d370ce7c31d","level":"warn","message":"Unhandled Rejection.","p":{},"reason":{"cmd":"%%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysqld --defaults-file=%%site.runData%%/conf/mysql/my.cnf --initialize-insecure","code":127,"killed":false,"signal":null},"thread":"main","timestamp":"2026-05-12T14:06:48.313Z"}
{"class":"BackupService","error":{"code":3,"name":"ExecError","stderr":"2026/05/12 17:07:00 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:07:00 ERROR : Attempt 1/3 failed with 1 errors and: directory not found\n2026/05/12 17:07:00 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:07:00 ERROR : Attempt 2/3 failed with 1 errors and: directory not found\n2026/05/12 17:07:01 ERROR : Google drive root 'LocalBackups/metadata': error reading source root directory: directory not found\n2026/05/12 17:07:01 ERROR : Attempt 3/3 failed with 1 errors and: directory not found\n2026/05/12 17:07:01 NOTICE: Failed to copy: directory not found\n","stdout":""},"level":"warn","message":"Failed to fetch metadata for provider googleDrive, account 111941624453527003528","thread":"main","timestamp":"2026-05-12T14:07:01.129Z"}
{"eventId":"c12187e2e60e4ede9f4010ee798b0942","level":"warn","message":"Unhandled Rejection.","p":{},"reason":{},"thread":"main","timestamp":"2026-05-12T14:08:22.909Z"}
{"level":"warn","linuxEdition":{"codename":"zara","dist":"Linux Mint","os":"linux","release":"22.2"},"localChannel":"stable","localVersion":"10.1.0+6912","message":"Electron Event ready","osArch":"x64","osPlatform":"linux","osRelease":"6.17.0-23-generic","timestamp":"2026-05-12T14:08:23.041Z","windowsEdition":null}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:33.968701Z 0 [System] [MY-015015] [Server] MySQL Server - start.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.084Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.082164Z 0 [System] [MY-010116] [Server] %%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysqld (mysqld 8.4.0) starting as process 54134","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.084Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.083240Z 0 [Warning] [MY-013243] [Server] --character-set-server: The character set UTF8MB3 is deprecated and will be removed in a future release. Please consider using UTF8MB4 instead.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.084Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.088344Z 0 [Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=201326592. Please use innodb_redo_log_capacity instead.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.088Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.089200Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.089Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.274219Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.274Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.574816Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.576Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.574948Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.577Z"}
{"class":"Process","level":"warn","message":"2026-05-12T14:09:34.620759Z 0 [System] [MY-010931] [Server] %%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysqld: ready for connections. Version: '8.4.0'  socket: '%%site.runData%%/mysql/mysqld.sock'  port: 10003  MySQL Community Server - GPL.","process":"mysql","thread":"main","timestamp":"2026-05-12T14:09:34.621Z"}
{"level":"error","message":"Error setting up MySQL user","service":"mysql","serviceBinVersion":"8.4.0","stack":"Error: Command failed: %%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysql --password= -e ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';\n%%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory\n\n    at genericNodeError (node:internal/errors:983:15)\n    at wrappedFn (node:internal/errors:537:14)\n    at ChildProcess.exithandler (node:child_process:417:12)\n    at ChildProcess.emit (node:events:519:28)\n    at maybeClose (node:internal/child_process:1101:16)\n    at Socket.<anonymous> (node:internal/child_process:456:11)\n    at Socket.emit (node:events:519:28)\n    at Pipe.<anonymous> (node:net:346:12)","thread":"main","timestamp":"2026-05-12T14:09:35.337Z"}
{"level":"error","message":"Error creating database.","service":"mysql","serviceBinVersion":"8.4.0","stack":"Error: Command failed: %%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysql -e CREATE DATABASE local;\n%%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory\n\n    at genericNodeError (node:internal/errors:983:15)\n    at wrappedFn (node:internal/errors:537:14)\n    at ChildProcess.exithandler (node:child_process:417:12)\n    at ChildProcess.emit (node:events:519:28)\n    at maybeClose (node:internal/child_process:1101:16)\n    at Socket.<anonymous> (node:internal/child_process:456:11)\n    at Socket.emit (node:events:519:28)\n    at Pipe.<anonymous> (node:net:346:12)","thread":"main","timestamp":"2026-05-12T14:09:35.345Z"}
{"class":"SiteProvisionerService","level":"error","message":"Unable to provision site.","stack":"Error: Command failed: %%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysql -e CREATE DATABASE local;\n%%userDataPath%%/lightning-services/mysql-8.4.0/bin/linux/bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory\n\n    at genericNodeError (node:internal/errors:983:15)\n    at wrappedFn (node:internal/errors:537:14)\n    at ChildProcess.exithandler (node:child_process:417:12)\n    at ChildProcess.emit (node:events:519:28)\n    at maybeClose (node:internal/child_process:1101:16)\n    at Socket.<anonymous> (node:internal/child_process:456:11)\n    at Socket.emit (node:events:519:28)\n    at Pipe.<anonymous> (node:net:346:12)","thread":"main","timestamp":"2026-05-12T14:09:35.371Z"}

LocalWP can’t find critical libraries:

libaio.so.1: cannot open shared object file
libncurses.so.5: cannot open shared object file

These are needed for MySQL to run properly. Even though you’re on Linux Mint 22.2, these libraries might be missing or outdated.

Step 1: Install Missing Libraries

Run these commands in your terminal:

# Update package manager
sudo apt update

# Install missing libraries
sudo apt install libaio1 libncurses5

# Verify installation
ldconfig -p | grep libaio
ldconfig -p | grep libncurses

Google Drive OAuth Timeouts

Your logs show repeated failures:

Google Drive OAuth authentication failed - OAuth callback timeout
Failed to fetch metadata for provider googleDrive

Try re-authenticating your Google Drive:

  1. In LocalWP, go to Backups
  2. Find your Google Drive provider and click the settings/gear icon
  3. Sign out completely
  4. Sign back in and grant LocalWP full Drive access

There might be some other investigation and troubleshooting necessary after this but we’ll start with those and go from there!

Thanks for looking into this. The libaio.so.1 and libncurses.so.5 errors you saw in that log are from an old entry (2026-05-12) which were already fixed.

( libncurses.so.5 was already present on my system.
libaio.so.1 was missing because Ubuntu 24-based distros renamed the package to libaio1t64 (time64 transition); I created a symlink (libaio.so.1 → libaio.so.1t64) and ran ldconfig.
)

I just re-tested by running mysqld --initialize-insecure directly with the bundled 8.4.0 binary and it completes with no shared library errors.

In regards to your other mentions / Google Drive OAuth Timeouts, these are old errors which were fixed in the past.

Here’s a recent log that shows no errors when I manually create a snapshot in LocalWp.

{"class":"HttpGateway","ipv6ProbeTimeoutMs":12000,"level":"debug","message":"Network preference: probing IPv6 first for https://getflywheel.github.io/local-lightning-services/site-services-v2.json","thread":"main","timestamp":"2026-09-14T22:14:23.596Z"}
{"level":"info","message":"Linux Paths","service":"mysql","serviceBinVersion":"8.4.0","thread":"main","timestamp":"2026-09-14T22:15:39.617Z"}
{"level":"info","message":"Electron Event quit","timestamp":"2026-09-14T22:22:40.345Z"}
{"class":"DropboxService","count":0,"level":"debug","message":"Loaded Dropbox accounts","thread":"main","timestamp":"2026-09-14T22:30:33.862Z"}
{"class":"GoogleDriveOAuthHandler","level":"info","message":"Google Drive OAuth handler initialized with loopback authentication","thread":"main","timestamp":"2026-09-14T22:30:33.862Z"}
{"class":"GoogleDriveService","count":1,"level":"debug","message":"Loaded Google Drive accounts","thread":"main","timestamp":"2026-09-14T22:30:33.862Z"}
{"class":"RouterService","confPath":"%%router.runPath%%/nginx/conf","domain":"testsite2.test","level":"info","message":"Adding site to router","runPath":"%%router.runPath%%/nginx","siteId":"gIPaQO1oj","thread":"main","timestamp":"2026-09-14T22:39:04.387Z"}
{"class":"RouterService","confFilePath":"%%router.runPath%%/nginx/conf/route.testsite2.test.conf","domain":"testsite2.test","level":"info","message":"Site nginx config written","siteId":"gIPaQO1oj","thread":"main","timestamp":"2026-09-14T22:39:04.388Z"}
{"class":"X509CertService","level":"debug","message":"testsite2.test.key already exists. Skipping certificate creation.","thread":"main","timestamp":"2026-09-14T22:39:04.388Z"}
{"class":"RouterService","confPath":"%%router.runPath%%/nginx/conf","domain":"testsite1.test","level":"info","message":"Adding site to router","runPath":"%%router.runPath%%/nginx","siteId":"bJ_xDPgbL","thread":"main","timestamp":"2026-09-14T22:39:04.389Z"}
{"class":"RouterService","confFilePath":"%%router.runPath%%/nginx/conf/route.testsite1.test.conf","domain":"testsite1.test","level":"info","message":"Site nginx config written","siteId":"bJ_xDPgbL","thread":"main","timestamp":"2026-09-14T22:39:04.389Z"}
{"class":"X509CertService","level":"debug","message":"testsite1.test.key already exists. Skipping certificate creation.","thread":"main","timestamp":"2026-09-14T22:39:04.389Z"}
{"class":"ConfigTemplatesService","destDir":"%%site.runData%%/conf/php","level":"info","message":"compileConfigTemplates","templatesDir":"/home/testuser/Local Sites/testsite1/conf/php","templatesDirExists":true,"thread":"main","timestamp":"2026-09-14T22:39:02.503Z"}
{"class":"ConfigTemplatesService","destDir":"%%site.runData%%/conf/php","level":"info","message":"compileConfigTemplates","templatesDir":"/home/testuser/Local Sites/testsite2/conf/php","templatesDirExists":true,"thread":"main","timestamp":"2026-09-14T22:39:05.479Z"}
{"class":"RcloneClient","level":"info","message":"Creating Rclone config file for account 1234test","operationId":"491aa84f-3421-4bb2-8396-db6be923a9bf","timestamp":"2026-09-14T22:39:39.651Z"}
{"class":"OAuthTokenManager","level":"debug","message":"Refreshing tokens for account 1234test","provider":"Google Drive","thread":"main","timestamp":"2026-09-14T22:39:39.654Z"}
{"class":"OAuthTokenManager","level":"debug","message":"Tokens refreshed successfully for account 1234test","provider":"Google Drive","thread":"main","timestamp":"2026-09-14T22:39:39.886Z"}
{"class":"BackupService","level":"info","message":"Copying metadata from remote: googleDrive:LocalBackups/metadata/a370654b-beb1-497e-b973-1d95bcd48199/ to /tmp/metadata-gIPaQO1oj-a370654b-beb1-497e-b973-1d95bcd48199-1234test","thread":"main","timestamp":"2026-09-14T22:39:39.891Z"}
{"class":"BackupService","level":"info","message":"Copying metadata from remote: googleDrive:LocalBackups/metadata/d5fca28a-f69b-40c1-9706-a8d10529c984/ to /tmp/metadata-bJ_xDPgbL-d5fca28a-f69b-40c1-9706-a8d10529c984-1234test","thread":"main","timestamp":"2026-09-14T22:39:55.905Z"}
{"class":"BackupService","level":"info","message":"Ensuring site is running","siteId":"bJ_xDPgbL","thread":"main","timestamp":"2026-09-14T22:40:03.167Z"}
{"class":"BackupService","level":"info","message":"Site is already running","siteId":"bJ_xDPgbL","thread":"main","timestamp":"2026-09-14T22:40:03.167Z"}
{"class":"BackupService","level":"info","message":"Starting to backup with googleDrive","thread":"main","timestamp":"2026-09-14T22:40:03.168Z"}
{"class":"GoogleDriveService","count":1,"level":"debug","message":"Loaded Google Drive accounts","thread":"main","timestamp":"2026-09-14T22:40:03.169Z"}
{"class":"GoogleDriveService","level":"info","message":"Fetching Google Drive account details for 1234test","thread":"main","timestamp":"2026-09-14T22:40:03.169Z"}
{"class":"GoogleDriveService","level":"info","message":"Current accounts: \[{"id":"1234test","email":"test@gmail.com","displayName":"TestSite2"}\]","thread":"main","timestamp":"2026-09-14T22:40:03.169Z"}
{"class":"GoogleDriveService","level":"info","message":"Found account: {"id":"1234test","email":"test@gmail.com","displayName":"TestSite2"}","thread":"main","timestamp":"2026-09-14T22:40:03.169Z"}
{"accountId":"1234test","class":"BackupService","hadExistingId":true,"level":"info","message":"Ensuring restic repo exists","provider":"googleDrive","resticRepoId":"d5fca28a-f69b-40c1-9706-a8d10529c984","siteId":"bJ_xDPgbL","thread":"main","timestamp":"2026-09-14T22:40:03.170Z"}
{"class":"RcloneClient","level":"info","message":"Creating Rclone config file for account 1234test","operationId":"3e55aa76-e037-4d72-b808-8c8502f49517","timestamp":"2026-09-14T22:40:03.171Z"}
{"class":"BackupService","level":"info","message":"Restic repo already exists remotely","resticRepoId":"d5fca28a-f69b-40c1-9706-a8d10529c984","thread":"main","timestamp":"2026-09-14T22:40:11.870Z"}
{"class":"BackupService","level":"warn","message":"Creating database dump...","thread":"main","timestamp":"2026-09-14T22:40:11.873Z"}
{"class":"BackupService","level":"warn","message":"Database dump created successfully","thread":"main","timestamp":"2026-09-14T22:40:19.695Z"}
{"class":"BackupService","level":"warn","message":"Creating backup with restic...","thread":"main","timestamp":"2026-09-14T22:40:19.695Z"}
{"class":"BackupService","level":"info","message":"Metadata written to outbox: %%userDataPath%%/backups/metadata/outbox/googleDrive/1234test/d5fca28a-f69b-40c1-9706-a8d10529c984/snapshot-ece51b84fd8407c6ce427f078e7aa934dd919585fc94d3481a62017f8cf3bcad.json","thread":"main","timestamp":"2026-09-14T22:40:40.941Z"}
{"class":"BackupService","level":"info","message":"Backup finished!","thread":"main","timestamp":"2026-09-14T22:40:44.303Z"}

Thanks for the report, @lucianpascu.

So far, I can’t reproduce this. Local does already pass --prune to forget, so it should scrub old files after you delete a backup.

I verified this by making a backup and checking the size of Local’s backup folder in Google Drive:

❯ rclone size gdrive:LocalBackups
Total objects: 158
Total size: 411.149 MiB (431120853 Byte)

Then I deleted the same backup in Local and checked the size again:

❯ rclone size gdrive:LocalBackups
Total objects: 151
Total size: 374.018 MiB (392186714 Byte)

Size and object count both decrease as expected.

Depending on how you’re measuring space, caching and the time when you check storage could both affect the value you’re seeing. If you continue to see increases specifically for the LocalBackups folder and it doesn’t go down after waiting, please let us know. It should not increase after deletions.