rclone存储概览

1,292次阅读
没有评论

共计 10528 个字符,预计需要花费 27 分钟才能阅读完成。

云存储系统概述

每个云存储系统都略有不同。 Rclone试图为它们提供一个统一的接口,但一些潜在的差异显现出来。

Features

以下是每个云存储系统的主要特点的概述。

Name Hash ModTime Case Insensitive Duplicate Files MIME Type Metadata
1Fichier Whirlpool No Yes R
Akamai Netstorage MD5, SHA256 R/W No No R
Amazon Drive MD5 Yes No R
Amazon S3 (or S3 compatible) MD5 R/W No No R/W RWU
Backblaze B2 SHA1 R/W No No R/W
Box SHA1 R/W Yes No
Citrix ShareFile MD5 R/W Yes No
Dropbox DBHASH ¹ R Yes No
Enterprise File Fabric R/W Yes No R/W
FTP R/W ¹⁰ No No
Google Cloud Storage MD5 R/W No No R/W
Google Drive MD5 R/W No Yes R/W
Google Photos No Yes R
HDFS R/W No No
HiDrive HiDrive ¹² R/W No No
HTTP R No No R
Internet Archive MD5, SHA1, CRC32 R/W ¹¹ No No RWU
Jottacloud MD5 R/W Yes No R
Koofr MD5 Yes No
Mail.ru Cloud Mailru ⁶ R/W Yes No
Mega No Yes
Memory MD5 R/W No No
Microsoft Azure Blob Storage MD5 R/W No No R/W
Microsoft OneDrive SHA1 ⁵ R/W Yes No R
OpenDrive MD5 R/W Yes Partial ⁸
OpenStack Swift MD5 R/W No No R/W
Oracle Object Storage MD5 R/W No No R/W
pCloud MD5, SHA1 ⁷ R No No W
premiumize.me Yes No R
put.io CRC-32 R/W No Yes R
QingStor MD5 – ⁹ No No R/W
Seafile No No
SFTP MD5, SHA1 ² R/W Depends No
Sia No No
SMB Yes No
SugarSync No No
Storj R No No
Uptobox No Yes
WebDAV MD5, SHA1 ³ R ⁴ Depends No
Yandex Disk MD5 R/W No No R
Zoho WorkDrive No No
The local filesystem All R/W Depends No RWU

Notes

¹ Dropbox支持自己的自定义哈希值。这是所有4 MiB块的SHA256的总和。

² 如果同一个登录者有shell权限,并且md5sumsha1sum以及echo在远程的PATH中,SFTP支持校验。

³ WebDAV仅在与Owncloud和Nextcloud一起使用时支持散列。

⁴ WebDAV仅在与Owncloud和Nextcloud一起使用时支持modtimes。

