# Release: 2.4.0.101 (Canary) 2026-09-11

**URL:** https://forum.duplicati.com/t/release-2-4-0-101-canary-2026-09-11/22688
**Category:** Releases
**Created:** [September 11, 2026, 5:07pm UTC](https://forum.duplicati.com/t/release-2-4-0-101-canary-2026-09-11/22688 "2026-09-11T17:07:22Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![kenkendk](https://forum.duplicati.com/user_avatar/forum.duplicati.com/kenkendk/32/5305_2.png) [@kenkendk](https://forum.duplicati.com/u/kenkendk)
#### Post date: [September 11, 2026, 5:07pm UTC](https://forum.duplicati.com/t/release-2-4-0-101-canary-2026-09-11/22688/1 "2026-09-11T17:07:23Z")

</div>

# [2.4.0.101\_canary\_2026-09-11](https://github.com/duplicati/duplicati/releases/tag/v2.4.0.101_canary_2026-09-11)

This release is a canary release intended to be used for testing.

# Fixed Linux data folder for services without a home folder

When running as a Linux service under an account with no home folder, the data folder was stored as the relative path `var/lib/Duplicati` instead of `/var/lib/Duplicati`. Relative paths are now resolved correctly, thanks @JamBalaya56562.

# Fixed sync failing on backends that cannot report quota

A backend that cannot report free space returns a negative value. The synchronization tool compared this against the required size and incorrectly concluded the destination was full, stopping the sync. The quota check now only runs when the destination actually reported a free space, thanks @JamBalaya56562.

# Fixed sync crash on duplicate remote file names

A remote listing that reported the same name twice made the synchronization tool fail with an unhelpful `ArgumentException`. It now reports which side has the duplicates and what to do about it, matching the message the backup path already produced, thanks @JamBalaya56562.

# Fixed source lost inside an excluded folder

A source folder nested inside another source, with a folder on the path between them excluded, was silently dropped from the backup. The nested source was converted to an include filter, but the containing source’s enumeration never descended into the excluded folder, so the filter was never reached. Such sources are now kept as sources instead of being converted to filters, thanks @JamBalaya56562.

# Faster consistency checks

The database consistency check queries were rewritten to avoid SQLite building automatic indexes. Depending on database size and shape, the checks are now 25-40% faster, thanks @JamBalaya56562.

# New option to prevent automatic database creation

The new `--webservice-dont-autocreate-database` option prevents the server from creating an empty database on startup. Useful when the database already exists and you want the server to fail rather than start with an empty configuration due to a misconfigured data folder.

# Fixed MS365 large email restore

Restoring large emails to an MS365 tenant previously failed because the restore path attempted to set read-only or non-nullable properties on the email creation request. Only writable properties are now sent, and null values are omitted.

# Fixed full-disk backup on Linux and macOS

The native wrapper libraries (`libc_wrapper.so`, `libSystem_wrapper.dylib`) were placed in a `runtimes` subfolder by the build but the P/Invoke loader only looked in the application folder, causing full-disk backup to fail on packaged installs. A resolver now probes both locations.

# ServerUtil command-line parsing fixes

Fixed several issues from the switch to the stable System.CommandLine package, including the `--hosturl` option not accepting URLs from the command line.

## Detailed list of changes

- Updated ngclient to version 0.0.236
- Fixed the Linux data folder being relative when the service account has no home folder, causing database paths to resolve incorrectly, thanks @JamBalaya56562
- Fixed `--quota-disable` incorrectly disabling the manual `--quota-size` quota check, thanks @JamBalaya56562
- Fixed the sync tool treating a backend that cannot report quota as having no free space, thanks @JamBalaya56562
- Fixed Google Drive shared drive backups being checked against the user’s personal quota, thanks @JamBalaya56562
- Fixed Google Drive not tracking all copies of a file with a duplicate name, causing incomplete deletes and stale reads, thanks @JamBalaya56562
- Fixed the sync tool crashing with an unhelpful error on duplicate remote file names, thanks @JamBalaya56562
- Fixed a source folder being silently dropped when nested inside another source with an excluded folder between them, thanks @JamBalaya56562
- Fixed Windows command-line argument escaping for arguments ending with backslashes, thanks @JamBalaya56562
- Fixed four server code paths accessing the database without the serialization lock, causing intermittent errors, thanks @JamBalaya56562
- Rewrote consistency check queries to avoid SQLite automatic indexes, improving performance, thanks @JamBalaya56562
- Added `--webservice-dont-autocreate-database` option to prevent starting with an empty database
- Masked sensitive information in the backup list API endpoint
- Fixed MS365 large email restore failing due to read-only properties being sent
- Fixed native wrapper library loading for full-disk backup on Linux and macOS packaged installs
- Added path argument and `--output-json` support to SourceTool `list` command
- Fixed ServerUtil `--hosturl` option not accepting URLs from the command line
- Fixed a disk with no partitions causing the Windows disk enumeration to fail, thanks @JamBalaya56562
- Fixed the `ijwhost.dll` native library being resolved as a managed reference, causing build warnings, thanks @JamBalaya56562
- Added fileset diagnostics to disruption tests to aid debugging, thanks @JamBalaya56562
- Added test for PAR2 file deletion
- Added clean database startup tests
- Added consistency check query equivalence tests, thanks @JamBalaya56562
- Added data folder locator tests, thanks @JamBalaya56562
- Added Google Drive duplicate name tests, thanks @JamBalaya56562
- Added Google Drive shared drive quota tests, thanks @JamBalaya56562
- Added nested source exclusion tests, thanks @JamBalaya56562
- Added no-free-space backend quota tests, thanks @JamBalaya56562
- Added command-line wrapping tests, thanks @JamBalaya56562
- Added VSS disk volume lookup tests, thanks @JamBalaya56562
- Improved `libc_wrapper` import name for clearer error messages
- Updated MS365 permission documentation strings
- Updated Office365 included user and group type descriptions

## Updates to ngclient

- Added a small loader on the start page to assist with slow loading
- Fixed the destination test dialog not preserving context when retrying, thanks @JamBalaya56562
- Fixed V1 destination tests not completing after error handling, thanks @JamBalaya56562

---

<div class="post-metadata">

### Author: ![Taomyn](https://forum.duplicati.com/user_avatar/forum.duplicati.com/taomyn/32/2665_2.png) [@Taomyn](https://forum.duplicati.com/u/Taomyn)
#### Post date: [September 23, 2026, 8:20am UTC](https://forum.duplicati.com/t/release-2-4-0-101-canary-2026-09-11/22688/2 "2026-09-23T08:20:51Z")

</div>

It’s been a while but my Fedora server is reporting high swap usage and again it’s Duplicati. I can’t remember where I left this topic at before, so any advice other than just restarting Duplicati each time?

```plaintext
smem -s swap -r -k | head
  PID User Command Swap USS PSS RSS
  829 root /usr/bin/duplicati-server - 3.9G 1.0G 1.0G 1.0G
  970 mysql /usr/libexec/mariadbd --bas 189.1M 290.7M 291.2M 300.1M
133915 root next-server (v16.3.0-previ 74.5M 431.6M 446.7M 462.5M
 3734 root python ./changedetection.py 50.7M 132.2M 133.5M 134.8M
289286 Tdarr /app/Tdarr_Server/rust/Tdar 36.9M 186.4M 186.5M 186.9M
 2689 apache php-fpm: pool www 27.9M 9.8M 17.3M 78.3M
61288 apache php-fpm: pool www 27.7M 9.3M 16.8M 77.4M
 2677 apache php-fpm: pool www 27.7M 9.6M 17.2M 78.7M
 4496 apache php-fpm: pool www 24.4M 10.6M 22.6M 88.4M

```

 ![image](https://forum.duplicati.com/uploads/default/original/2X/d/d869e33af6b4b4ec98b291cf3a808202962dfa10.png)

The last backup was over an hour ago at the time of writing, so not sure if Duplicati is actually doing anything as the live logs are not showing much either.

 ![image](https://forum.duplicati.com/uploads/default/original/2X/a/ab8bd29757075c672c54076cb803d645994f0d4f.png)

---

<div class="post-metadata">

### Author: ![ts678](https://forum.duplicati.com/letter_avatar_proxy/v4/letter/t/8491ac/32.png) [@ts678](https://forum.duplicati.com/u/ts678)
#### Post date: [September 25, 2026, 5:25pm UTC](https://forum.duplicati.com/t/release-2-4-0-101-canary-2026-09-11/22688/3 "2026-09-25T17:25:55Z")

</div>

I’m not sure it’s a new bug, as I’ve seen similar things before, but Duplicati sometimes gets stuck with the GUI countdown timer (5 to 1) cycling, with network request in when it ought to reattempt.

 ![image](https://forum.duplicati.com/uploads/default/original/2X/a/a0595f23751425502fd47c6dd67f9e092267cca3.png)

Dev tools in Edge shows no traffic, however netstat showed some Edge TCP. Wireshark saw

```plaintext
GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1
Host: 127.0.0.1:8101
Connection: keep-alive
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: empty
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36 Edg/153.0.0.0
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: en-US,en;q=0.9
Cookie: default-theme=ngax; default-client=ngclient

0.000420s
HTTP/1.1 404 Not Found
Content-Length: 0
Date: Fri, 25 Sep 2026 12:24:49 GMT
Server: Kestrel

```

which is apparently from my having dev tools open (and it’s typical for server to not support that).  
So I turned off dev tools and just used Wireshark, which is idling with 5 minute TrayIcon longpoll.

There’s a related (but less perpetual) problem where it seems to need to count down a few times, which is just a bit annoying. When I get back to a sleeping Duplicati tab, I like it to reactivate fast.

Once Duplicati gets into the long looping, the only way out historically has been to refresh its tab.  
Because I had two stuck this way, I turned on dev tools in one, and then used the refresh button.  
Dev tools actually started the TCP connection to give its query-in-vain, then Duplicati sent `login`

 ![image](https://forum.duplicati.com/uploads/default/original/2X/c/c073ca9f14fee9957729f12b1016609d6332ecd2.png)

is result. I usually check “Keep me logged in”, but might not have had right opportunity this time.  
Maybe this infinite retry is the result after time passes? Regardless, any words on this situation?
