Bisync between local ubuntu folder and proton drive fails

What is the problem you are having with rclone?

I am trying to bidirectionally sync a local folder on my ubuntu machine with my Proton drive.
Normal sync will work, sync with --dry-run will work, but it will not work with S3app and terminal if I actually want to use bisync, a null reference error occurs.

Any help or ideas for workarounds would be highly appreciated. My goal is to have one proton drive folder to bisync accross multiple devices.

Run the command 'rclone version' and share the full output of the command.

rclone version
rclone v1.70.0-beta.8638.4d38424e6

  • os/version: ubuntu 24.10 (64 bit)
  • os/kernel: 6.11.0-21-generic (x86_64)
  • os/type: linux
  • os/arch: amd64
  • go/version: go1.24.1
  • go/linking: static
  • go/tags: none

Which cloud storage system are you using? (eg Google Drive)

Proton Drive

The command you were trying to run (eg rclone copy /tmp remote:tmp)

Tried both, the following command and the s3app to do the same

rclone bisync /home/xxProtonDrive "ProtonDrive:" --create-empty-src-dirs --compare size,modtime,checksum --slow-hash-sync-only --resilient -MvP --fix-case --resync -vv

Please run 'rclone config redacted' and share the full output. If you get command not found, please make sure to update rclone.

rclone config redacted
[ProtonDrive]
type = protondrive
username = xx@proton.me
password = XXX
client_uid = XXX
client_access_token = XXX
client_refresh_token = XXX
client_salted_key_pass = XXX

[s3drive_auto_62ukCdCCwCbOZVVlsgzKs6]
type = s3
provider = Other
region = us-east-1
secret_access_key = XXX
access_key_id = XXX
endpoint = https://storage.kapsa.io
no_check_bucket = true

[s3drive_xx]
type = alias
remote = s3drive_auto_62ukCdCCwCbOZVVlsgzKs6:bucket

A log from the command that you were trying to run with the -vv flag

2025/04/09 09:43:13 DEBUG : rclone: Version "v1.70.0-beta.8638.4d38424e6" starting with parameters ["rclone" "bisync" "/home/xx/ProtonDrive" "ProtonDrive:" "--create-empty-src-dirs" "--compare" "size,modtime,checksum" "--slow-hash-sync-only" "--resilient" "-MvP" "--fix-case" "--resync" "-vv" "--log-file=/home/xx/Dokumente/rclonelog.txt"]
2025/04/09 09:43:13 DEBUG : Creating backend with remote "/home/xx/ProtonDrive"
2025/04/09 09:43:13 DEBUG : Using config file from "/home/xx/.config/rclone/rclone.conf"
2025/04/09 09:43:13 DEBUG : Creating backend with remote "ProtonDrive:"
2025/04/09 09:43:13 DEBUG : proton drive root link ID '': Has cached credentials
2025/04/09 09:43:15 DEBUG : proton drive root link ID '': Used cached credential to initialize the ProtonDrive API
2025/04/09 09:43:15 NOTICE: bisync is IN BETA. Don't use in production!
2025/04/09 09:43:15 INFO  : Slow hash detected on Path1. Will ignore checksum due to slow-hash settings
2025/04/09 09:43:15 NOTICE: proton drive root link ID '': will use sha1 for same-side diffs on Path2 only
2025/04/09 09:43:15 NOTICE: Ignoring checksums during --resync as --slow-hash-sync-only is set.
2025/04/09 09:43:15 INFO  : Bisyncing with Comparison Settings: 
{
	"Modtime": true,
	"Size": true,
	"Checksum": true,
	"HashType1": 0,
	"HashType2": 2,
	"NoSlowHash": false,
	"SlowHashSyncOnly": true,
	"SlowHashDetected": true,
	"DownloadHash": false
}
2025/04/09 09:43:15 DEBUG : defaulting to --resync-mode path1 as --resync is set
2025/04/09 09:43:15 DEBUG : Lock file created: /home/xx/.cache/rclone/bisync/home_xx_ProtonDrive..ProtonDrive_.lck
2025/04/09 09:43:15 INFO  : Synching Path1 "/home/xx/ProtonDrive/" with Path2 "ProtonDrive:/"
2025/04/09 09:43:15 DEBUG : : updated backup-dir for Path1
2025/04/09 09:43:15 DEBUG : : updated backup-dir for Path2
2025/04/09 09:43:15 INFO  : Copying Path2 files to Path1
2025/04/09 09:43:15 INFO  : - Path2             Resync is copying files to                  - Path1
2025/04/09 09:43:15 DEBUG : filterSync.Opt.MinSize: off
2025/04/09 09:43:15 DEBUG : : updated backup-dir for Path1
2025/04/09 09:43:15 DEBUG : overriding equal
2025/04/09 09:43:16 DEBUG : File1: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
2025/04/09 09:43:16 DEBUG : File3: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: file sha1 digest missing
2025/04/09 09:43:16 DEBUG : writing result: 
{
	"Src": "ProtonDrive:/",
	"Dst": "",
	"Name": "File2withGermanäinName",
	"AltName": "",
	"Size": 0,
	"Modtime": "2025-04-08T16:02:44Z",
	"Hash": "",
	"Flags": "-",
	"Sigil": 43,
	"Err": null,
	"Winner": {
		"Obj": {},
		"Side": "src",
		"Err": null
	},
	"IsWinner": true,
	"IsSrc": true,
	"IsDst": false,
	"Origin": "sync"
}
2025/04/09 09:43:16 DEBUG : writing result: 
{
	"Src": "ProtonDrive:/",
	"Dst": "",
	"Name": "File2withGermanäinName",
	"AltName": "",
	"Size": 0,
	"Modtime": "2025-04-08T16:02:44Z",
	"Hash": "",
	"Flags": "-",
	"Sigil": 43,
	"Err": null,
	"Winner": {
		"Obj": {},
		"Side": "src",
		"Err": null
	},
	"IsWinner": false,
	"IsSrc": false,
	"IsDst": true,
	"Origin": "sync"
}
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Need to transfer - File not found at Destination
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
2025/04/09 09:43:16 DEBUG : File1: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
2025/04/09 09:43:16 DEBUG : File1: file sha1 digest missing
2025/04/09 09:43:16 DEBUG : writing result: 
{
	"Src": "ProtonDrive:/",
	"Dst": "",
	"Name": "File1",
	"AltName": "",
	"Size": 0,
	"Modtime": "2025-04-09T07:17:42Z",
	"Hash": "",
	"Flags": "-",
	"Sigil": 43,
	"Err": null,
	"Winner": {
		"Obj": {},
		"Side": "src",
		"Err": null
	},
	"IsWinner": true,
	"IsSrc": true,
	"IsDst": false,
	"Origin": "sync"
}
2025/04/09 09:43:16 DEBUG : writing result: 
{
	"Src": "ProtonDrive:/",
	"Dst": "",
	"Name": "File1",
	"AltName": "",
	"Size": 0,
	"Modtime": "2025-04-09T07:17:42Z",
	"Hash": "",
	"Flags": "-",
	"Sigil": 43,
	"Err": null,
	"Winner": {
		"Obj": {},
		"Side": "src",
		"Err": null
	},
	"IsWinner": false,
	"IsSrc": false,
	"IsDst": true,
	"Origin": "sync"
}
2025/04/09 09:43:16 DEBUG : File1: Need to transfer - File not found at Destination
2025/04/09 09:43:16 DEBUG : File1: Original file size missing
2025/04/09 09:43:16 DEBUG : File3: Original file size missing
2025/04/09 09:43:16 DEBUG : File1: Original file size missing
2025/04/09 09:43:16 DEBUG : File1: Original file size missing
2025/04/09 09:43:16 DEBUG : File1: Original file size missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: file sha1 digest missing
2025/04/09 09:43:16 DEBUG : File2withGermanäinName: Original file size missing
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x19b90c6]

