I, um, did an incorrect NAS procedure and wound up corrupting my Roon installation. Windows 10 fully updated. I reinstalled Roon and tried to restore from a backup. I got this error message, so I completely wiped Roon from the system and reinstalled and again restored from a (3 days prior) backup. Both times when RoonServer and RoonAppliance started up, I got this error message in the RoonServer_log.txt:
03/22 17:25:09 Info: Starting RoonServer v2.62 (build 1641) production on windows
03/22 17:25:09 Info: Local time is 3/22/2026 5:25:09 PM, UTC time is 3/23/2026 12:25:09 AM
03/22 17:25:10 Trace: [roondns] loaded 26 last-known-good entries
03/22 17:25:10 Debug: Init DefaultBackingApi: HttpWebRequest
03/22 17:25:10 Debug: [easyhttp] default backing API HttpClient -> HttpWebRequest. This may cancel all in progress http requests
03/22 17:25:11 Trace: Checking if we are already running
03/22 17:25:11 Trace: Nope, we are the only one running
03/22 17:25:11 Info: Is 64 bit? True
03/22 17:25:12 Critical: Failed to restore backup. Your database may be in a corrupt state. This can most likley be recovered by Roon Support. System.Exception: FAILED TO MOVE EXISTING DIR TO RESTOREOLDDIR: C:\Users\ockers\AppData\Local\RoonServer\SentryCache => C:\Users\ockers\AppData\Local\RoonServer\.restore_old\SentryCache
---> System.IO.IOException: Access to the path 'C:\Users\ockers\AppData\Local\RoonServer\SentryCache' is denied.
at System.IO.FileSystem.MoveDirectory(String sourceFullPath, String destFullPath)
at System.IO.Directory.Move(String sourceDirName, String destDirName)
at Sooloos.Client.ApplicationCommon.CheckForRestore(String[] argv, String lockname)
--- End of inner exception stack trace ---
at Sooloos.Client.ApplicationCommon.CheckForRestore(String[] argv, String lockname)
I was able to resolve this by manually moving the Settings and SentryCache directories around between .restore_old and .restore_on_launch (and deleting .restore_on_launch directory) as follows:
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer$ ls -al
total 40
drwxr-xr-x 10 ockers ockers 4096 Mar 23 00:39 .
drwxr-xr-x 6 ockers ockers 4096 Mar 22 14:53 ..
drwxr-xr-x 3 ockers ockers 4096 Mar 22 15:19 Application
drwxr-xr-x 4 ockers ockers 4096 Mar 22 16:07 Database
drwxr-xr-x 2 ockers ockers 4096 Mar 23 00:39 Logs
drwxr-xr-x 2 ockers ockers 4096 Mar 23 00:39 .restore_old
drwxr-xr-x 4 ockers ockers 4096 Mar 23 00:23 .restore_on_launch
drwxr-xr-x 3 ockers ockers 4096 Mar 22 15:25 SentryCache
drwxr-xr-x 2 ockers ockers 4096 Mar 22 15:38 Settings
drwxr-xr-x 2 ockers ockers 4096 Mar 22 15:38 Temp
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer$ mv SentryCache .restore_old/ <<<<<<==== NO PERMISSIONS ISSUE
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer$ mv Settings/ .restore_old/
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer$ cd .restore_on_launch/
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer/.restore_on_launch$ ls -al
total 16
drwxr-xr-x 4 ockers ockers 4096 Mar 23 00:23 .
drwxr-xr-x 11 ockers ockers 4096 Mar 23 00:41 ..
drwxr-xr-x 3 ockers ockers 4096 Mar 22 16:08 SentryCache
drwxr-xr-x 2 ockers ockers 4096 Mar 22 16:08 Settings
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer/.restore_on_launch$ mv Settings/ ..
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer/.restore_on_launch$ mv SentryCache/ ..
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer/.restore_on_launch$ cd ..
ockers@zinder:~/roon/ockers/AppData/Local/RoonServer$ rm -rf .restore_on_launch/
After restarting the Windows box and logging in, Roon started up normally. I’m listening to it happily now.
I specifically want you to note that there is no permissions issue doing the “mv SentryCache .restore_old/ “ command so I think this is a roon bug. I’m not sure why it reports this exception and I’m asking you to revisit the code to see if there’s anything fishy with the filesystem/directory system calls here:
System.Exception: FAILED TO MOVE EXISTING DIR TO RESTOREOLDDIR: C:\Users\ockers\AppData\Local\RoonServer\SentryCache => C:\Users\ockers\AppData\Local\RoonServer\.restore_old\SentryCache
---> System.IO.IOException: Access to the path 'C:\Users\ockers\AppData\Local\RoonServer\SentryCache' is denied.
at System.IO.FileSystem.MoveDirectory(String sourceFullPath, String destFullPath)
at System.IO.Directory.Move(String sourceDirName, String destDirName)
at Sooloos.Client.ApplicationCommon.CheckForRestore(String[] argv, String lockname)
--- End of inner exception stack trace ---
at Sooloos.Client.ApplicationCommon.CheckForRestore(String[] argv, String lockname)
I realize this all looks a bit strange to you and I didn’t want to have to confess that the entire Roon installation including Roon, RoonServer, RoonGoer, and RAATServer directories, are windows symlink to a UNC share. They appear to Windows to be on C:\ drive but definitely are not, due to a severe lack of disk space on my old Windows mediapc. Additionally, the Roon backups are on a share mapped as R:\ drive, and restored from the same. The NAS is a “Ubuntu 22.04.5 LTS” linux server with samba of course.
Obviously this meant I couldn’t ask for support for this issue. I tried futzing around with oplocks at ChatGPT’s suggestion, including turning off oplocks in samba, but RoonServer won’t even start any brokers if it can’t get an oplock. I also tried fake_oplocks which didn’t help.
# fake oplocks = yes
# oplocks = no
# level2 oplocks = no
# kernel oplocks = no
For the record none of the above oplock stuff helps with Roon. Manually moving the directories around is what sorted it out.
Final improvement suggestion for this ticket is to correct the spelling of “likley” to “likely”.
Thank you
PS If you reboot the NAS (eg for software updates) with Roon running, it corrupts the database of course. I think it’s not worth trying to add disk retries in Roon such that it could recover from having its network disk disappear, since this should never happen.