-
0.9.5-beta.6
Pre-ReleaseCI / unit (8.2) (push) Has been cancelledCI / unit (8.3) (push) Has been cancelledCI / unit (8.4) (push) Has been cancelledCI / psalm (push) Has been cancelledCI / integration (mariadb, 32) (push) Has been cancelledCI / integration (mariadb, 33) (push) Has been cancelledCI / integration (mariadb, 34) (push) Has been cancelledCI / integration (mariadb, 35) (push) Has been cancelledCI / integration (pgsql, 32) (push) Has been cancelledCI / integration (pgsql, 33) (push) Has been cancelledCI / integration (pgsql, 34) (push) Has been cancelledCI / integration (pgsql, 35) (push) Has been cancelledCI / integration (sqlite, 32) (push) Has been cancelledCI / integration (sqlite, 33) (push) Has been cancelledCI / integration (sqlite, 34) (push) Has been cancelledCI / integration (sqlite, 35) (push) Has been cancelledCI / integration-targets (push) Has been cancelledCI / integration-user (32) (push) Has been cancelledCI / integration-user (33) (push) Has been cancelledCI / integration-user (34) (push) Has been cancelledCI / integration-user (35) (push) Has been cancelledCI / integration-full-restore (push) Has been cancelledreleased this
2026-10-12 15:06:12 +02:00 | 170 commits to main since this releaseBugfix release for SFTP locations and large repositories. Tested on a production instance with a
1 TB repository on a Hetzner Storage Box over SFTP: a check in 5.5 minutes, a deep check of all
316,529 blobs (815 GiB) in 11 hours, and an incremental backup in under 8 minutes.Added
- Progress of a running backup in the web interface and
occ backup:status, e.g.
"running (files) 68%". The total is the size of the previous snapshot; for a first backup it
is estimated from Nextcloud's file cache (users' files, versions and trash) and shown as
"~68%". - Edit a backup location (web interface and
occ backup:target:edit): change the password, host,
folder, connection type or name without losing its history. Before this the only option was a
new location, which starts an empty repository and, with a retention lock at the provider,
keeps paying for the old one. The new settings are only saved when they lead to the same
repository; stored passwords are never sent to the browser, and an empty password field keeps
the stored one. Administrators are notified of the change. occ backup:verifyreports how far it is every 30 seconds, andocc backup:statusshows the
progress of a running check and how the last check of each location ended. On a large
repository a check takes hours, a deep one days.
Changed
- Checking and opening a large repository over SFTP is much faster: the index files (one per
pack, 27,547 for 1 TB) are downloaded 32 at a time instead of one after the other, 114 instead
of 6 files per second to a Hetzner Storage Box (about 4 minutes instead of 77 for 1 TB). A check
of a repository with more than 256 packs also lists the pack folders (256 requests) instead of
asking for every pack. - App store listing: the author's e-mail address is shown.
- App store listing: the homepage link points to the GitHub repository instead of back to the
app store page itself. - The notification for a location without a successful backup read "No successful backup to …
since never" when there had never been one; it now reads "No successful backup to … yet".
Fixed
- 0.9.4 could not open a repository at the root of an SFTP location (empty path): its faster
SFTP reads sent their first request before phpseclib had opened the SFTP channel, which only
happens on the first SFTP call after login. Every backup then failed with "No repository at
this location". The channel is now opened first. - A check (
occ backup:verify) did not renew its hold on the location while it downloaded the
index; on a large repository that takes longer than the hold lasts, so a weekly cleanup could
have started during the check. - A long first backup could end as failed although its snapshot was complete: when its final
step took longer than the step's lease (150 s withocc backup:run), the background job took
the run over, finished it a second time and failed on the snapshot it had already recorded,
overwriting the result. The lease now lasts at least 15 minutes, a step writes the run only if
no other process wrote it since the step loaded it (in one database statement), and recording
a snapshot that is already recorded is no longer an error. occ backup:verifyon a large repository failed with "SFTP connection failed while opening
snapshots/…" or "Not found: snapshots/…". A Hetzner Storage Box drops an SFTP connection that
carried a lot of data (some 40 MB) and then stayed quiet for a few minutes, and the check went
quiet after downloading the index: it refreshed the local index cache, first in 29 minutes (a
pass over all blobs for every pack: 27,547 packs, 400,000 blobs for 1 TB), then still in more
than 6 minutes (a database transaction per pack on PostgreSQL). Nextcloud's SFTP storage keeps
using a dropped connection, on which every file looks missing. Now:- an SFTP connection that was not used for a minute is checked first, and one that turns out
to be dead after a failed request is replaced, once per request; uploads, moves and deletes
are only checked first, never repeated; - the index cache is written in one transaction (27,547 packs in 11 seconds on a test server,
against about a minute row by row); - after a check the cache holds the index files as they are: before, a blob that was in two
packs was only cached for one of them.
- an SFTP connection that was not used for a minute is checked first, and one that turns out
Package
ng_backup-0.9.5.tar.gzis the signed app store package (code-signed with the Nextcloud certificate forng_backup);.sigis its app store signature.Downloads
- Progress of a running backup in the web interface and