I think i'm using hardlink? help please

Sonarr version (exact version):
3.0.4.982
Mono version (if Sonarr is not running on Windows):
5.20.1.34
OS:
linuxserver

Sorry if i poorly explain this in advance

I’m setup on both sonarr/radarr so that when it downloads a torrent file to my seedbox and its complete it goes to folder data/complete then it creates a folder for the tv show renamed in my tv folder (movie folder for movies) that is linked to my plex account for my media server so that my movies and tv shows are separate and orderly on plex.

according to my seedbox i’ve only downloaded 2tb from my tv show site and 1.3 tb from my movie site but somehow I’ve used up 71% of a 10tb hdd. It seems that the movies and tv shows when completed are left in the complete folder and a copy is made to the tv folder or movie folder leaving me with 2 instances of the same file taking up double the space. Is there a way to fix this so that the files are separated like i want them to but there isnt double the file so that i can keep seeding the torrent file for forever? I thought i was setup with a hardlink that would keep this from happening but it seems i’m either not or the hardlink isnt what i thought it was.

You’re correct, that’s what hardlinks are for. Enable trace logging in Sonarr/Radarr and see if hardlinks are being created successfully. Both the source and destination for the import need to be on the same volume (not just the same physical disk).

20-11-5 17:55:34.1|Trace|ConfigService|Using default config value for 'proxyenabled' defaultValue:'False'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxytype' defaultValue:'Http'
20-11-5 17:55:34.2|Trace|EventAggregator|ConfigFileSavedEvent <~ ReconfigureLogging
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyhostname' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyport' defaultValue:'8080'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyusername' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxypassword' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxybypassfilter' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxybypasslocaladdresses' defaultValue:'True'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'backupfolder' defaultValue:'Backups'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'backupinterval' defaultValue:'7'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'backupretention' defaultValue:'28'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'certificatevalidation' defaultValue:'Enabled'
20-11-5 17:55:34.2|Trace|EventAggregator|Publishing ConfigSavedEvent
20-11-5 17:55:34.2|Trace|EventAggregator|ConfigSavedEvent ~> TaskManager
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyenabled' defaultValue:'False'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxytype' defaultValue:'Http'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyhostname' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyport' defaultValue:'8080'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyusername' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxypassword' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxybypassfilter' defaultValue:''
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxybypasslocaladdresses' defaultValue:'True'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'certificatevalidation' defaultValue:'Enabled'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'backupfolder' defaultValue:'Backups'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'backupinterval' defaultValue:'7'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'backupretention' defaultValue:'28'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'rsssyncinterval' defaultValue:'15'
20-11-5 17:55:34.2|Trace|ConfigService|Using default config value for 'proxyenabled' defaultValue:'False'
20-11-5 17:55:34.2|Trace|EventAggregator|Publishing HealthCheckCompleteEvent
20-11-5 17:55:34.2|Trace|EventAggregator|HealthCheckCompleteEvent -> HealthModule
20-11-5 17:55:34.2|Trace|EventAggregator|HealthCheckCompleteEvent <- HealthModule
20-11-5 17:55:34.2|Trace|EventAggregator|HealthCheckCompleteEvent -> HealthModule
20-11-5 17:55:34.2|Trace|EventAggregator|HealthCheckCompleteEvent <- HealthModule
20-11-5 17:55:34.2|Trace|EventAggregator|HealthCheckCompleteEvent ~> NotificationService
20-11-5 17:55:34.2|Trace|EventAggregator|HealthCheckCompleteEvent <~ NotificationService
20-11-5 17:55:34.2|Trace|Http|Req: 3573 [GET] /api/v3/health (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:55:34.2|Trace|Http|Res: 3573 [GET] /api/v3/health: 200.OK (2 ms)
20-11-5 17:55:34.2|Debug|Api|[GET] /api/v3/health: 200.OK (2 ms)
20-11-5 17:55:34.5|Trace|Http|Res: 3572 [PUT] /api/v3/config/host: 202.Accepted (554 ms)
20-11-5 17:55:34.5|Debug|Api|[PUT] /api/v3/config/host: 202.Accepted (554 ms)
20-11-5 17:55:34.5|Trace|HttpClient|Req: [GET] https://services.sonarr.tv/v1/update/phantom-develop?version=3.0.4.982&os=linux&runtimeVer=5.20.1.34&active=true
20-11-5 17:55:34.5|Trace|ConfigService|Using default config value for 'proxyenabled' defaultValue:'False'
20-11-5 17:55:34.6|Trace|EventAggregator|ConfigSavedEvent <~ TaskManager
20-11-5 17:55:35.5|Trace|HttpClient|Res: [GET] https://services.sonarr.tv/v1/update/phantom-develop?version=3.0.4.982&os=linux&runtimeVer=5.20.1.34&active=true: 200.OK (953 ms)
20-11-5 17:55:35.5|Trace|EventAggregator|Publishing HealthCheckCompleteEvent
20-11-5 17:55:35.5|Trace|EventAggregator|HealthCheckCompleteEvent -> HealthModule
20-11-5 17:55:35.5|Trace|EventAggregator|HealthCheckCompleteEvent <- HealthModule
20-11-5 17:55:35.5|Trace|EventAggregator|HealthCheckCompleteEvent -> HealthModule
20-11-5 17:55:35.5|Trace|EventAggregator|HealthCheckCompleteEvent <- HealthModule
20-11-5 17:55:35.5|Trace|EventAggregator|HealthCheckCompleteEvent ~> NotificationService
20-11-5 17:55:35.5|Trace|EventAggregator|HealthCheckCompleteEvent <~ NotificationService
20-11-5 17:55:35.5|Trace|Http|Req: 3574 [GET] /api/v3/health (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:55:35.5|Trace|Http|Res: 3574 [GET] /api/v3/health: 200.OK (1 ms)
20-11-5 17:55:35.5|Debug|Api|[GET] /api/v3/health: 200.OK (1 ms)
20-11-5 17:55:57.8|Trace|Scheduler|Pending Tasks: 0
20-11-5 17:56:12.7|Trace|Http|Req: 3575 [GET] /api/v3/health (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:56:12.7|Trace|Http|Res: 3575 [GET] /api/v3/health: 200.OK (1 ms)
20-11-5 17:56:12.7|Trace|Http|Req: 3576 [GET] /api/v3/diskspace (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:56:12.7|Debug|Api|[GET] /api/v3/health: 200.OK (1 ms)
20-11-5 17:56:12.7|Trace|Http|Req: 3577 [GET] /api/v3/system/status (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:56:12.8|Trace|Http|Res: 3577 [GET] /api/v3/system/status: 200.OK (75 ms)
20-11-5 17:56:12.8|Debug|Api|[GET] /api/v3/system/status: 200.OK (75 ms)
20-11-5 17:56:12.9|Trace|Http|Res: 3576 [GET] /api/v3/diskspace: 200.OK (251 ms)
20-11-5 17:56:12.9|Debug|Api|[GET] /api/v3/diskspace: 200.OK (251 ms)
20-11-5 17:56:14.5|Trace|Http|Req: 3578 [GET] /api/v3/log/file (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:56:14.5|Trace|Http|Res: 3578 [GET] /api/v3/log/file: 200.OK (10 ms)
20-11-5 17:56:14.5|Debug|Api|[GET] /api/v3/log/file: 200.OK (10 ms)
20-11-5 17:56:27.8|Trace|Scheduler|Pending Tasks: 1
20-11-5 17:56:27.8|Trace|CommandQueueManager|Publishing MessagingCleanup
20-11-5 17:56:27.8|Trace|CommandQueueManager|Checking if command is queued or started: MessagingCleanup
20-11-5 17:56:27.8|Trace|CommandQueueManager|Inserting new command: MessagingCleanup
20-11-5 17:56:28.2|Trace|CommandExecutor|MessagingCleanupCommand -> CleanupCommandMessagingService
20-11-5 17:56:28.2|Trace|CommandQueueManager|Marking command as started: MessagingCleanup
20-11-5 17:56:28.4|Trace|CommandQueueManager|Cleaning up old commands
20-11-5 17:56:28.7|Trace|CommandQueueManager|Updating command status
20-11-5 17:56:28.9|Trace|EventAggregator|Publishing CommandExecutedEvent
20-11-5 17:56:28.9|Trace|EventAggregator|CommandExecutedEvent -> TaskManager
20-11-5 17:56:28.9|Trace|TaskManager|Updating last run time for: NzbDrone.Core.Messaging.Commands.MessagingCleanupCommand
20-11-5 17:56:29.1|Trace|EventAggregator|CommandExecutedEvent <- TaskManager
20-11-5 17:56:29.1|Trace|EventAggregator|CommandExecutedEvent -> TaskModule
20-11-5 17:56:29.1|Trace|EventAggregator|CommandExecutedEvent <- TaskModule
20-11-5 17:56:29.1|Trace|EventAggregator|CommandExecutedEvent -> TaskModule
20-11-5 17:56:29.1|Trace|EventAggregator|CommandExecutedEvent <- TaskModule
20-11-5 17:56:29.1|Trace|CommandExecutor|MessagingCleanupCommand <- CleanupCommandMessagingService [00:00:00.5272420]
20-11-5 17:56:29.1|Trace|Http|Req: 3579 [GET] /api/v3/command (from 172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0)
20-11-5 17:56:29.1|Trace|CommandQueueManager|Getting all commands
20-11-5 17:56:29.1|Trace|Http|Res: 3579 [GET] /api/v3/command: 200.OK (1 ms)
20-11-5 17:56:29.1|Debug|Api|[GET] /api/v3/command: 200.OK (1 ms)
20-11-5 17:56:58.2|Trace|Scheduler|Pending Tasks: 1
20-11-5 17:56:58.2|Trace|CommandQueueManager|Publishing RefreshMonitoredDownloads
20-11-5 17:56:58.2|Trace|CommandQueueManager|Checking if command is queued or started: RefreshMonitoredDownloads
20-11-5 17:56:58.2|Trace|CommandQueueManager|Inserting new command: RefreshMonitoredDownloads
20-11-5 17:56:58.5|Trace|CommandExecutor|RefreshMonitoredDownloadsCommand -> DownloadMonitoringService
20-11-5 17:56:58.5|Trace|CommandQueueManager|Marking command as started: RefreshMonitoredDownloads
20-11-5 17:56:58.7|Debug|RTorrentProxy|Executing remote method: d.multicall2
20-11-5 17:56:58.7|Debug|RTorrent|Retrieved metadata of 156 torrents in client
20-11-5 17:56:58.7|Debug|Parser|Parsing string 'Chilling.Adventures.of.Sabrina.S01.1080p.NF.WEB-DL.DDP5.1.x264-NTG'
20-11-5 17:56:58.7|Trace|Parser|^(?<title>.+?)\W(?:S|Season|Saison)\W?(?<season>\d{1,2}(?!\d+))(\W+|_|$)(?<extras>EXTRAS|SUBPACK)?(?!\\)
20-11-5 17:56:58.7|Debug|Parser|Episode Parsed. Chilling Adventures of Sabrina - Season 01 
20-11-5 17:56:58.7|Debug|Parser|Language parsed: English
20-11-5 17:56:58.7|Debug|QualityParser|Trying to parse quality for Chilling.Adventures.of.Sabrina.S01.1080p.NF.WEB-DL.DDP5.1.x264-NTG
20-11-5 17:56:58.7|Debug|Parser|Quality parsed: WEBDL-1080p v1
20-11-5 17:56:58.7|Debug|Parser|Release Group parsed: NTG
20-11-5 17:56:58.8|Debug|TrackedDownloadService|Tracking 'Local ruTorrent:Chilling.Adventures.of.Sabrina.S01.1080p.NF.WEB-DL.DDP5.1.x264-NTG': ClientState=Downloading (readonly) SonarrStage=Downloading Episode='Chilling Adventures of Sabrina - Season 01 WEBDL-1080p v1' OutputPath=/data/incomplete/Chilling.Adventures.of.Sabrina.S01.1080p.NF.WEB-DL.DDP5.1.x264-NTG.

Next time please upload the logs and link them here (as covered in the support template when you opened this issue), you’ll need to wait for an import to occur as one didn’t happen in these logs.

sorry here i did it again with a different one this should have it

https://hastebin.com/uqajodeqat.yaml

From the logs:
20-11-5 22:31:43.6|Trace|RefLinkCreator|Failed to create reflink at '/tv/Truth Seekers/Season 1/Truth Seekers - s01e01 - The Haunting of Connelly’s Nook - [WEBDL-1080P][EAC3 5.1][H264]-NTG.mkv' to '/downloads/complete/Truth.Seekers.S01E01.The.Haunting.Of.Connellys.Nook.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTG.mkv': Invalid cross-device link [EXDEV].

You can’t hardlink across volumes, /tv and /downloads are different volumes you need to use a single volume for both downloads and sorted media.

https://wiki.servarr.com/Docker_Guide

That’s written with docker in mind (it’s a common mistake), but applies regardless.

so if I have it /downloads/complete and /downloads/tv that would solve the problem? instead of /downloads and /tv

also for all the tv shows and movies that are currently setup like that is there a way to fix it without redownloading? if i fix the volumes and then redirect the hard link to the proper volumes will that automatically fix everything for the tv shows and movies already downloaded?

Yes, assuming the underlying volume supports hardlinking.

After fixing the series paths in Sonarr you’ll either need to manually hardlink or use manual import (making sure you select copy/hardlink instead of Move).

So i created a /download/tv folder then went into sonarr and radarr added that as root path then i clicked on mass editor and changed the root folder for all the tv shows and movies… the movies moved over automatically but the tv shows didn’t… but my space in the storage hasn’t changed even with the movies moving… so it appears the hard link wont work for the files already created hopefully it would work if i downloaded a new movie or tv show with the proper paths setup? or it just may not support it like you said

if it doesn’t support is there a way to fix that? if not then if i was to change the save to file in rtorrent from /downloads/data/complete to the renamed and moved file in /downloads/tv and same thing for the movies…would it would allow me to continue seeding? Then i can just delete the extra copy from /downloads/data/complete freeing up the space? Its an extra step that is annoying but its the only thing i can think of that might work if hard linking isn’t actually supported/working for me.

Right, it’s already a copy, it’s not going to automatically make a hardlink after you fix the paths unless you re-import the files.

Not if they’ve been renamed, nor would I suggest doing that. You need to re-import them, like I said in my last post.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.