Radarr/Radarr · error · UpdateFailedException
Your Radarr configuration '{0}' is being stored in applicati
Error message
Your Radarr configuration '{0}' is being stored in application folder '{1}' which will cause data lost during the upgrade. Please remove any symlinks or redirects before trying again. What it means
UpdateFailedException thrown by EnsureAppDataSafety() when the AppDataFolder (config) is either the same as or a child of the StartUpFolder. Because updates overwrite the install directory, storing config there would destroy it during upgrade. Radarr aborts to prevent data loss. Both the AppData and StartUp paths are reported.
Source
Thrown at src/NzbDrone.Core/Update/InstallUpdateService.cs:230
_logger.ProgressInfo("Starting update script: {0}", _configFileProvider.UpdateScriptPath);
_processProvider.Start(scriptPath, GetUpdaterArgs(updateSandboxFolder));
}
private string GetUpdaterArgs(string updateSandboxFolder)
{
var processId = _processProvider.GetCurrentProcess().Id.ToString();
var executingApplication = _runtimeInfo.ExecutingApplication;
return string.Join(" ", processId, updateSandboxFolder.TrimEnd(Path.DirectorySeparatorChar).WrapInQuotes(), executingApplication.WrapInQuotes(), _startupContext.PreservedArguments);
}
private void EnsureAppDataSafety()
{
if (_appFolderInfo.StartUpFolder.IsParentPath(_appFolderInfo.AppDataFolder) ||
_appFolderInfo.StartUpFolder.PathEquals(_appFolderInfo.AppDataFolder))
{
throw new UpdateFailedException("Your Radarr configuration '{0}' is being stored in application folder '{1}' which will cause data lost during the upgrade. Please remove any symlinks or redirects before trying again.", _appFolderInfo.AppDataFolder, _appFolderInfo.StartUpFolder);
}
}
private UpdatePackage GetUpdatePackage(CommandTrigger updateTrigger, bool installMajorUpdate)
{
_logger.ProgressDebug("Checking for updates");
var latestAvailable = _checkUpdateService.AvailableUpdate();
if (latestAvailable == null)
{
_logger.ProgressDebug("No update available");
return null;
}
if (latestAvailable.Version.Major > BuildInfo.Version.Major && !installMajorUpdate)
{
_logger.ProgressInfo("Unable to install major update, please update update manually from System: Updates");View on GitHub (pinned to ca451608dc)
Solutions
- Move AppData outside the install directory (e.g. /var/lib/radarr/.config/Radarr) and set the APPDATA env var / -data flag accordingly.
- Remove any symlink that chains AppData back under StartUpFolder.
- Reinstall so binary and config directories are siblings, not nested.
Example fix
# move config out of install dir sudo mkdir -p /var/lib/radarr/.config sudo mv /opt/Radarr/AppData /var/lib/radarr/.config/Radarr # launch with -data /var/lib/radarr/.config/Radarr
Defensive patterns
Strategy: validation
Validate before calling
if (_appFolderInfo.StartUpFolder.IsParentPath(_appFolderInfo.AppDataFolder) ||
_appFolderInfo.StartUpFolder.PathEquals(_appFolderInfo.AppDataFolder))
{
_logger.Error("AppData lives inside the startup folder; refusing to auto-update to avoid data loss");
_configFileProvider.UpdateAutomatically = false;
} Try / catch
try { EnsureAppDataSafety(); InstallUpdate(package); }
catch (UpdateFailedException ex) when (ex.Message.Contains("data lost"))
{
_logger.Error(ex, "Move AppData out of the install folder before updating");
} Prevention
- Always install config (AppData) outside the binary directory.
- Avoid symlinks that resolve AppData back under the install path.
- Add a startup health warning when AppData is nested inside StartUpFolder.
When it happens
Trigger: EnsureAppDataSafety() runs at the start of InstallUpdate; StartUpFolder.IsParentPath(AppDataFolder) or they are PathEquals -> exception.
Common situations: Default install where config lives inside the app folder; a symlink/redirect that resolves AppData back under the install dir; extracting Radarr into its own config directory; user set APPDATA/DataFolder to a subfolder of the install path.
Related errors
- Update Script has not been defined
- Update Script: '{0}' does not exist
- File {0} failed archive validation.
- Unable to determine database connection string for type {0}.
- Postgres MainDbConnectionString is set but LogDbConnectionSt
AI-assisted analysis of Radarr/Radarr@ca451608dc (2026-08-13).
Data as JSON: /api/errors/afdae6fa2a22b67c.
Report an issue: GitHub.