Changing movie's root folder fails to move (hardlink+delete) due to Cross-device link and does not fallback to copy+delete #5276

Open
opened 2026-02-19 22:55:12 -05:00 by deekerman · 10 comments
Owner

Originally created by @SugarDroid on GitHub (Dec 13, 2020).

Describe the bug
Changing movie's root folder is unable to move the files between drives in mergerfs pool. If hardlink enabled in media management then nothing happens, if disabled then root gets changed in the database but the files aren't moved physically.

To Reproduce

  1. create a mergerfs pool with 2 drives
  2. create 1 -differently named- folder on both drives, like "movies" on A drive and "Movies" on B drive
  3. add both to Radarr as root
  4. add a movie to one of them and try to move it to the other and choose "yes, move the files" option

Expected behavior
A move should be move, not hardlinking and then delete the original.

Platform Information (please complete the following information):

  • Version 3.0.1.4263
  • Package Version 3.0.1.4263-ls4 by linuxserver.io
  • .NET Core Yes (3.1.10)
  • Docker Yes

Trace Logs

[v3.0.1.4263] System.IO.IOException: Invalid cross-device link
   at System.IO.FileSystem.MoveDirectory(String sourceFullPath, String destFullPath)
   at System.IO.Directory.Move(String sourceDirName, String destDirName)
   at NzbDrone.Common.Disk.DiskProviderBase.MoveFolder(String source, String destination, Boolean overwrite) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskProviderBase.cs:line 263
   at NzbDrone.Common.Disk.DiskTransferService.TransferFolder(String sourcePath, String targetPath, TransferMode mode) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskTransferService.cs:line 89
   at NzbDrone.Core.Movies.MoveMovieService.MoveSingleMovie(Movie movie, String sourcePath, String destinationPath, Nullable`1 index, Nullable`1 total) in D:\a\1\s\src\NzbDrone.Core\Movies\MoveMovieService.cs:line 59

AB#719