goroutine 85 [running]:
github.com/rclone/rclone/backend/protondrive.(*Object).Open(0xc000e135e0, {0x2e49be0, 0xc0008909b0}, {0xc000d86410, 0x1, 0xc000dee3a0?})
	github.com/rclone/rclone/backend/protondrive/protondrive.go:877 +0x46
github.com/rclone/rclone/fs/operations.(*ReOpen).open(0xc000840540)
	github.com/rclone/rclone/fs/operations/reopen.go:147 +0x109
github.com/rclone/rclone/fs/operations.NewReOpen({0x2e49be0, 0xc0008909b0}, {0x2e62b70, 0xc000e135e0}, 0xa, {0xc000d863e0, 0x1, 0x1})
	github.com/rclone/rclone/fs/operations/reopen.go:102 +0x4f5
github.com/rclone/rclone/fs/operations.Open({0x2e49be0, 0xc0008909b0}, {0x2e62b70, 0xc000e135e0}, {0xc000d863e0, 0x1, 0x1})
	github.com/rclone/rclone/fs/operations/reopen.go:124 +0x6b
github.com/rclone/rclone/fs/operations.(*copy).manualCopy(0xc00099a630, {0x2e49be0, 0xc0008909b0})
	github.com/rclone/rclone/fs/operations/copy.go:261 +0x4dc
github.com/rclone/rclone/fs/operations.(*copy).copy(0xc00099a630, {0x2e49be0, 0xc0008909b0})
	github.com/rclone/rclone/fs/operations/copy.go:310 +0x170
github.com/rclone/rclone/fs/operations.Copy({0x2e49be0, 0xc0008909b0}, {0x2e62010, 0xc000842000}, {0x0, 0x0}, {0xc000ad4540, 0x14}, {0x2e62b70, 0xc000e135e0})
	github.com/rclone/rclone/fs/operations/copy.go:412 +0x473
github.com/rclone/rclone/fs/sync.(*syncCopyMove).pairCopyOrMove(0xc0002c9688, {0x2e49be0, 0xc0008909b0}, 0xc000890910, {0x2e62010, 0xc000842000}, 0x32, 0x50d01010df78648?)
	github.com/rclone/rclone/fs/sync/sync.go:502 +0x1fe
created by github.com/rclone/rclone/fs/sync.(*syncCopyMove).startTransfers in goroutine 1
	github.com/rclone/rclone/fs/sync/sync.go:532 +0x7d

welcome to the forum,

sorry, a bit confused, as the command you posted, does not use s3app?


your issue is not unique, many similar posts in the forum.

afiak, the protondrive backend appears to be dead for many months now, the author has not visited the forum in a year. there are many bugs at github that are not getting fixed.

but hopefully, @nielash , the author of rclone bisync will have a solution.


one alternative option might be to to run rclone mount and use whatever bisync tool you want.

Hi Jojo,

the command does not use the s3app to my understanding, I tried s3app and the configuration support there to root out a mistake on my side.

Thanks for the tips, I guess I will have to find another way then :-/

welcome. i am no expert at this, so we need to wait for others to comment and hopefully offer a solution.

^ Unfortunately, this is the real problem. ProtonDrive is unstable and not regularly maintained. I would not use it for anything important at the moment.

That said, there are workarounds listed here that some users have had success with. May or may not be worth a try:

Oh wow, this solves the issue.
With

--min-size 1b

my test was successful, now the question is, if bisync is reliable enough and I guess "not really" is the answer.

The problem is protondrive, not bisync.