Getting the "metadata not found in archive, no files restored" error I have a ssd primary drive with a soft symlink to another drive for all home folders. The ~/.cache/deja-dup/metadata exists on that second drive. Questions: For duplicity does archiving a folder under its symlinked and real location cause clashing? Does duplicity it back it up twice? Is duplicity still executing when deja-dup goes to delete the metadata folder. Since this is async processing in deja. Test: Ran deja from commad line to reproduce error. Here is how to get the command args and errors from deja. export DEJA_DUP_DEBUG=1 deja-dup --backup > dump The folder to be archived (/media/storage/home/kirk/) is the actual location where my $home points to only see one include. DUPLICITY: . Args: /usr/bin/duplicity --exclude=/media/storage/backup --exclude=/media/storage/home/kirk/Downloads --exclude=/media/storage/home/kirk/.local/share/Trash --exclude=/media/storage/home/kirk/.cache/deja-dup/tmp --exclude=/media/storage/home/kirk/.xsession-errors --exclude=/media/storage/home/kirk/.thumbnails --exclude=/media/storage/home/kirk/.adobe/Flash_Player/AssetCache --exclude=/media/storage/home/kirk/.cache/deja-dup --exclude=/media/storage/home/kirk/.cache --include=/media/storage/home/kirk --include=/etc --exclude=/home/kirk/Downloads --exclude=/home/kirk/.local/share/Trash --exclude=/sys --exclude=/run --exclude=/proc --exclude=/home/kirk/.cache/deja-dup/tmp --exclude=/var/tmp --exclude=/tmp --exclude=/home/kirk/.xsession-errors --exclude=/home/kirk/.thumbnails --exclude=/home/kirk/.steam/root --exclude=/home/kirk/.recently-used.xbel --exclude=/home/kirk/.recent-applications.xbel --exclude=/home/kirk/.Private --exclude=/home/kirk/.gvfs --exclude=/home/kirk/.adobe/Flash_Player/AssetCache --exclude=/home/kirk/.cache/deja-dup --exclude=/home/kirk/.cache --exclude=** --gio --dry-run --volsize=50 / file:///media/storage/backup --no-encryption --verbosity=9 --gpg-options=--no-use-agent --archive-dir=/home/kirk/.cache/deja-dup --tempdir=/tmp --log-fd=15 The folder to be archived is just the $home which points to (/media/storage/home/kirk/) can see two includes which point to the same drive location DUPLICITY: . Args: /usr/bin/duplicity --exclude=/media/storage/backup --include=/etc --exclude=/home/kirk/Downloads --exclude=/home/kirk/.local/share/Trash --exclude=/home/kirk/.cache/deja-dup/tmp --exclude=/home/kirk/.xsession-errors --exclude=/home/kirk/.thumbnails --exclude=/home/kirk/.steam/root --exclude=/home/kirk/.recently-used.xbel --exclude=/home/kirk/.recent-applications.xbel --exclude=/home/kirk/.Private --exclude=/home/kirk/.gvfs --exclude=/home/kirk/.adobe/Flash_Player/AssetCache --exclude=/home/kirk/.cache/deja-dup --exclude=/home/kirk/.cache --include=/home/kirk --exclude=/media/storage/home/kirk/Downloads --exclude=/media/storage/home/kirk/.local/share/Trash --exclude=/media/storage/home/kirk/.cache/deja-dup/tmp --exclude=/media/storage/home/kirk/.xsession-errors --exclude=/media/storage/home/kirk/.thumbnails --exclude=/media/storage/home/kirk/.adobe/Flash_Player/AssetCache --exclude=/media/storage/home/kirk/.cache/deja-dup --exclude=/media/storage/home/kirk/.cache --include=/media/storage/home/kirk --exclude=/sys --exclude=/run --exclude=/proc --exclude=/var/tmp --exclude=/tmp --exclude=** --gio --dry-run --volsize=50 / file:///media/storage/backup --no-encryption --verbosity=9 --gpg-options=--no-use-agent --archive-dir=/home/kirk/.cache/deja-dup --tempdir=/home/kirk/.cache/deja-dup/tmp --log-fd=15 Observation: Either way both test error the same. There are differences in pointing directly to the symlink vs the real location. The two tests differ by the number of includes. The two tests seem to be generally composed set of excludes but different ordering. The .cache/deja-dup is excluded in both cases so why would it ever get purged? Indeed the metadata file goes missing. There is code in several places in deja-dup to delete this file that it had itself created. The deja-dup does delete this metadata file right before it goes to verify against it. OperationBackup.vala .... internal async override void operation_finished(ToolJob job, bool success, bool cancelled, string? detail) { /* If successfully completed, update time of last backup and run base operation_finished */ if (success) DejaDup.update_last_run_timestamp(DejaDup.TimestampType.BACKUP); if (metadir != null) new RecursiveDelete(metadir).start(); if (success && !cancelled) yield chain_op(new OperationVerify(), _("Verifying backup…"), detail); else yield base.operation_finished(job, success, cancelled, detail); } OperationVerify.vala ... internal async override void operation_finished(ToolJob job, bool success, bool cancelled, string? detail) { // Verify results if (success) { var verified = true; string contents; try { FileUtils.get_contents(Path.build_filename(metadir.get_path(), "README"), out contents); } catch (Error e) { verified = false; } if (verified) { var lines = contents.split("\n"); verified = (lines[0] == "This folder can be safely deleted."); } if (!verified) { raise_error(_("Your backup appears to be corrupted. You should delete the backup and try again."), null); success = false; } if (nag) update_nag_time(); } new RecursiveDelete(metadir).start(); yield base.operation_finished(job, success, cancelled, detail); }