Originally created by @SugarDroid on GitHub (Dec 13, 2020). **Describe the bug** Changing movie's root folder is unable to move the files between drives in mergerfs pool. If hardlink enabled in media management then nothing happens, if disabled then root gets changed in the database but the files aren't moved physically. **To Reproduce** 1. create a mergerfs pool with 2 drives 2. create 1 -differently named- folder on both drives, like "movies" on A drive and "Movies" on B drive 3. add both to Radarr as root 4. add a movie to one of them and try to move it to the other and choose "yes, move the files" option **Expected behavior** A move should be move, not hardlinking and then delete the original. **Platform Information (please complete the following information):** - Version 3.0.1.4263 - Package Version 3.0.1.4263-ls4 by linuxserver.io - .NET Core Yes (3.1.10) - Docker Yes **Trace Logs** ``` [v3.0.1.4263] System.IO.IOException: Invalid cross-device link at System.IO.FileSystem.MoveDirectory(String sourceFullPath, String destFullPath) at System.IO.Directory.Move(String sourceDirName, String destDirName) at NzbDrone.Common.Disk.DiskProviderBase.MoveFolder(String source, String destination, Boolean overwrite) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskProviderBase.cs:line 263 at NzbDrone.Common.Disk.DiskTransferService.TransferFolder(String sourcePath, String targetPath, TransferMode mode) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskTransferService.cs:line 89 at NzbDrone.Core.Movies.MoveMovieService.MoveSingleMovie(Movie movie, String sourcePath, String destinationPath, Nullable`1 index, Nullable`1 total) in D:\a\1\s\src\NzbDrone.Core\Movies\MoveMovieService.cs:line 59 ``` [AB#719](https://dev.azure.com/Servarr/7ab38f4e-5a57-4d70-84f4-94dd9bc5d6df/_workitems/edit/719)
Author
Owner

@bakerboy448 commented on GitHub (Dec 21, 2020):

Need to know if this is reproducible on sonarr as well

either upstream issue or something radarr (netcore?) specific

@bakerboy448 commented on GitHub (Dec 21, 2020): Need to know if this is reproducible on sonarr as well either upstream issue or something radarr (netcore?) specific
Author
Owner

@SugarDroid commented on GitHub (Dec 22, 2020):

@bakerboy448 https://github.com/Sonarr/Sonarr/issues/4185

@SugarDroid commented on GitHub (Dec 22, 2020): @bakerboy448 https://github.com/Sonarr/Sonarr/issues/4185
Author
Owner

@stale[bot] commented on GitHub (Jan 8, 2022):

This issue has been automatically marked as stale because it has not had recent activity. Please verify that this is still an issue with the latest version of Radarr and report back. Otherwise this issue will be closed.

@stale[bot] commented on GitHub (Jan 8, 2022): This issue has been automatically marked as stale because it has not had recent activity. Please verify that this is still an issue with the latest version of Radarr and report back. Otherwise this issue will be closed.
Author
Owner

@bakerboy448 commented on GitHub (Mar 10, 2022):

Environment

- OS: TrueNAS-12.0-U8
- Radarr: 4.0.4.5922
- Docker Install: No
- Using Reverse Proxy: No
- Browser: Firefox 98.0

Trace Logs?

2022-03-10 07:54:15.0|Info|MoveMovieService|Moving 1 movies to '/mnt/datashare/media/Videos/movies' 2022-03-10 07:54:15.0|Info|MoveMovieService|Moving Knives Out from '/mnt/share/media/Videos/movies/Knives Out (2019)' to '/mnt/datashare/media/Videos/movies/Knives Out (2019)' (1/1) 2022-03-10 07:54:15.0|Error|MoveMovieService|Unable to move movie from '/mnt/share/media/Videos/movies/Knives Out (2019)' to '/mnt/datashare/media/Videos/movies/Knives Out (2019)'. Try moving files manually

[v4.0.4.5922] System.IO.IOException: Cross-device link at System.IO.FileSystem.MoveDirectory(String sourceFullPath, String destFullPath) at System.IO.Directory.Move(String sourceDirName, String destDirName) at NzbDrone.Common.Disk.DiskProviderBase.MoveFolder(String source, String destination, Boolean overwrite) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskProviderBase.cs:line 262 at NzbDrone.Common.Disk.DiskTransferService.TransferFolder(String sourcePath, String targetPath, TransferMode mode) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskTransferService.cs:line 88 at NzbDrone.Core.Movies.MoveMovieService.MoveSingleMovie(Movie movie, String sourcePath, String destinationPath, Nullable1 index, Nullable1 total) in D:\a\1\s\src\NzbDrone.Core\Movies\MoveMovieService.cs:line 57

2022-03-10 07:54:15.0|Info|MoveMovieService|Finished moving 1 movies to '/mnt/datashare/media/Videos/movies'

From @madhackbt on #7126

@bakerboy448 commented on GitHub (Mar 10, 2022): > ### Environment > ```gfm > - OS: TrueNAS-12.0-U8 > - Radarr: 4.0.4.5922 > - Docker Install: No > - Using Reverse Proxy: No > - Browser: Firefox 98.0 > ``` > > ### Trace Logs? > 2022-03-10 07:54:15.0|Info|MoveMovieService|Moving 1 movies to '/mnt/datashare/media/Videos/movies' 2022-03-10 07:54:15.0|Info|MoveMovieService|Moving Knives Out from '/mnt/share/media/Videos/movies/Knives Out (2019)' to '/mnt/datashare/media/Videos/movies/Knives Out (2019)' (1/1) 2022-03-10 07:54:15.0|Error|MoveMovieService|Unable to move movie from '/mnt/share/media/Videos/movies/Knives Out (2019)' to '/mnt/datashare/media/Videos/movies/Knives Out (2019)'. Try moving files manually > > [v4.0.4.5922] System.IO.IOException: Cross-device link at System.IO.FileSystem.MoveDirectory(String sourceFullPath, String destFullPath) at System.IO.Directory.Move(String sourceDirName, String destDirName) at NzbDrone.Common.Disk.DiskProviderBase.MoveFolder(String source, String destination, Boolean overwrite) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskProviderBase.cs:line 262 at NzbDrone.Common.Disk.DiskTransferService.TransferFolder(String sourcePath, String targetPath, TransferMode mode) in D:\a\1\s\src\NzbDrone.Common\Disk\DiskTransferService.cs:line 88 at NzbDrone.Core.Movies.MoveMovieService.MoveSingleMovie(Movie movie, String sourcePath, String destinationPath, Nullable`1 index, Nullable`1 total) in D:\a\1\s\src\NzbDrone.Core\Movies\MoveMovieService.cs:line 57 > > 2022-03-10 07:54:15.0|Info|MoveMovieService|Finished moving 1 movies to '/mnt/datashare/media/Videos/movies' > From @madhackbt on #7126
Author
Owner

@madhackbt commented on GitHub (Mar 10, 2022):

@bakerboy448 I am using Sonarr 3.0.7.1477 (mono 6.8.0.105 on the TrueNAS-12.0-U8) and the "Move" operation works just fine. I had seen this report, but I did not have the "mergerfs" type config, Thanks for handling this.

@madhackbt commented on GitHub (Mar 10, 2022): @bakerboy448 I am using Sonarr 3.0.7.1477 (mono 6.8.0.105 on the TrueNAS-12.0-U8) and the "Move" operation works just fine. I had seen this report, but I did not have the "mergerfs" type config, Thanks for handling this.
Author
Owner

@christianha1111 commented on GitHub (Oct 7, 2022):

I can confirm the same thing happens on Sonarr 4.2.4.6635 if mergerfs is used.

@christianha1111 commented on GitHub (Oct 7, 2022): I can confirm the same thing happens on Sonarr 4.2.4.6635 if mergerfs is used.
Author
Owner

@ac1dburnz commented on GitHub (Feb 23, 2023):

Any movement on this?

@ac1dburnz commented on GitHub (Feb 23, 2023): Any movement on this?
Author
Owner

@0xdevalias commented on GitHub (Apr 5, 2023):

See also:

@0xdevalias commented on GitHub (Apr 5, 2023): See also: - https://github.com/Sonarr/Sonarr/issues/4185 - https://github.com/Lidarr/Lidarr/issues/1827
Author
Owner

@Panda260 commented on GitHub (Jul 8, 2025):

any updates? kinda an important bug i think

@Panda260 commented on GitHub (Jul 8, 2025): any updates? kinda an important bug i think
Author
Owner

@bakerboy448 commented on GitHub (Jul 8, 2025):

The primary development team is engaged in over five applications, including Lidarr, Prowlarr, Radarr, and Sonarr. Currently, there is approximately no active developers contributing to these projects, with none of the contributors working on them full-time. Additionally, all members involved, whether in development or support roles, are volunteers and do not receive compensation for their contributions. Each team member balances their commitments alongside full-time jobs, family responsibilities, and other personal obligations.

As a result, the list of tasks to be completed across these projects, along with the various backends and modules, is extensive, while the available time for addressing these tasks is limited.

Unfortunately a toxic community and abusive users drove away the active developer into burnout.

The community also does not appear to believe this is an "important bug" as no community member has took it upon themselves to implement a solution upstream into Sonarr and/or PR downstream. This is an issue specific to edge cases and unique niche setup with certain merge file systems / configurations.

@bakerboy448 commented on GitHub (Jul 8, 2025): The primary development team is engaged in over five applications, including Lidarr, Prowlarr, Radarr, and Sonarr. Currently, there is approximately no active developers contributing to these projects, with none of the contributors working on them full-time. Additionally, all members involved, whether in development or support roles, are volunteers and do not receive compensation for their contributions. Each team member balances their commitments alongside full-time jobs, family responsibilities, and other personal obligations. As a result, the list of tasks to be completed across these projects, along with the various backends and modules, is extensive, while the available time for addressing these tasks is limited. Unfortunately a toxic community and abusive users drove away the active developer into burnout. The community also does not appear to believe this is an "important bug" as no community member has took it upon themselves to implement a solution upstream into Sonarr and/or PR downstream. This is an issue specific to edge cases and unique niche setup with certain merge file systems / configurations.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/Radarr#5276
No description provided.