First things first, this message:
2025/03/04 13:43:36 DEBUG : There are potential conflicts to check.
means that the same file is new or changed on both sides, relative to the prior sync. Instead of automatically assuming this is a conflict, we attempt to compare the current file on both sides (using something similar to rclone check
) to see if they are equal. This is because if they are equal (i.e. the same new version was independently copied to both sides), we can avoid creating a .conflict
duplicate where it isn't actually necessary.
This works perfectly when both sides support hashes, but presents a bit of a problem for crypt
, which does not support hashes. For example, if you run a normal rclone check
on two remotes, where one of them is a crypt
, you'll see you get a message like ERROR : No common hash found - not using a hash for checks
. Since rclone check
never considers modtime
, it ends up essentially falling back to --size-only
in this scenario. This is not ideal for our purposes, because it is possible for two files to have the same size but different content. (Technically this is also true for hashes like md5
, but much less probable -- making hash
a much better choice than size
for equality checking.) Therefore, we don't want to assume that two files are equal just because they have the same size.
Rclone has cryptcheck
for this purpose (robustly comparing crypt to non-crypt), and so bisync attempts to use it in this situation. This is what the following message means:
2025/03/04 13:43:36 INFO : Encrypted drive 'idrive-sync-crypt:/': Crypt detected! Using cryptcheck instead of check. (Use --size-only or --ignore-checksum to disable)
However, an inherent side-effect of cryptcheck
is that it has to basically read (i.e. download) the entire file on the non-crypt side and encrypt/hash it in memory on the fly. This can be quite slow, especially for large files. This is very likely why your sync slows to a crawl and doesn't complete for hours. This is also why you didn't experience this when using hasher
-- because hasher
can just use normal check
with its stored hashes (which are very quick to retrieve).
Essentially, when bisyncing with crypt
, users have to choose a tradeoff between:
- Default (detecting false conflicts is highly accurate, but can be slow)
- Use
--size-only
or --ignore-checksum
(less accurate, but much faster)
- Wrap your
crypt
in hasher
(accurate and fast, but less convenient as it requires the hasher
overlay)
Personally I go with the hasher
option for my needs. But I can also imagine use cases where the default would make sense (ex. bisyncing a repo of text files where size is small but accuracy is paramount.)