duplicati/duplicati · error · FileMissingException
File not found: {remotename}
Error message
File not found: {remotename} What it means
Thrown by DrimeBackend.GetAsync when FindFileEntryAsync returns null for the requested remotename. Duplicati looks up the file entry (by name, via the file cache populated by listing) before issuing a download-by-hash; if no entry matches, it raises FileMissingException. This is the standard 'file does not exist on the remote backend' signal that Duplicati's core treats as a recoverable/expected condition.
Source
Thrown at Duplicati/Library/Backend/DrimeCloud/DrimeBackend.cs:401
// Update cache
cache[result.FileEntry.Name] = new CachedFileEntry(result.FileEntry.Id, result.FileEntry.Hash, result.FileEntry.File_Size);
}
/// <inheritdoc/>
public async Task GetAsync(string remotename, string filename, CancellationToken cancelToken)
{
await using var fs = File.Create(filename);
await GetAsync(remotename, fs, cancelToken).ConfigureAwait(false);
}
/// <inheritdoc/>
public async Task GetAsync(string remotename, Stream stream, CancellationToken cancelToken)
{
var client = await GetClientAsync(cancelToken).ConfigureAwait(false);
var entry = await FindFileEntryAsync(remotename, cancelToken).ConfigureAwait(false);
if (entry == null)
throw new FileMissingException($"File not found: {remotename}");
// Download by hash
var url = $"file-entries/download/{entry.Hash}";
var response = await Utility.Utility.WithTimeout(_timeouts.ShortTimeout, cancelToken,
ct => client.SendAsync(new HttpRequestMessage(HttpMethod.Get, url),
HttpCompletionOption.ResponseHeadersRead, ct)).ConfigureAwait(false);
await EnsureSuccessStatusCodeAsync(response).ConfigureAwait(false);
await using var responseStream = await Utility.Utility.WithTimeout(_timeouts.ShortTimeout, cancelToken, ct =>
response.Content.ReadAsStreamAsync(ct)).ConfigureAwait(false);
using var timeoutStream = stream.ObserveWriteTimeout(_timeouts.ReadWriteTimeout);
await responseStream.CopyToAsync(timeoutStream, cancelToken).ConfigureAwait(false);
}
/// <inheritdoc/>View on GitHub (pinned to 3f348be3e3)
Solutions
- If this occurs during a restore, run a backup or 'list' first so the file cache is refreshed and confirm the file is actually expected to exist.
- If the file was legitimately deleted remotely, run Duplicati's repair/purge-broken-files to reconcile the local database with the backend.
- Ensure only one Duplicati task targets this destination concurrently to avoid cross-deletion.
- If the file should exist, verify the target folder path option is correct and the file sits under that path.
Defensive patterns
Strategy: validation
Validate before calling
// Refresh the file cache, then check existence before GetAsync.
var cache = await backend.GetFileCacheAsync(cancelToken); // or list first
if (!cache.ContainsKey(remotename))
return; // or skip / mark missing Type guard
static bool FileExists(IReadOnlyDictionary<string, CachedFileEntry> cache, string remotename)
=> cache.TryGetValue(remotename, out var entry) && entry.Id != 0; Try / catch
try { await backend.GetAsync(remotename, filename, cancelToken); }
catch (FileMissingException) { /* expected: file already purged, reconcile db */ } Prevention
- Run a list/test before restore to refresh the cache.
- Avoid concurrent Duplicati jobs on one destination.
- Use Duplicati purge-broken-files after deletions to keep the db in sync.
When it happens
Trigger: Triggered when GetAsync is called for a remotename that has no matching entry in the Drime Cloud folder, i.e. FindFileEntryAsync(remotename) yields null. Common during restore of a file that was deleted, during prune operations on already-removed blocks, or when the local file cache is stale relative to the remote folder.
Common situations: Restoring or deleting a dblock/dlist block that another run already purged; concurrent Duplicati instances pruning the same destination; the file was removed via the Drime Cloud web UI; cache desync after a failed earlier run.
Related errors
- File {remotename} not found in Movistar Cloud.
- DatabaseNotFound
- Invalid file size {0}, expected {1} for {2}
- Damaged or corrupted file, sha256 mismatch for {0}
- Damaged or corrupted file, md5 mismatch for {0}
AI-assisted analysis of duplicati/duplicati@3f348be3e3 (2026-08-13).
Data as JSON: /api/errors/0f7a864a6dd49304.
Report an issue: GitHub.