Skip to content

云存储系统概览文档

引言

随着云计算的飞速发展,云存储系统成为了企业和个人存储和共享数据的重要工具。然而,由于不同的云存储系统之间存在功能和特性上的差异,用户在使用时可能会感到困惑。本文旨在提供一个关于主流云存储系统特性的概览,帮助用户更好地了解和选择适合自己的云存储服务。

云存储系统特性概览

以下是当前市场上一些主流云存储系统的主要特性概述:

系统名称哈希算法修改时间大小写不敏感重复文件处理MIME 类型元数据支持
1FichierWhirlpool不支持支持只读不支持
Akamai NetstorageMD5, SHA256读写支持不支持只读不支持
Amazon S3 (或 S3 兼容)MD5读写支持不支持读写支持读写更新
Backblaze B2SHA1读写支持不支持读写支持不支持
BoxSHA1读写支持不支持不支持不支持
Citrix ShareFileMD5读写支持不支持不支持不支持
DropboxDBHASH只读不支持不支持不支持
Enterprise File Fabric-读写支持不支持读写支持不支持
FTP-读写支持(注)不支持不支持不支持
Google Cloud StorageMD5读写支持不支持读写支持不支持
Google DriveMD5, SHA1, SHA256删除/读写支持支持读写支持删除/读写更新
Google Photos-不支持支持只读不支持
HDFS-读写支持不支持不支持不支持
HiDriveHiDrive读写支持不支持不支持不支持
HTTP-只读不支持只读不支持
Internet ArchiveMD5, SHA1, CRC32读写支持(注)不支持不支持读写更新
JottacloudMD5读写支持不支持只读读写
KoofrMD5不支持不支持不支持不支持
Linkbox-只读不支持不支持不支持
Mail.ru CloudMailru读写支持不支持不支持不支持
Mega-不支持支持不支持不支持
MemoryMD5读写支持不支持不支持不支持
Microsoft Azure Blob StorageMD5读写支持不支持读写支持不支持
Microsoft Azure Files StorageMD5读写支持不支持读写支持不支持
Microsoft OneDriveQuickXorHash删除/读写支持不支持只读删除/读写更新
OpenDriveMD5读写支持部分支持不支持不支持
OpenStack SwiftMD5读写支持不支持读写支持不支持
OpenDriveMD5读写(R/W)部分支持不支持不支持
OpenStack SwiftMD5读写(R/W)不支持读写(R/W)不支持
Oracle Object StorageMD5读写(R/W)不支持读写(R/W)不支持
pCloudMD5, SHA1只读(R)不支持写(W)不支持
PikPakMD5只读(R)不支持读(R)不支持
premiumize.me不支持不支持不支持读(R)不支持
put.ioCRC-32读写(R/W)支持读(R)不支持
Proton DriveSHA1读写(R/W)不支持读(R)不支持
QingStorMD5不支持不支持读写(R/W)不支持
Quatrix by Maytech不支持读写(R/W)不支持不支持不支持
Seafile不支持不支持不支持不支持不支持
SFTPMD5, SHA1读写/删除(DR/W)视情况而定不支持不支持不支持
Sia不支持不支持不支持不支持不支持
SMB不支持读写(R/W)不支持不支持不支持
SugarSync不支持不支持不支持不支持不支持
Storj不支持只读(R)不支持不支持不支持
Uloz.toMD5, SHA256不支持支持不支持不支持
Uptobox不支持不支持支持不支持不支持
WebDAVMD5, SHA1只读(R)视情况而定不支持不支持不支持
Yandex DiskMD5读写(R/W)不支持读(R)不支持
Zoho WorkDrive不支持不支持不支持不支持不支持
本地文件系统所有读写/删除/更新(DRWU)视情况而定不支持不支持读写/删除/更新(DRWU)
  1. Dropbox 支持它自己的自定义哈希。 这是所有 4 MiBSHA256SHA256 和。
  2. 如果相同登录有 shell 访问权限,并且 md5sumsha1sum 以及 echo 都在远程的 PATH 中,SFTP 支持校验和。
  3. WebDAV 仅在与 Fastmail Files、``OwncloudNextcloud 一起使用时支持哈希。
  4. WebDAV 仅在与 Fastmail Files、``OwncloudNextcloud 一起使用时支持修改时间。
  5. QuickXorHashMicrosoft 自己的哈希。
  6. Mail.ru 使用其自己修改的 SHA1 哈希
  7. pCloud 在其 EU 区域仅支持 SHA1(不支持 MD5
  8. Opendrive 不支持使用其 Web 客户端界面或其他标准客户端创建重复文件,但已确定底层存储平台允许重复文件,并且可以使用 rclone 创建它们。这可能是个错误或不受支持的功能。
  9. QingStor 不支持大于 5 GiB 的对象的 SetModTime
  10. FTP 支持主要 FTP 服务器的修改时间,以及其他服务器(如果它们支持所需的协议扩展)。有关更多详细信息,请参阅这里
  11. Internet Archive 需要将选项 wait_archive 设置为非零值以支持完整的修改时间。
  12. HiDrive 支持它自己的自定义哈希。 它将每个 4 KiB 块的 SHA1 和分层组合成一个单一的顶层和。
  13. Uloz.to 在文件上传时提供服务器计算的 MD5 哈希。MD5SHA256 哈希由客户端计算并作为元数据字段存储。

哈希值(Hash)

云存储系统支持对象的各种哈希类型。 哈希值在传输数据时用作完整性检查, 并可以在同步操作中使用 --checksum 标志,以及在 check 命令中具体使用。

在云存储系统之间传输数据时,要使用验证哈希值,它们必须支持一种共同的哈希类型。

修改时间(ModTime)

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

关键字解释
-不支持修改时间——时间很可能是上传时间
R文件支持修改时间,但更改时需要重新上传
R/W文件完全支持读取和写入修改时间
DR文件和目录支持修改时间,但更改时需要重新上传
DR/W文件和目录完全支持读取和写入修改时间

在 ModTime 列中带有 - 的存储系统意味着对象上读取的修改时间并不是文件上传时的修改时间。它很可能是文件的上传时间,或者可能是其他时间(如 Google 照片中拍摄图片的时间)。

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

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

在 ModTime 列中带有 D 的存储系统意味着以下符号同样适用于目录和文件。

不区分大小写

如果云存储系统区分大小写,则可能有两个文件仅在大小写上有所不同,例如 file.txtFILE.txt。如果云存储系统不区分大小写,则这是不可能的。

这可能会在同步不区分大小写的系统和区分大小写的系统之间导致问题。其症状是不管你运行多少次同步,它都不会完全完成。

本地文件系统和SFTP的文件名大小写敏感性可能取决于操作系统。

  • Windows - 通常不区分大小写,但会保留大小写
  • OSX - 通常不区分大小写,但有可能格式化为区分大小写
  • Linux - 通常区分大小写,但存在不区分大小写的文件系统(例如FAT格式的USB闪存盘)。大多数情况下,这并不会引起问题,因为人们倾向于避免在区分大小写的系统上使用仅通过大小写区分的文件名。

重复文件

如果云存储系统允许重复文件,那么它可以有两个名称相同的对象。这在同步时会极大地混淆rclone,可以使用rclone dedupe命令来重命名或删除重复项。

受限制的文件名

一些云存储系统可能会对文件或目录名中可使用的字符有所限制。当rclone在文件上传过程中检测到这样的名称时,它会透明地将受限字符替换为外观相似的Unicode字符。为了处理不同后端的不同受限字符集,rclone使用了一个称为编码的功能。这个过程设计得尽可能避免模糊的文件名,并允许在不同云存储系统之间透明地移动文件。

rclone向用户显示或在日志输出中显示的文件名将仅包含一组替换字符的最小集合,以确保格式正确,而不一定是云存储上使用的实际名称。在下载文件或解析rclone参数时,此转换将被反转。例如,当将名为my file?.txt的文件上传到OneDrive时,它将在控制台上显示为my file?.txt,但会作为my file?.txt存储在OneDrive上(?被替换为外观相似的字符,即所谓的“全角问号”)。

注意事项

文件名编码系统在大多数情况下都工作得很好,特别是在文件名使用英语或类似语言时。你可能甚至不会注意到它:它就是这么工作的。然而,在某些情况下,它可能会导致问题。例如,当文件名使用中文或日语时,这些语言总是使用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保持原样可能会更好。

相反的情况也是如此;如果你在Google Drive中有一个名为Test:1.jpg的文件,例如从Linux系统(其中:在文件名中是有效的)上传的。然后,稍后使用Rclone将此文件复制到你的Windows计算机时,你会发现它在本地磁盘上被重命名为Test:1.jpg。由于原始的文件名在Windows中是不合法的,因此Rclone会重命名它以使复制成为可能。这很好。然而,这可能会导致一些混淆,特别是如果你在不同的操作系统之间频繁地传输文件时。

默认受限字符

下表显示了默认情况下被替换的字符。当在文件名中找到替换字符时,该字符将使用字符进行转义,以避免文件名产生歧义。(例如,一个名为.txt的文件将显示为‛.txt

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

字符替换字符
NUL0x00
SOH0x01
STX0x02
ETX0x03
EOT0x04
ENQ0x05
ACK0x06
BEL0x07
BS0x08
HT0x09
LF0x0A
VT0x0B
FF0x0C
CR0x0D
SO0x0E
SI0x0F
DLE0x10
DC10x11
DC20x12
DC30x13
DC40x14
NAK0x15
SYN0x16
ETB0x17
CAN0x18
EM0x19
SUB0x1A
ESC0x1B
FS0x1C
GS0x1D
RS0x1E
US0x1F
/0x2F
DEL0x7F

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

文件名替换字符
.
....

无效的UTF-8字节

一些后端仅支持格式良好的UTF-8字节序列作为文件或目录名。在这种情况下,所有无效的UTF-8字节都将被替换为字节值的引号表示形式,以允许将文件上传到这样的后端。例如,无效的字节0xFE将被编码为‛FE。无效的UTF-8字节的常见来源是本地文件系统,它们以不同于UTF-8或UTF-16的编码存储名称,如latin1。有关详细信息,请参阅本地文件名部分。

编码选项

大多数后端都有一个编码选项,指定为标志--backend-encoding,其中backend是后端的名称,或者作为配置参数encoding(你需要在rclone config中选择高级配置才能看到它)。这将有一个默认值,该值以这样的方式编码和解码字符,以保留尽可能多的字符(见上文)。

然而,在某些情况下这可能是不正确的,例如,如果你有一个包含Unicode全角字符的Windows文件系统,并且你希望这些字符在远程端保持原样,而不是被转换为普通的(半角)*?:--backend-encoding标志允许你更改这一点。你可以使用--backend-encoding None完全禁用编码,或者在配置文件中设置encoding = None

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

以下是对给定表格中各个字段的中文翻译:

编码方式字符编码为
星号*
反引号`
反斜杠\
冒号:
回车换行CR 0x0D, LF 0x0A,
控制字符所有控制字符 0x00-0x1F␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟
删除字符DEL 0x7F
美元符号$
点号... 作为整个字符串, ..
双引号"
井号#
无效的UTF-8字符无效的UTF-8字符(例如latin1)?
左侧回车换行制表符垂直制表符字符串左侧的CR 0x0D, LF 0x0A, HT 0x09, VT 0x0B, , ,
左侧点号字符串左侧的..
左侧空格字符串左侧的空格
左侧波浪线字符串左侧的~
小于大于号<, >,
无编码没有字符被编码
百分号%
管道符``
问号?
右侧回车换行制表符垂直制表符字符串右侧的CR 0x0D, LF 0x0A, HT 0x09, VT 0x0B, , ,
右侧点号字符串右侧的..
右侧空格字符串右侧的空格
分号;
单引号'
斜杠/
方括号[, ],

编码示例:FTP

以具体的例子来说,FTP后端的默认编码是

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

但是,假设FTP服务器运行在Windows上,并且文件名中不能有任何无效的Windows字符。你正在将Linux服务器备份到这个FTP服务器上,而这些Linux服务器上的文件名中可能包含这些字符。因此,你需要添加Windows中无效字符的集合,这些字符是

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

到现有的编码中,组成:

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

这可以通过--ftp-encoding标志指定,或者在配置文件中使用encoding参数。

编码示例:Windows

再举一个例子,假设在Windows系统上有一个名为Test:1.jpg的文件,其中是Unicode全角冒号符号。当使用rclone将这个文件复制到支持:的远程存储(如Google Drive)时,你会注意到文件被重命名为Test:1.jpg

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

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

如果你想在文件名中使用全角字符,并且在上传到远程存储时不想让rclone改变它们,那么将默认值中的Colon,Question,Asterisk去掉:

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

另外,你也可以通过--local-encoding None来禁用任何字符的转换。

除了使用命令行参数--local-encoding之外,你还可以将其设置为环境变量RCLONE_LOCAL_ENCODING,或者在配置文件中为类型为local的远程设置一个配置,并在那里设置encoding选项。

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

MIME 类型

MIME 类型(也称为媒体类型)使用简单的文本分类来分类文档类型,例如 text/htmlapplication/pdf。一些云存储系统支持读取(R)对象的 MIME 类型,一些支持写入(W)对象的 MIME 类型。

如果你直接从存储系统为 HTTP 服务文件,MIME 类型可能是重要的。如果你从一个支持读取(R)的远程复制到另一个支持写入(W)的远程,rclone 将保留 MIME 类型。否则,MIME 类型将根据文件扩展名来猜测,或者远程存储本身可能会分配 MIME 类型。

元数据

后端可能支持或不支持读取或写入元数据。它们可能支持读取和写入系统元数据(特定于该后端的元数据)和/或用户元数据(通用目的的元数据)。

元数据支持的级别如下:

关键字解释
R仅支持读取文件的系统元数据
RW支持读取和写入文件的系统元数据
RWU支持读取和写入文件的系统元数据以及读取和写入用户元数据
DR支持读取文件和目录的系统元数据
DRW支持读取和写入文件和目录的系统元数据
DRWU支持读取和写入文件和目录的系统元数据以及读取和写入用户元数据

更多信息请查看元数据文档

可选功能

所有rclone的远程存储都支持一组基础命令。其他功能则取决于特定后端的能力。

名称清空复制移动目录移动清理列表R流式上传多线程上传链接分享关于清空目录
1Fichier不支持支持支持不支持不支持不支持不支持不支持支持不支持支持
Akamai Netstorage支持不支持不支持不支持不支持支持支持不支持不支持不支持支持
Amazon S3(或S3兼容)不支持支持不支持不支持支持支持支持支持支持不支持不支持
Backblaze B2不支持支持不支持不支持支持支持支持支持支持不支持不支持
Box支持支持支持支持支持不支持支持不支持支持支持支持
Citrix ShareFile支持支持支持支持不支持不支持不支持不支持不支持不支持支持
Dropbox支持支持支持支持不支持不支持支持不支持支持支持支持
Enterprise File Fabric支持支持支持支持支持不支持不支持不支持不支持不支持支持
FTP不支持不支持支持支持不支持不支持支持不支持不支持不支持支持
Google Cloud Storage支持支持不支持不支持不支持支持支持不支持不支持不支持不支持
Google Drive支持支持支持支持支持支持支持不支持支持支持支持
Google Photos不支持不支持不支持不支持不支持不支持不支持不支持不支持不支持不支持
HDFS支持不支持支持支持不支持不支持支持不支持不支持支持支持
HiDrive支持支持支持支持不支持不支持支持不支持不支持不支持支持
HTTP不支持不支持不支持不支持不支持不支持不支持不支持不支持不支持支持
ImageKit支持支持支持不支持不支持不支持不支持不支持不支持不支持支持
Internet Archive不支持支持不支持不支持支持支持不支持不支持支持支持不支持
Jottacloud支持支持支持支持支持支持不支持不支持支持支持支持
Koofr支持支持支持支持不支持不支持支持不支持支持支持支持
Mail.ru Cloud支持支持支持支持支持不支持不支持不支持支持支持支持
Mega支持不支持支持支持支持不支持不支持不支持支持支持支持
Memory不支持支持不支持不支持不支持支持支持不支持不支持不支持不支持
Microsoft Azure Blob Storage支持支持不支持不支持不支持支持支持支持不支持不支持不支持
Microsoft Azure Files Storage不支持支持支持支持不支持不支持支持支持不支持支持支持
Microsoft OneDrive支持支持支持支持支持支持 ⁵不支持不支持支持支持支持
OpenDrive支持支持支持支持不支持不支持不支持不支持不支持不支持支持
OpenStack Swift支持 ¹支持不支持不支持不支持支持支持不支持不支持支持不支持
Oracle Object Storage不支持支持不支持不支持支持支持支持支持不支持不支持不支持
pCloud支持支持支持支持支持不支持不支持不支持支持支持支持
PikPak支持支持支持支持支持不支持不支持不支持支持支持支持
premiumize.me支持不支持支持支持不支持不支持不支持不支持支持支持支持
put.io支持不支持支持支持支持不支持支持不支持不支持支持支持
Proton Drive支持不支持支持支持支持不支持不支持不支持不支持支持支持
QingStor不支持支持不支持不支持支持支持不支持不支持不支持不支持不支持
Quatrix by Maytech支持支持支持支持不支持不支持不支持不支持不支持支持支持
Seafile支持支持支持支持支持支持支持不支持支持支持支持
SFTP不支持支持 ⁴支持支持不支持不支持支持不支持不支持支持支持
Sia不支持不支持不支持不支持不支持不支持支持不支持不支持不支持支持
SMB不支持不支持支持支持不支持不支持支持支持不支持不支持支持
SugarSync支持支持支持支持不支持不支持支持不支持支持不支持支持
Storj支持 ²支持支持不支持不支持支持支持不支持支持不支持不支持
Uloz.to不支持不支持支持支持不支持不支持不支持不支持不支持不支持支持
Uptobox不支持支持支持支持不支持不支持不支持不支持不支持不支持不支持
WebDAV支持支持支持支持不支持不支持支持 ³不支持不支持支持支持
Yandex Disk支持支持支持支持支持不支持支持不支持支持支持支持
Zoho WorkDrive支持支持支持支持不支持不支持不支持不支持不支持支持支持
本地文件系统不支持不支持支持支持不支持不支持支持支持不支持支持支持

删除

Swift 实现此功能是为了删除目录标记,但它实际上并没有比逐个删除文件更快的方法。Storj 仅对整个存储桶实现了高效的删除操作。如果要在存储桶内清除目录,文件将被逐个删除。

流式上传

Nextcloud 不支持流式上传。

使用 --onedrive-delta 标志启用

清空

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

复制

在将对象从同一远程复制到另一位置时使用。这被称为服务器端复制,因此您可以复制文件而无需先下载再上传。如果您使用 rclone copyrclone move 并且远程不直接支持 Move 操作时,会用到此功能。如果服务器不直接支持 Copy 操作,则在复制过程中会先下载文件然后重新上传。

移动

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

如果服务器不支持 Move 操作,rclone 将通过 Copy 然后删除的方式模拟它。如果服务器不支持 Copy 操作,rclone 将下载文件并重新上传。

目录移动

这用于实现 rclone move 来移动目录(如果可能)。如果不支持,它将对每个文件使用 Move(这将回退到 Copy 然后下载和上传 - 参见 Move 部分)。

清理

这用于通过 rclone cleanup 清空远程的垃圾文件。如果服务器无法执行 CleanUp 操作,则 rclone cleanup 将返回一个错误。

注意:虽然 Box 实现了这个功能,但它必须逐个删除每个文件,因此通过 WebUI 清空垃圾的速度会比这更快。

ListR(递归列表)

该远程支持递归列表,可以快速列出目录下的所有内容。这使得--fast-list标志能够工作。关于更多细节,请参阅 lrclone 文档

StreamUpload(流式上传)

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

MultithreadUpload(多线程上传)

一些远程允许将传输到远程的数据作为块并行发送。如果支持这一点,rclone将使用多线程复制来更快地传输文件。

LinkSharing(链接共享)

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

About(关于)

Rcloneabout 命令打印远程的配额信息。典型的输出包括已使用的字节、空闲字节、配额和在回收站中的字节。

如果远程不具备about功能,rclone about remote:会返回一个错误。

不具备about功能的后端无法为rclone挂载确定空闲空间,也不能在rclone联合远程中使用mfs(最多空闲空间)策略。

请参阅 rclone about 命令