⁵ 微软OneDrive个人版支持SHA1哈希值,而OneDrive for business和SharePoint服务器支持微软自己的[QuickXorHash](https://docs.microsoft.com/en-us/onedrive/developer/code-snippets/quickxorhash)。

⁶ Mail.ru使用它自己修改过的SHA1哈希值

⁷ pCloud在其欧盟地区只支持SHA1(而不是MD5)。

⁸ Opendrive不支持使用他们的网络客户端界面或其他股票客户端创建复制文件,但底层存储平台已被确定为允许复制文件,并且可以用rclone创建它们。 这可能是一个错误或一个不支持的功能。

⁹ QingStor不支持对大于5GB的对象设置ModTime。

¹⁰ FTP支持主要的FTP服务器的修改时间,如果其他服务器宣传了必要的协议扩展,也支持其他服务器的修改时间。更多细节见this

¹¹ Internet Archive要求选项wait_archive被设置为非零值,以获得完整的modtime支持。

¹² HiDrive支持自己的自定义哈希值。它将每个4 KiB区块的SHA1和值分层次地合并为一个单一的顶层和值。

Hash

云存储系统支持对象的各种哈希类型。 哈希值在传输数据时被用作完整性检查,并且可以在同步和检查命令中专门使用--校验标志。

要在云存储系统之间传输时使用校验和,它们必须支持一个共同的哈希类型。

ModTime

几乎所有的云存储系统都在对象上存储了某种时间戳,但其中一些并不适合用于同步。例如,有些后端只写一个时间戳,代表上传的时间。为了与同步相关,它应该能够存储源对象的修改时间。如果不是这样,rclone默认只检查文件大小,但可以配置为检查文件哈希值(使用--checksum标志)。理想情况下,它也可以改变现有文件的时间戳,而不需要重新上传。

在ModTime列中有-的存储系统,意味着在对象上读取的修改时间不是上传文件时的修改时间。它很可能是文件被上传的时间,也可能是其他的时间(比如在谷歌照片中拍摄照片的时间)。

在ModTime列中有R(只读)的存储系统,意味着它保持对象的修改时间,并在上传对象时更新它们,但它不支持只改变修改时间(SetModTime操作)而不重新上传,甚至可能不先删除现有的。rclone中的一些操作,如copysync命令,会自动检查是否支持SetModTime并在必要时重新上传以保持修改时间的同步。其他命令在没有 "SetModTime "支持的情况下将无法工作,例如对现有文件的 "touch "命令将失败,对 "mount "中的文件修改时间的改变将被默默地忽略。

在ModTime列中带有R/W(读/写)的存储系统,意味着它们也支持只修改时间的操作。

Case Insensitive

如果一个云存储系统对大小写敏感,那么就有可能出现两个仅在大小写上不同的文件,例如:file.txtFILE.txt。 如果一个云存储系统是不区分大小写的,那么这是不可能的。

当在一个不区分大小写的系统和一个区分大小写的系统之间进行同步时,这可能会导致问题。 这种情况的症状是,无论你运行多少次同步,都不能完全完成。

本地文件系统和SFTP可能对大小写敏感,也可能不敏感,这取决于操作系统。

  • Windows – 通常不区分大小写,但会保留大小写。
  • OSX–通常不区分大小写,不过也有可能是区分大小写的格式。
  • Linux – 通常是区分大小写的,但也有不区分大小写的文件系统(如FAT格式的USB钥匙)。

大多数情况下,这不会造成任何问题,因为人们倾向于避免那些名称仅有大小写差异的文件,即使是在区分大小写的系统上。

Duplicate files

如果一个云存储系统允许重复的文件,那么它可以有两个同名的对象。

这在同步时给rclone带来很大的困惑–使用rclone dedupe命令来重命名或删除重复的文件。

Restricted filenames

一些云存储系统可能对文件或目录名称中可用的字符有限制。 当rclone在上传文件时检测到这样的名称,它将透明地用相似的Unicode字符替换受限制的字符。为了处理不同的后端限制字符集,rclone使用了它称之为encoding的东西。

这个过程是为了尽可能地避免模糊的文件名,并允许在许多云存储系统之间透明地移动文件。

`rclone’向用户显示的名字或在日志输出时,只包含一组最小的替换字符,以确保正确的格式,而不一定是云存储上使用的实际名字。

在下载文件或解析rclone参数时,这种转换是相反的。例如,当上传一个名为my file?.txt的文件到Onedrive时,它将在控制台显示为my file?.txt,但在Onedrive存储为my file?.txt?被类似的?字符取代,即所谓的 "全宽问号")。
反向转换允许从Google Drive读取文件unusual/name.txt,通过在命令行传递名称unusual/name.txt/需要被类似的字符替换)。

Caveats {#restricted-filenames-caveats}

文件名编码系统在大多数情况下运行良好,至少在文件名是用英语或类似语言书写的情况下。 你甚至可能没有注意到它。它就是在工作。但在某些情况下,它可能会导致问题。例如,当文件名是用中文或日文书写时,总是使用Unicode全幅标点符号的变体。

在Windows上,字符:*?是受限字符的例子。如果这些字符在支持它的远程设备上用于文件名,Rclone将在下载到Windows时透明地将其转换为全宽Unicode变体"*"、"?"和":",并在上传时重新转换。这样一来,在Windows上不允许的文件名仍然可以被存储。

然而,如果你的Windows系统中的文件名称中原本就有这些相同的Unicode字符,它们也会被包含在同一个转换过程中。例如,如果你在Windows文件系统中创建了一个名字为Test:1.jpg的文件,其中是Unicode全角冒号符号,并使用rclone将其上传到支持普通(半角问号)的Google Drive,rclone将用半角替换全角,并在Google Drive中将该文件储存为Test:1.jpg。由于Windows和Google Drive都允许使用`Test:1.jpg’这个名字,在这种情况下,如果rclone只是保持这个名字,可能会更好。

在相反的情况下,如果你有一个名为 "Test:1.jpg "的文件,在你的Google Drive中,例如从一个Linux系统中上传,在文件名中:是有效的。然后用rclone把这个文件复制到你的Windows电脑上,你会发现在你的本地磁盘上它被重命名为Test:1.jpg'。这都是好事。然而,这也可能导致一个问题。如果你在Windows上已经有一个名为Test:1.jpg的*不同的文件,然后用rclone来复制,无论是哪种方式。Rclone就会把Google Drive上原名为Test:1.jpg的文件和Windows上原名为Test:1.jpg`的文件视为同一个文件,并把其中一个的内容替换成另一个。

几乎不可能在所有情况下都正确处理这些情况,但通过定制encoding选项,改变rclone应该转换的字符集,你应该能够创建一个适合你具体情况的配置。 也请看下面的例子

(Windows被用来作为一个有许多限制字符的文件系统的例子,而Google drive是一个只有少数字符的存储系统)。

Default restricted characters {#restricted-characters}

下表显示了默认被替换的字符。

当在文件名中发现一个替换字符时,该字符将用"‛"字符转义,以避免文件名的歧义。(例如,一个名为"␀.txt "的文件将显示为"‛␀.txt")。

每个云存储后端可以使用不同的字符集,这将在每个后端的文档中指定。

Character Value Replacement
NUL 0x00
SOH 0x01
STX 0x02
ETX 0x03
EOT 0x04
ENQ 0x05
ACK 0x06
BEL 0x07
BS 0x08
HT 0x09
LF 0x0A
VT 0x0B
FF 0x0C
CR 0x0D
SO 0x0E
SI 0x0F
DLE 0x10
DC1 0x11
DC2 0x12
DC3 0x13
DC4 0x14
NAK 0x15
SYN 0x16
ETB 0x17
CAN 0x18
EM 0x19
SUB 0x1A
ESC 0x1B
FS 0x1C
GS 0x1D
RS 0x1E
US 0x1F
/ 0x2F
DEL 0x7F

默认编码也将对这些文件名进行编码,因为它们在许多云存储系统中都有问题。

File name Replacement
.
.. ..

Invalid UTF-8 bytes {#invalid-utf8}

一些后端只支持一连串形成良好的UTF-8字节作为文件或目录名称。

在这种情况下,所有无效的UTF-8字节将被替换成带引号的字节值,以允许将文件上传到这样的后端。例如,无效的字节0xFE将被编码为`FE

一个无效的UTF-8字节的常见来源是本地文件系统,它以不同于UTF-8或UTF-16的编码存储名称,如latin1。详情见本地文件名部分。

Encoding option {#encoding}

大多数后端都有一个编码选项,以标志--backend-encoding的形式指定,其中backend是后端的名称,或者以配置参数encoding的形式指定(你需要在rclone config中选择高级配置来查看)。

这将有默认值,它以保留最大字符数的方式对字符进行编码和解码(见上文)。

然而,这在某些情况下可能是不正确的,例如,如果你有一个Windows文件系统的Unicode全宽字符**、**或**,你希望在远程保持这些字符,而不是被翻译成常规(半宽)的**、**和**。

--backend-encoding标志允许你改变这一点。你可以用--backend-encoding None完全禁止编码,或者在配置文件中设置encoding = None

编码需要一个逗号分隔的编码列表。你可以通过给这个标志传递一个无效的值来查看所有可能的值的列表,例如:--local-encoding "help"。命令rclone help flags encoding将显示后端默认值。

Encoding Characters Encoded as
Asterisk *
BackQuote | ``
BackSlash \
Colon :
CrLf CR 0x0D, LF 0x0A ,
Ctl All control characters 0x00-0x1F ␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟
Del DEL 0x7F
Dollar $
Dot . or .. as entire string , ..
DoubleQuote "
Hash #
InvalidUtf8 An invalid UTF-8 character (e.g. latin1)
LeftCrLfHtVt CR 0x0D, LF 0x0A, HT 0x09, VT 0x0B on the left of a string , , ,
LeftPeriod . on the left of a string .
LeftSpace SPACE on the left of a string
LeftTilde ~ on the left of a string
LtGt <, > ,
None No characters are encoded
Percent %
Pipe |
Question ?
RightCrLfHtVt CR 0x0D, LF 0x0A, HT 0x09, VT 0x0B on the right of a string , , ,
RightPeriod . on the right of a string .
RightSpace SPACE on the right of a string
Semicolon ;
SingleQuote '
Slash /
SquareBracket [, ] ,
Encoding example: FTP

举个具体的例子,FTP后端默认的编码是

--ftp-encoding "Slash,Del,Ctl,RightSpace,Dot"

然而,假设FTP服务器在Windows上运行,文件名中不能有任何无效的Windows字符。你正在向这个FTP服务器备份Linux服务器,这些服务器的文件名中确实有这些字符。因此,你将添加Windows集,它们是

Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot

对现有的,给予。

Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot,Del,RightSpace

这可以使用--ftp-encoding标志或使用配置文件中的encoding参数来指定。

Encoding example: Windows

再举个例子,在Windows系统中,有一个名字为Test:1.jpg的文件,其中是Unicode全角冒号。 当使用rclone将其复制到支持:的远程设备上时,你会发现该文件被重命名为Test:1.jpg

为了避免这种情况,你可以使用命令行参数--local-encoding来改变rclone应该为本地文件系统转换的字符集。 Rclone在Windows上的默认行为对应于

--local-encoding "Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot"

如果你想在你的文件名中使用全角字符,当上传到远程时,rclone不会改变它们,那么设置与默认值相同,但没有冒号,问号,星号

--local-encoding "Slash,LtGt,DoubleQuote,Pipe,BackSlash,Ctl,RightSpace,RightPeriod,InvalidUtf8,Dot"

另外,你可以用"–本地编码无 "来禁止任何字符的转换。

不使用命令行参数--local-encoding,你也可以把它设置为环境变量 RCLONE_LOCAL_ENCODING,或者configure 在你的配置中设置一个local类型的远程,并在此设置encoding选项。

这样做的风险是,如果你的云存储中有一个带有常规(半宽):*?的文件名,而你试图将其下载到你的Windows文件系统,这将会失败。这些字符在Windows的文件名中是无效的,而且你已经告诉rclone不要通过将它们转换为有效的全宽变体来解决这个问题。

MIME Type

MIME类型(也被称为媒体类型)使用简单的文本分类对文件类型进行分类,例如,text/htmlapplication/pdf

一些云存储系统支持读取(R)对象的MIME类型,一些支持写入(W)对象的MIME类型。

如果你从存储系统直接向HTTP提供文件,MIME类型可能很重要。

如果你从一个支持读(R)的远端复制到一个支持写(W)的远端,那么rclone将保留MIME类型。 否则,它们将从扩展名中被猜到,或者远程本身可能会指定MIME类型。

Metadata

后台可能支持读取或写入元数据,也可能不支持。它们可以支持读写系统元数据(该后端固有的元数据)和/或用户元数据(通用的元数据)。

元数据支持的级别是

Key Explanation
R 只读系统元数据
RW 读取和写入系统元数据
RWU 读取和写入系统元数据,读取和写入用户元数据

参见元数据文档以了解更多信息。

Optional Features

所有的rclone远程支持一个基本的命令集。其他功能取决于后台的具体能力。

Name Purge Copy Move DirMove CleanUp ListR StreamUpload LinkSharing About EmptyDir
1Fichier No Yes Yes No No No No Yes No Yes
Akamai Netstorage Yes No No No No Yes Yes No No Yes
Amazon Drive Yes No Yes Yes No No No No No Yes
Amazon S3 (or S3 compatible) No Yes No No Yes Yes Yes Yes No No
Backblaze B2 No Yes No No Yes Yes Yes Yes No No
Box Yes Yes Yes Yes Yes ‡‡ No Yes Yes Yes Yes
Citrix ShareFile Yes Yes Yes Yes No No Yes No No Yes
Dropbox Yes Yes Yes Yes No No Yes Yes Yes Yes
Enterprise File Fabric Yes Yes Yes Yes Yes No No No No Yes
FTP No No Yes Yes No No Yes No No Yes
Google Cloud Storage Yes Yes No No No Yes Yes No No No
Google Drive Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
Google Photos No No No No No No No No No No
HDFS Yes No Yes Yes No No Yes No Yes Yes
HiDrive Yes Yes Yes Yes No No Yes No No Yes
HTTP No No No No No No No No No Yes
Internet Archive No Yes No No Yes Yes No Yes Yes No
Jottacloud Yes Yes Yes Yes Yes Yes No Yes Yes Yes
Koofr Yes Yes Yes Yes No No Yes Yes Yes Yes
Mail.ru Cloud Yes Yes Yes Yes Yes No No Yes Yes Yes
Mega Yes No Yes Yes Yes No No Yes Yes Yes
Memory No Yes No No No Yes Yes No No No
Microsoft Azure Blob Storage Yes Yes No No No Yes Yes No No No
Microsoft OneDrive Yes Yes Yes Yes Yes No No Yes Yes Yes
OpenDrive Yes Yes Yes Yes No No No No No Yes
OpenStack Swift Yes † Yes No No No Yes Yes No Yes No
Oracle Object Storage No Yes No No Yes Yes Yes No No No
pCloud Yes Yes Yes Yes Yes No No Yes Yes Yes
premiumize.me Yes No Yes Yes No No No Yes Yes Yes
put.io Yes No Yes Yes Yes No Yes No Yes Yes
QingStor No Yes No No Yes Yes No No No No
Seafile Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
SFTP No No Yes Yes No No Yes No Yes Yes
Sia No No No No No No Yes No No Yes
SMB No No Yes Yes No No Yes No No Yes
SugarSync Yes Yes Yes Yes No No Yes Yes No Yes
Storj Yes † Yes Yes No No Yes Yes Yes No No
Uptobox No Yes Yes Yes No No No No No No
WebDAV Yes Yes Yes Yes No No Yes ‡ No Yes Yes
Yandex Disk Yes Yes Yes Yes Yes No Yes Yes Yes Yes
Zoho WorkDrive Yes Yes Yes Yes No No No No Yes Yes
The local filesystem Yes No Yes Yes No No Yes No Yes Yes

Purge

这比直接删除目录中的所有文件更快删除一个目录。

† 注意Swift和Storj实现了这一点,以便删除目录标记,但除了单独删除文件外,它们实际上没有更快的方法来删除文件。

‡ Nextcloud不支持StreamUpload。

Copy

当把一个对象复制到同一远程并从该远程复制时使用。 这被称为服务器端复制,所以你可以复制一个文件,而不需要下载它并再次上传。 如果你使用rclone copyrclone move,如果远程不直接支持Move,就会用到它。

如果服务器不直接支持Copy,那么对于复制操作,文件会被下载然后重新上传。

Move

在同一远程上移动/重命名一个对象时使用。 这被称为文件的服务器端移动。 如果服务器不支持 "DirMove",这将在rclone move中使用。

如果服务器不支持 "移动",那么rclone就用 "复制 "来模拟,然后删除。 如果服务器不支持Copy,那么rclone将下载文件并重新上传。

DirMove

这是用来实现rclone move,如果可能的话,移动一个目录。 如果不是这样,它将在每个文件上使用Move'(这将退回到Copy’,然后下载和上传–见`Move’部分)。

CleanUp

这是用于通过rclone cleanup清空远程的垃圾。

如果服务器不能进行CleanUp,那么rclone cleanup将返回一个错误。

‡注意,虽然Box实现了这一点,但它必须单独删除每个文件,所以它将比通过WebUI清空垃圾的速度要慢。

ListR

远程支持一个递归列表,以快速列出一个目录下的所有内容。 这使得--fast-list标志能够发挥作用。 更多细节请参见 rclone docs

StreamUpload

一些远程允许在不事先知道文件大小的情况下上传文件。这使得某些操作无需先将文件上传到本地磁盘,例如 "rclone rcat"。

LinkSharing

在文件或文件夹上设置必要的权限,并打印一个链接,允许其他人访问它们,即使他们没有特定云提供商的账户。

About

Rclone about打印一个远程的配额信息。典型的输出包括已用字节数、空闲字节数、配额和垃圾桶中的字节数。

如果一个远程没有about功能,rclone about remote:会返回一个错误。

没有about能力的后端不能确定rclone挂载的可用空间,也不能使用策略mfs(大部分可用空间)作为rclone联盟远程的成员。

参见rclone about command

EmptyDir

远程支持空目录。详情见限制。大多数基于对象/Bucket的远程不支持这个。

正文完
 
rclone中文站
版权声明:本站原创文章,由 rclone中文站 2023-01-15发表,共计10528字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)