diff --git a/Duplicati/Library/Main/Options.cs b/Duplicati/Library/Main/Options.cs
index 06958b709..30dd60b47 100644
--- a/Duplicati/Library/Main/Options.cs
+++ b/Duplicati/Library/Main/Options.cs
@@ -165,9 +165,9 @@ namespace Duplicati.Library.Main
private static readonly int DEFAULT_RESTORE_FILE_PROCESSORS = Math.Max(1, Environment.ProcessorCount / 2);
///
- /// The default value for the maximum size of the restore volume cache
+ /// The default value for the maximum size of the restore volume cache is 100 times the volume size. E.g. for 50MB volumes, the default cache size is 5GB.
///
- private const string DEFAULT_RESTORE_VOLUME_CACHE_HINT = "4gb";
+ private const string DEFAULT_RESTORE_VOLUME_CACHE_HINT = "";
///
/// The default value for the number of volume decryptors during restore
@@ -1724,7 +1724,18 @@ namespace Duplicati.Library.Main
//
// Gets the size of the volume cache used during restore, in MB.
//
- public long RestoreVolumeCacheHint => GetSize("restore-volume-cache-hint", "mb", DEFAULT_RESTORE_VOLUME_CACHE_HINT);
+ public long RestoreVolumeCacheHint
+ {
+ get
+ {
+ m_options.TryGetValue("restore-volume-cache-hint", out var s);
+
+ if (string.IsNullOrEmpty(s))
+ return VolumeSize * 100; // Default to 100 times the volume size
+
+ return GetSize("restore-volume-cache-hint", "mb", $"{VolumeSize * 100}b");
+ }
+ }
///
/// Gets the number of volume decryptors to use in the restore process
diff --git a/Duplicati/Library/Main/Strings.cs b/Duplicati/Library/Main/Strings.cs
index 172822b62..5a812e485 100644
--- a/Duplicati/Library/Main/Strings.cs
+++ b/Duplicati/Library/Main/Strings.cs
@@ -364,7 +364,7 @@ namespace Duplicati.Library.Main.Strings
public static string RestorePreallocateSizeShort { get { return LC.L("Preallocate size of restored files"); } }
public static string RestorePreallocateSizeLong { get { return LC.L("Use this option to toggle whether to set the size of the restored files before they are written to disk. This can help to reduce fragmentation and improve performance on some filesystems."); } }
public static string RestoreVolumeCacheHintShort { get { return LC.L("Hints to the desired maximum size of the restore volume cache"); } }
- public static string RestoreVolumeCacheHintLong { get { return LC.L("Use this option to hint the maximum desired size of the restore volume cache. The restore volume cache is used to store the volumes from the remote storage on local disk. The number of volumes stored is set to floor(hint_size / volume_size). When this number is exceeded, the client tries to evict the least recently used volume(s) that is not actively being used. This means that the number of volumes kept on disk can exceed this value if no volume can be evicted."); } }
+ public static string RestoreVolumeCacheHintLong { get { return LC.L("Use this option to hint the maximum desired size of the restore volume cache. The restore volume cache is used to store the volumes from the remote storage on local disk. When this number is exceeded, the client tries to evict the least recently used volume(s). This means that the number of volumes kept on disk can exceed this value if they are still being downloaded or are in use."); } }
public static string RestoreVolumeDecompressorsShort { get { return LC.L("Number of concurrent FileDecompressor processes used during restore"); } }
public static string RestoreVolumeDecompressorsLong { get { return LC.L("Use this option to set the number of concurrent FileDecompressor processes used during restore. A FileDecompressor processes one volume at a time, and increasing the number of FileDecompressors may improve restore performance if the bottleneck is decompression."); } }
public static string RestoreVolumeDecryptorsShort { get { return LC.L("Number of concurrent FileDecryptor processes used during restore"); } }