github.com/xhghs/rclone@v1.51.1-0.20200430155106-e186a28cced8/docs/content/overview.md (about) 1 --- 2 title: "Overview of cloud storage systems" 3 description: "Overview of cloud storage systems" 4 type: page 5 date: "2019-02-25" 6 --- 7 8 # Overview of cloud storage systems # 9 10 Each cloud storage system is slightly different. Rclone attempts to 11 provide a unified interface to them, but some underlying differences 12 show through. 13 14 ## Features ## 15 16 Here is an overview of the major features of each cloud storage system. 17 18 | Name | Hash | ModTime | Case Insensitive | Duplicate Files | MIME Type | 19 | ---------------------------- |:-----------:|:-------:|:----------------:|:---------------:|:---------:| 20 | 1Fichier | Whirlpool | No | No | Yes | R | 21 | Amazon Drive | MD5 | No | Yes | No | R | 22 | Amazon S3 | MD5 | Yes | No | No | R/W | 23 | Backblaze B2 | SHA1 | Yes | No | No | R/W | 24 | Box | SHA1 | Yes | Yes | No | - | 25 | Citrix ShareFile | MD5 | Yes | Yes | No | - | 26 | Dropbox | DBHASH † | Yes | Yes | No | - | 27 | FTP | - | No | No | No | - | 28 | Google Cloud Storage | MD5 | Yes | No | No | R/W | 29 | Google Drive | MD5 | Yes | No | Yes | R/W | 30 | Google Photos | - | No | No | Yes | R | 31 | HTTP | - | No | No | No | R | 32 | Hubic | MD5 | Yes | No | No | R/W | 33 | Jottacloud | MD5 | Yes | Yes | No | R/W | 34 | Koofr | MD5 | No | Yes | No | - | 35 | Mail.ru Cloud | Mailru ‡‡‡ | Yes | Yes | No | - | 36 | Mega | - | No | No | Yes | - | 37 | Memory | MD5 | Yes | No | No | - | 38 | Microsoft Azure Blob Storage | MD5 | Yes | No | No | R/W | 39 | Microsoft OneDrive | SHA1 ‡‡ | Yes | Yes | No | R | 40 | OpenDrive | MD5 | Yes | Yes | No | - | 41 | Openstack Swift | MD5 | Yes | No | No | R/W | 42 | pCloud | MD5, SHA1 | Yes | No | No | W | 43 | premiumize.me | - | No | Yes | No | R | 44 | put.io | CRC-32 | Yes | No | Yes | R | 45 | QingStor | MD5 | No | No | No | R/W | 46 | SFTP | MD5, SHA1 ‡ | Yes | Depends | No | - | 47 | SugarSync | - | No | No | No | - | 48 | WebDAV | MD5, SHA1 ††| Yes ††† | Depends | No | - | 49 | Yandex Disk | MD5 | Yes | No | No | R/W | 50 | The local filesystem | All | Yes | Depends | No | - | 51 52 ### Hash ### 53 54 The cloud storage system supports various hash types of the objects. 55 The hashes are used when transferring data as an integrity check and 56 can be specifically used with the `--checksum` flag in syncs and in 57 the `check` command. 58 59 To use the verify checksums when transferring between cloud storage 60 systems they must support a common hash type. 61 62 † Note that Dropbox supports [its own custom 63 hash](https://www.dropbox.com/developers/reference/content-hash). 64 This is an SHA256 sum of all the 4MB block SHA256s. 65 66 ‡ SFTP supports checksums if the same login has shell access and `md5sum` 67 or `sha1sum` as well as `echo` are in the remote's PATH. 68 69 †† WebDAV supports hashes when used with Owncloud and Nextcloud only. 70 71 ††† WebDAV supports modtimes when used with Owncloud and Nextcloud only. 72 73 ‡‡ Microsoft OneDrive Personal supports SHA1 hashes, whereas OneDrive 74 for business and SharePoint server support Microsoft's own 75 [QuickXorHash](https://docs.microsoft.com/en-us/onedrive/developer/code-snippets/quickxorhash). 76 77 ‡‡‡ Mail.ru uses its own modified SHA1 hash 78 79 ### ModTime ### 80 81 The cloud storage system supports setting modification times on 82 objects. If it does then this enables a using the modification times 83 as part of the sync. If not then only the size will be checked by 84 default, though the MD5SUM can be checked with the `--checksum` flag. 85 86 All cloud storage systems support some kind of date on the object and 87 these will be set when transferring from the cloud storage system. 88 89 ### Case Insensitive ### 90 91 If a cloud storage systems is case sensitive then it is possible to 92 have two files which differ only in case, eg `file.txt` and 93 `FILE.txt`. If a cloud storage system is case insensitive then that 94 isn't possible. 95 96 This can cause problems when syncing between a case insensitive 97 system and a case sensitive system. The symptom of this is that no 98 matter how many times you run the sync it never completes fully. 99 100 The local filesystem and SFTP may or may not be case sensitive 101 depending on OS. 102 103 * Windows - usually case insensitive, though case is preserved 104 * OSX - usually case insensitive, though it is possible to format case sensitive 105 * Linux - usually case sensitive, but there are case insensitive file systems (eg FAT formatted USB keys) 106 107 Most of the time this doesn't cause any problems as people tend to 108 avoid files whose name differs only by case even on case sensitive 109 systems. 110 111 ### Duplicate files ### 112 113 If a cloud storage system allows duplicate files then it can have two 114 objects with the same name. 115 116 This confuses rclone greatly when syncing - use the `rclone dedupe` 117 command to rename or remove duplicates. 118 119 ### Restricted filenames ### 120 121 Some cloud storage systems might have restrictions on the characters 122 that are usable in file or directory names. 123 When `rclone` detects such a name during a file upload, it will 124 transparently replace the restricted characters with similar looking 125 Unicode characters. 126 127 This process is designed to avoid ambiguous file names as much as 128 possible and allow to move files between many cloud storage systems 129 transparently. 130 131 The name shown by `rclone` to the user or during log output will only 132 contain a minimal set of [replaced characters](#restricted-characters) 133 to ensure correct formatting and not necessarily the actual name used 134 on the cloud storage. 135 136 This transformation is reversed when downloading a file or parsing 137 `rclone` arguments. 138 For example, when uploading a file named `my file?.txt` to Onedrive 139 will be displayed as `my file?.txt` on the console, but stored as 140 `my file?.txt` (the `?` gets replaced by the similar looking `?` 141 character) to Onedrive. 142 The reverse transformation allows to read a file`unusual/name.txt` 143 from Google Drive, by passing the name `unusual/name.txt` (the `/` needs 144 to be replaced by the similar looking `/` character) on the command line. 145 146 #### Default restricted characters {#restricted-characters} 147 148 The table below shows the characters that are replaced by default. 149 150 When a replacement character is found in a filename, this character 151 will be escaped with the `‛` character to avoid ambiguous file names. 152 (e.g. a file named `␀.txt` would shown as `‛␀.txt`) 153 154 Each cloud storage backend can use a different set of characters, 155 which will be specified in the documentation for each backend. 156 157 | Character | Value | Replacement | 158 | --------- |:-----:|:-----------:| 159 | NUL | 0x00 | ␀ | 160 | SOH | 0x01 | ␁ | 161 | STX | 0x02 | ␂ | 162 | ETX | 0x03 | ␃ | 163 | EOT | 0x04 | ␄ | 164 | ENQ | 0x05 | ␅ | 165 | ACK | 0x06 | ␆ | 166 | BEL | 0x07 | ␇ | 167 | BS | 0x08 | ␈ | 168 | HT | 0x09 | ␉ | 169 | LF | 0x0A | ␊ | 170 | VT | 0x0B | ␋ | 171 | FF | 0x0C | ␌ | 172 | CR | 0x0D | ␍ | 173 | SO | 0x0E | ␎ | 174 | SI | 0x0F | ␏ | 175 | DLE | 0x10 | ␐ | 176 | DC1 | 0x11 | ␑ | 177 | DC2 | 0x12 | ␒ | 178 | DC3 | 0x13 | ␓ | 179 | DC4 | 0x14 | ␔ | 180 | NAK | 0x15 | ␕ | 181 | SYN | 0x16 | ␖ | 182 | ETB | 0x17 | ␗ | 183 | CAN | 0x18 | ␘ | 184 | EM | 0x19 | ␙ | 185 | SUB | 0x1A | ␚ | 186 | ESC | 0x1B | ␛ | 187 | FS | 0x1C | ␜ | 188 | GS | 0x1D | ␝ | 189 | RS | 0x1E | ␞ | 190 | US | 0x1F | ␟ | 191 | / | 0x2F | / | 192 | DEL | 0x7F | ␡ | 193 194 The default encoding will also encode these file names as they are 195 problematic with many cloud storage systems. 196 197 | File name | Replacement | 198 | --------- |:-----------:| 199 | . | . | 200 | .. | .. | 201 202 #### Invalid UTF-8 bytes {#invalid-utf8} 203 204 Some backends only support a sequence of well formed UTF-8 bytes 205 as file or directory names. 206 207 In this case all invalid UTF-8 bytes will be replaced with a quoted 208 representation of the byte value to allow uploading a file to such a 209 backend. For example, the invalid byte `0xFE` will be encoded as `‛FE`. 210 211 A common source of invalid UTF-8 bytes are local filesystems, that store 212 names in a different encoding than UTF-8 or UTF-16, like latin1. See the 213 [local filenames](/local/#filenames) section for details. 214 215 #### Encoding option {#encoding} 216 217 Most backends have an encoding options, specified as a flag 218 `--backend-encoding` where `backend` is the name of the backend, or as 219 a config parameter `encoding` (you'll need to select the Advanced 220 config in `rclone config` to see it). 221 222 This will have default value which encodes and decodes characters in 223 such a way as to preserve the maximum number of characters (see 224 above). 225 226 However this can be incorrect in some scenarios, for example if you 227 have a Windows file system with characters such as `*` and `?` that 228 you want to remain as those characters on the remote rather than being 229 translated to `*` and `?`. 230 231 The `--backend-encoding` flags allow you to change that. You can 232 disable the encoding completely with `--backend-encoding None` or set 233 `encoding = None` in the config file. 234 235 Encoding takes a comma separated list of encodings. You can see the 236 list of all available characters by passing an invalid value to this 237 flag, eg `--local-encoding "help"` and `rclone help flags encoding` 238 will show you the defaults for the backends. 239 240 | Encoding | Characters | 241 | --------- | ---------- | 242 | Asterisk | `*` | 243 | BackQuote | `` ` `` | 244 | BackSlash | `\` | 245 | Colon | `:` | 246 | CrLf | CR 0x0D, LF 0x0A | 247 | Ctl | All control characters 0x00-0x1F | 248 | Del | DEL 0x7F | 249 | Dollar | `$` | 250 | Dot | `.` | 251 | DoubleQuote | `"` | 252 | Hash | `#` | 253 | InvalidUtf8 | An invalid UTF-8 character (eg latin1) | 254 | LeftCrLfHtVt | CR 0x0D, LF 0x0A,HT 0x09, VT 0x0B on the left of a string | 255 | LeftPeriod | `.` on the left of a string | 256 | LeftSpace | SPACE on the left of a string | 257 | LeftTilde | `~` on the left of a string | 258 | LtGt | `<`, `>` | 259 | None | No characters are encoded | 260 | Percent | `%` | 261 | Pipe | <code>\|</code> | 262 | Question | `?` | 263 | RightCrLfHtVt | CR 0x0D, LF 0x0A, HT 0x09, VT 0x0B on the right of a string | 264 | RightPeriod | `.` on the right of a string | 265 | RightSpace | SPACE on the right of a string | 266 | SingleQuote | `'` | 267 | Slash | `/` | 268 269 To take a specific example, the FTP backend's default encoding is 270 271 --ftp-encoding "Slash,Del,Ctl,RightSpace,Dot" 272 273 However, let's say the FTP server is running on Windows and can't have 274 any of the invalid Windows characters in file names. You are backing 275 up Linux servers to this FTP server which do have those characters in 276 file names. So you would add the Windows set which are 277 278 Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot 279 280 to the existing ones, giving: 281 282 Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot,Del,RightSpace 283 284 This can be specified using the `--ftp-encoding` flag or using an `encoding` parameter in the config file. 285 286 Or let's say you have a Windows server but you want to preserve `*` 287 and `?`, you would then have this as the encoding (the Windows 288 encoding minus `Asterisk` and `Question`). 289 290 Slash,LtGt,DoubleQuote,Colon,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot 291 292 This can be specified using the `--local-encoding` flag or using an 293 `encoding` parameter in the config file. 294 295 ### MIME Type ### 296 297 MIME types (also known as media types) classify types of documents 298 using a simple text classification, eg `text/html` or 299 `application/pdf`. 300 301 Some cloud storage systems support reading (`R`) the MIME type of 302 objects and some support writing (`W`) the MIME type of objects. 303 304 The MIME type can be important if you are serving files directly to 305 HTTP from the storage system. 306 307 If you are copying from a remote which supports reading (`R`) to a 308 remote which supports writing (`W`) then rclone will preserve the MIME 309 types. Otherwise they will be guessed from the extension, or the 310 remote itself may assign the MIME type. 311 312 ## Optional Features ## 313 314 All the remotes support a basic set of features, but there are some 315 optional features supported by some remotes used to make some 316 operations more efficient. 317 318 | Name | Purge | Copy | Move | DirMove | CleanUp | ListR | StreamUpload | LinkSharing | About | EmptyDir | 319 | ---------------------------- |:-----:|:----:|:----:|:-------:|:-------:|:-----:|:------------:|:------------:|:-----:| :------: | 320 | 1Fichier | No | No | No | No | No | No | No | No | No | Yes | 321 | Amazon Drive | Yes | No | Yes | Yes | No [#575](https://github.com/rclone/rclone/issues/575) | No | No | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | Yes | 322 | Amazon S3 | No | Yes | No | No | No | Yes | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | No | 323 | Backblaze B2 | No | Yes | No | No | Yes | Yes | Yes | Yes | No | No | 324 | Box | Yes | Yes | Yes | Yes | No [#575](https://github.com/rclone/rclone/issues/575) | No | Yes | Yes | No | Yes | 325 | Citrix ShareFile | Yes | Yes | Yes | Yes | No | No | Yes | No | No | Yes | 326 | Dropbox | Yes | Yes | Yes | Yes | No [#575](https://github.com/rclone/rclone/issues/575) | No | Yes | Yes | Yes | Yes | 327 | FTP | No | No | Yes | Yes | No | No | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | Yes | 328 | Google Cloud Storage | Yes | Yes | No | No | No | Yes | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | No | 329 | Google Drive | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 330 | Google Photos | No | No | No | No | No | No | No | No | No | No | 331 | HTTP | No | No | No | No | No | No | No | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | Yes | 332 | Hubic | Yes † | Yes | No | No | No | Yes | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | No | 333 | Jottacloud | Yes | Yes | Yes | Yes | No | Yes | No | Yes | Yes | Yes | 334 | Mail.ru Cloud | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | 335 | Mega | Yes | No | Yes | Yes | Yes | No | No | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | Yes | 336 | Memory | No | Yes | No | No | No | Yes | Yes | No | No | No | 337 | Microsoft Azure Blob Storage | Yes | Yes | No | No | No | Yes | No | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | No | 338 | Microsoft OneDrive | Yes | Yes | Yes | Yes | No [#575](https://github.com/rclone/rclone/issues/575) | No | No | Yes | Yes | Yes | 339 | OpenDrive | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | 340 | Openstack Swift | Yes † | Yes | No | No | No | Yes | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | No | 341 | pCloud | Yes | Yes | Yes | Yes | Yes | No | No | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | Yes | 342 | premiumize.me | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes | 343 | put.io | Yes | No | Yes | Yes | Yes | No | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | Yes | 344 | QingStor | No | Yes | No | No | No | Yes | No | No [#2178](https://github.com/rclone/rclone/issues/2178) | No | No | 345 | SFTP | No | No | Yes | Yes | No | No | Yes | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | Yes | 346 | SugarSync | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | 347 | WebDAV | Yes | Yes | Yes | Yes | No | No | Yes ‡ | No [#2178](https://github.com/rclone/rclone/issues/2178) | Yes | Yes | 348 | Yandex Disk | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | 349 | The local filesystem | Yes | No | Yes | Yes | No | No | Yes | No | Yes | Yes | 350 351 ### Purge ### 352 353 This deletes a directory quicker than just deleting all the files in 354 the directory. 355 356 † Note Swift and Hubic implement this in order to delete directory 357 markers but they don't actually have a quicker way of deleting files 358 other than deleting them individually. 359 360 ‡ StreamUpload is not supported with Nextcloud 361 362 ### Copy ### 363 364 Used when copying an object to and from the same remote. This known 365 as a server side copy so you can copy a file without downloading it 366 and uploading it again. It is used if you use `rclone copy` or 367 `rclone move` if the remote doesn't support `Move` directly. 368 369 If the server doesn't support `Copy` directly then for copy operations 370 the file is downloaded then re-uploaded. 371 372 ### Move ### 373 374 Used when moving/renaming an object on the same remote. This is known 375 as a server side move of a file. This is used in `rclone move` if the 376 server doesn't support `DirMove`. 377 378 If the server isn't capable of `Move` then rclone simulates it with 379 `Copy` then delete. If the server doesn't support `Copy` then rclone 380 will download the file and re-upload it. 381 382 ### DirMove ### 383 384 This is used to implement `rclone move` to move a directory if 385 possible. If it isn't then it will use `Move` on each file (which 386 falls back to `Copy` then download and upload - see `Move` section). 387 388 ### CleanUp ### 389 390 This is used for emptying the trash for a remote by `rclone cleanup`. 391 392 If the server can't do `CleanUp` then `rclone cleanup` will return an 393 error. 394 395 ### ListR ### 396 397 The remote supports a recursive list to list all the contents beneath 398 a directory quickly. This enables the `--fast-list` flag to work. 399 See the [rclone docs](/docs/#fast-list) for more details. 400 401 ### StreamUpload ### 402 403 Some remotes allow files to be uploaded without knowing the file size 404 in advance. This allows certain operations to work without spooling the 405 file to local disk first, e.g. `rclone rcat`. 406 407 ### LinkSharing ### 408 409 Sets the necessary permissions on a file or folder and prints a link 410 that allows others to access them, even if they don't have an account 411 on the particular cloud provider. 412 413 ### About ### 414 415 This is used to fetch quota information from the remote, like bytes 416 used/free/quota and bytes used in the trash. 417 418 This is also used to return the space used, available for `rclone mount`. 419 420 If the server can't do `About` then `rclone about` will return an 421 error. 422 423 ### EmptyDir ### 424 425 The remote supports empty directories. See [Limitations](/bugs/#limitations) 426 for details. Most Object/Bucket based remotes do not support this.