diff --git a/cmd/bisync/cmd.go b/cmd/bisync/cmd.go index fd1f35e17..996ec442c 100644 --- a/cmd/bisync/cmd.go +++ b/cmd/bisync/cmd.go @@ -141,7 +141,7 @@ func init() { flags.BoolVarP(cmdFlags, &tzLocal, "localtime", "", tzLocal, "Use local time in listings (default: UTC)", "") flags.BoolVarP(cmdFlags, &Opt.NoCleanup, "no-cleanup", "", Opt.NoCleanup, "Retain working files (useful for troubleshooting and testing).", "") flags.BoolVarP(cmdFlags, &Opt.IgnoreListingChecksum, "ignore-listing-checksum", "", Opt.IgnoreListingChecksum, "Do not use checksums for listings (add --ignore-checksum to additionally skip post-copy checksum checks)", "") - flags.BoolVarP(cmdFlags, &Opt.Resilient, "resilient", "", Opt.Resilient, "Allow future runs to retry after certain less-serious errors, instead of requiring --resync. Use at your own risk!", "") + flags.BoolVarP(cmdFlags, &Opt.Resilient, "resilient", "", Opt.Resilient, "Allow future runs to retry after certain less-serious errors, instead of requiring --resync.", "") flags.BoolVarP(cmdFlags, &Opt.Recover, "recover", "", Opt.Recover, "Automatically recover from interruptions without requiring --resync.", "") flags.StringVarP(cmdFlags, &Opt.CompareFlag, "compare", "", Opt.CompareFlag, "Comma-separated list of bisync-specific compare options ex. 'size,modtime,checksum' (default: 'size,modtime')", "") flags.BoolVarP(cmdFlags, &Opt.Compare.NoSlowHash, "no-slow-hash", "", Opt.Compare.NoSlowHash, "Ignore listing checksums only on backends where they are slow", "") @@ -163,7 +163,6 @@ var commandDefinition = &cobra.Command{ Annotations: map[string]string{ "versionIntroduced": "v1.58", "groups": "Filter,Copy,Important", - "status": "Beta", }, RunE: func(command *cobra.Command, args []string) error { // NOTE: avoid putting too much handling here, as it won't apply to the rc. @@ -191,7 +190,6 @@ var commandDefinition = &cobra.Command{ } } - fs.Logf(nil, "bisync is IN BETA. Don't use in production!") cmd.Run(false, true, command, func() error { err := Bisync(ctx, fs1, fs2, &opt) if err == ErrBisyncAborted { diff --git a/cmd/bisync/help.go b/cmd/bisync/help.go index 68ad27570..64677dd89 100644 --- a/cmd/bisync/help.go +++ b/cmd/bisync/help.go @@ -35,8 +35,7 @@ var rcHelp = makeHelp(`This takes the following parameters - removeEmptyDirs - remove empty directories at the final cleanup step - filtersFile - read filtering patterns from a file - ignoreListingChecksum - Do not use checksums for listings -- resilient - Allow future runs to retry after certain less-serious errors, instead of requiring resync. - Use at your own risk! +- resilient - Allow future runs to retry after certain less-serious errors, instead of requiring resync. - workdir - server directory for history files (default: |~/.cache/rclone/bisync|) - backupdir1 - --backup-dir for Path1. Must be a non-overlapping path on the same remote. - backupdir2 - --backup-dir for Path2. Must be a non-overlapping path on the same remote. @@ -56,7 +55,7 @@ On each successive run it will: Changes include |New|, |Newer|, |Older|, and |Deleted| files. - Propagate changes on Path1 to Path2, and vice-versa. -Bisync is **in beta** and is considered an **advanced command**, so use with care. +Bisync is considered an **advanced command**, so use with care. Make sure you have read and understood the entire [manual](https://rclone.org/bisync) (especially the [Limitations](https://rclone.org/bisync/#limitations) section) before using, or data loss can result. Questions can be asked in the [Rclone Forum](https://forum.rclone.org/). diff --git a/docs/content/bisync.md b/docs/content/bisync.md index 1d7bef443..7cfe63fce 100644 --- a/docs/content/bisync.md +++ b/docs/content/bisync.md @@ -2,12 +2,11 @@ title: "Bisync" description: "Bidirectional cloud sync solution in rclone" versionIntroduced: "v1.58" -status: Beta --- ## Bisync -`bisync` is **in beta** and is considered an **advanced command**, so use with care. +`bisync` is considered an **advanced command**, so use with care. Make sure you have read and understood the entire [manual](https://rclone.org/bisync) (especially the [Limitations](#limitations) section) before using, or data loss can result. Questions can be asked in the @@ -117,7 +116,7 @@ Optional Flags: --no-slow-hash Ignore listing checksums only on backends where they are slow --recover Automatically recover from interruptions without requiring --resync. --remove-empty-dirs Remove ALL empty directories at the final cleanup step. - --resilient Allow future runs to retry after certain less-serious errors, instead of requiring --resync. Use at your own risk! + --resilient Allow future runs to retry after certain less-serious errors, instead of requiring --resync. -1, --resync Performs the resync run. Equivalent to --resync-mode path1. Consider using --verbose or --dry-run first. --resync-mode string During resync, prefer the version that is: path1, path2, newer, older, larger, smaller (default: path1 if --resync, otherwise none for no resync.) (default "none") --retries int Retry operations this many times if they fail (requires --resilient). (default 3) @@ -740,8 +739,6 @@ See also: [Concurrent modifications](#concurrent-modifications), [`--resilient`] ### --resilient -***Caution: this is an experimental feature. Use at your own risk!*** - By default, most errors or interruptions will cause bisync to abort and require [`--resync`](#resync) to recover. This is a safety feature, to prevent bisync from running again until a user checks things out. However, in some @@ -1040,22 +1037,62 @@ expire on its own, if using `--max-lock`.) ### Supported backends -Bisync is considered *BETA* and has been tested with the following backends: +Bisync is integration-tested against all rclone backends to verify compatibility. +Most backends (including all backends not listed below) are deemed fully +supported with no known issues. Occasionally, however, these tests reveal issues +with particular backends, usually related to a provider-specific limitation +beyond rclone's control (for example, disallowed special characters and filename +encodings.) -- Local filesystem -- Google Drive -- Dropbox -- OneDrive -- S3 -- SFTP -- Yandex Disk -- Crypt +The following backends have known issues that need more investigation: -It has not been fully tested with other services yet. -If it works, or sorta works, please let us know and we'll update the list. -Run the test suite to check for proper operation as described below. + +- `TestGoFile` (`gofile`) + - [`TestBisyncRemoteLocal/all_changed`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt) + - [`TestBisyncRemoteLocal/backupdir`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt) + - [`TestBisyncRemoteLocal/basic`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt) + - [`TestBisyncRemoteLocal/changes`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt) + - [`TestBisyncRemoteLocal/check_access`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt) + - [78 more](https://pub.rclone.org/integration-tests/current/) +- Updated: 2025-08-21-010015 + -The first release of `rclone bisync` required both underlying backends to support +The following backends either have not been tested recently or have known issues +that are deemed unfixable for the time being: + + +- `TestCache` (`cache`) +- `TestFileLu` (`filelu`) +- `TestFilesCom` (`filescom`) +- `TestImageKit` (`imagekit`) +- `TestJottacloud` (`jottacloud`) +- `TestLinkbox` (`linkbox`) +- `TestMailru` (`mailru`) +- `TestMega` (`mega`) +- `TestOpenDrive` (`opendrive`) +- `TestOracleObjectStorage` (`oracleobjectstorage`) +- `TestPikPak` (`pikpak`) +- `TestPixeldrain` (`pixeldrain`) +- `TestProtonDrive` (`protondrive`) +- `TestPutio` (`putio`) +- `TestQuatrix` (`quatrix`) +- `TestS3GCS` (`s3`) + - `TestBisyncRemoteRemote/extended_filenames` +- `TestS3Rclone` (`s3`) +- `TestSFTPRsyncNet` (`sftp`) +- `TestStorj` (`storj`) +- `TestWebdavInfiniteScale` (`webdav`) +- `TestWebdavNextcloud` (`webdav`) +- `TestWebdavOwncloud` (`webdav`) +- `TestnStorage` (`netstorage`) + +([more info](https://github.com/rclone/rclone/blob/master/fstest/test_all/config.yaml)) + +The above lists are updated for each stable release of rclone. For test results +updated nightly based on the latest beta, visit rclone's [integration test +status page](https://pub.rclone.org/integration-tests/current/). + +Early beta versions of `rclone bisync` required both underlying backends to support modification times, and refused to run otherwise. This limitation has been lifted as of `v1.66`, as bisync now supports comparing checksum and/or size instead of (or in addition to) modtime. @@ -1861,6 +1898,8 @@ about *Unison* and synchronization in general. ### `v1.71` +- `bisync` is now officially released from beta. + - Fixed an issue causing hash type to be set incorrectly if `path2` had slow hashes and `--no-slow-hash` or `--slow-hash-sync-only` was in use.