rclone serve s3

rclone serve s3

通过 S3 协议为 remote:path 提供服务。

概要

serve s3 实现了一个基本的 S3 服务器,通过 S3 协议为远程存储提供服务。 可以使用 S3 客户端查看该服务,也可以创建一个 S3 类型的远程存储,使用 rclone 对其进行读写操作。

serve s3 被视为 实验性 功能,请谨慎使用。

S3 服务器支持版本 4 的签名认证。只需使用 --auth-key accessKey,secretKey 并在请求中正确设置 Authorization 头即可。(请参阅 AWS 文档)。

--auth-key 可以重复使用以设置多组认证信息。如果未提供 --auth-key,则 serve s3 将允许匿名访问。

请注意,某些客户端可能需要 HTTPS 端点。有关更多信息,请参阅 SSL 文档

此命令使用 VFS 目录缓存。 所有功能在 --vfs-cache-mode off 模式下均可正常工作。使用 --vfs-cache-mode full(或 writes)模式可以将对象缓存到本地,以提高性能。

如果想将存储桶名称作为主机名的一部分(例如 mybucket.local),请使用 --force-path-style=false

如果想更改 ETag 使用的哈希算法,请使用 --etag-hash。 请注意,使用除 MD5(默认值)之外的任何哈希算法都可能会给依赖 Etag 为 MD5 的 S3 客户端带来问题。

快速入门

要通过 S3 协议为 remote:path 提供简单的服务,请按以下方式启动服务器:

rclone serve s3 --auth-key ACCESS_KEY_ID,SECRET_ACCESS_KEY remote:path

例如,要使用文件系统中的一个简单文件夹,运行服务器 命令:

rclone serve s3 --auth-key ACCESS_KEY_ID,SECRET_ACCESS_KEY local:/path/to/folder

服务器的 rclone.conf 可以是这样的:

[local]
type = local

不过,“本地 “配置是可选的。 如果运行服务器时使用 远程:路径”,如”/path/to/文件夹"(没有 “local: “前缀,也没有 rclone.conf “文件),rclone 就会退回到默认配置,这在 会在日志中显示警告。 但它还是会运行。

这将与 rclone(客户端)的远程配置兼容,即 的远程配置兼容:

[serves3]
type = s3
provider = Rclone
endpoint = http://127.0.0.1:8080/
access_key_id = ACCESS_KEY_ID
secret_access_key = SECRET_ACCESS_KEY
use_multipart_uploads = false

请注意,设置 disable_multipart_uploads = true 是为了绕过 一个 bug,该 bug 会在适当的时候修复。

漏洞

在上传多部分文件时,serve s3 会将所有部分保存在内存中(参见 #7453)。 这是 rclone 用于提供 S3 服务的库的一个限制,有望在某个时候得到修复。

多部分服务器端复制功能无法正常工作(参见 #7454)。这些操作会花费很长时间,最终会失败。 多部分服务器端复制的默认阈值是 5G,这是它能设置的最大值,因此超过这个大小的文件将无法在服务器端进行复制。

有关 serve s3 当前的漏洞列表,请查看 GitHub 上的 serve s3 漏洞类别。

限制

serve s3 会将根目录下的所有目录视为存储桶,并忽略根目录下的所有文件。 你可以使用 CreateBucket 在根目录下创建文件夹,但不能在非根目录的其他文件夹下创建空文件夹。

使用 PutObjectDeleteObject 时,rclone 会自动创建或清理空文件夹。 如果你不想自动清理空文件夹,请使用 --no-cleanup

使用 ListObjects 时,当分隔符为空时,rclone 将使用 /。 这可以减少后端请求,并且对大多数操作没有影响,但如果分隔符不是 / 且不为空,rclone 将对后端进行完整的递归搜索,这可能需要一些时间。

目前不支持版本控制。

除了 rclone 的 mtime 元数据(会被设置为文件的修改时间)之外,其他元数据仅会保存在内存中。

支持的操作

serve s3 目前支持以下操作。

  • Bucket
    • ListBuckets
    • CreateBucket
    • DeleteBucket
  • Object
    • HeadObject
    • ListObjects
    • GetObject
    • PutObject
    • DeleteObject
    • DeleteObjects
    • CreateMultipartUpload
    • CompleteMultipartUpload
    • AbortMultipartUpload
    • CopyObject
    • UploadPart

其他操作将返回错误 Unimplemented

认证

默认情况下,此服务无需登录即可提供文件访问。

你可以使用一个可容纳多个用户的 htpasswd 文件,或者使用 --user--pass 标志设置单个用户名和密码。

如果上述两种方法都未配置静态用户,并且服务器通过 --client-ca 标志要求使用客户端证书,那么客户端证书的通用名称将被视为用户名。

使用 --htpasswd /path/to/htpasswd 来提供一个 htpasswd 文件。该文件采用标准的 Apache 格式,支持 MD5、SHA1 和 BCrypt 进行基本认证。建议使用 BCrypt。

要创建一个 htpasswd 文件,请执行以下操作:

touch htpasswd
htpasswd -B htpasswd user
htpasswd -B htpasswd anotherUser

密码文件可以在 rclone 运行时更新。

使用 --realm 来设置认证领域。

使用 --salt 来更改默认的密码哈希盐值。

服务器选项

使用 --addr 来指定服务器应监听的 IP 地址和端口,例如 --addr 1.2.3.4:8000--addr :8080 以监听所有 IP 地址。默认情况下,服务器仅监听本地主机。你可以使用端口 :0 让操作系统选择一个可用的端口。

如果你将 --addr 设置为监听公共或局域网可访问的 IP 地址,建议使用认证 - 相关信息请参阅下一节。

你可以通过将 URL 设置为 unix:///path/to/socket 或仅使用绝对路径名来使用 Unix 套接字。

--addr 可以重复使用,以监听多个 IP 地址、端口或套接字。下面将进一步描述的套接字激活功能也可以实现相同的目的。

--server-read-timeout--server-write-timeout 可用于控制服务器的超时时间。请注意,这是一次传输的总时间。

--max-header-bytes 控制服务器在 HTTP 头中接受的最大字节数。

--baseurl 控制 rclone 服务的 URL 前缀。默认情况下,rclone 将从根目录提供服务。如果你使用 --baseurl "/rclone",那么 rclone 将从以 “/rclone/” 开头的 URL 提供服务。如果你想对 rclone 服务进行代理,这将非常有用。rclone 会自动在 --baseurl 前后插入 “/",因此 --baseurl "rclone"--baseurl "/rclone"--baseurl "/rclone/" 的处理方式是相同的。

TLS (SSL)

默认情况下,此服务通过 HTTP 提供。如果你希望通过 HTTPS 提供服务,你需要提供 --cert--key 标志。

如果你希望进行客户端证书验证,你还需要提供 --client-ca

--cert 必须设置为包含 PEM 编码证书或该证书与 CA 证书的串联文件的路径。--key 必须设置为包含 PEM 编码私钥文件的路径。如果设置了 --client-ca,则应将其设置为包含 PEM 编码客户端证书颁发机构证书文件的路径。

--min-tls-version 是可接受的最小 TLS 版本。有效值为 “tls1.0”、“tls1.1”、“tls1.2” 和 “tls1.3”(默认值为 “tls1.0”)。

套接字激活

如果服务管理器传递了任何文件描述符(FD),rclone 将监听这些 FD,而不是上述指定的监听地址(并忽略 --addr 传递的任何参数)。

这允许 rclone 成为一个套接字激活的服务。可以按照 https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html 中描述的方式使用 .socket 和 .service 单元文件进行配置。

可以使用 systemd-socket-activate 命令临时测试套接字激活:

   systemd-socket-activate -l 8000 -- rclone serve

这将在首次通过 TCP 连接到端口 8000 时激活 rclone。

VFS - 虚拟文件系统

此命令使用 VFS 层。该层将 rclone 使用的云存储对象转换为更类似于磁盘文件系统的形式。

云存储对象具有许多与磁盘文件不同的属性 - 你无法扩展它们或向其中间写入数据,因此 VFS 层必须处理这些问题。由于没有一种通用的正确方法来处理这些问题,下面将解释各种选项。

VFS 层还实现了一个目录缓存 - 它将文件和目录的信息(但不包括数据)缓存在内存中。

VFS 目录缓存

使用 --dir-cache-time 标志,你可以控制一个目录在多长时间内被认为是最新的,而无需从后端刷新。通过 VFS 进行的更改将立即显示或使缓存失效。

--dir-cache-time duration   目录条目缓存的时间(默认值:5m0s)
--poll-interval duration    轮询更改的间隔时间。必须小于 dir-cache-time。仅适用于支持的远程存储。设置为 0 以禁用(默认值:1m0s)

然而,如果配置的后端不支持轮询更改,通过 Web 界面或另一个 rclone 副本直接在云存储上进行的更改只有在目录缓存过期后才能被检测到。如果后端支持轮询,更改将在轮询间隔内被检测到。

你可以向 rclone 发送 SIGHUP 信号,以刷新所有目录缓存,无论它们的年龄如何。假设只有一个 rclone 实例在运行,你可以按以下方式重置缓存:

kill -SIGHUP $(pidof rclone)

如果你使用 远程控制 配置了 rclone,你可以使用 rclone rc 刷新整个目录缓存:

rclone rc vfs/forget

或者刷新单个文件或目录:

rclone rc vfs/forget file=path/to/file dir=path/to/dir

VFS 文件缓冲

--buffer-size 标志决定了预先缓冲数据所使用的内存量。

每个打开的文件将始终尝试在内存中保留指定数量的数据。缓冲的数据与一个打开的文件绑定,不会共享。

此标志是每个打开文件使用内存的上限。缓冲区仅为已下载但尚未读取的数据使用内存。如果缓冲区为空,仅会使用少量内存。

rclone 用于缓冲的最大内存量可以达到 --buffer-size * 打开的文件数

VFS 文件缓存

这些标志控制 VFS 文件缓存选项。文件缓存对于使 VFS 层看起来与普通文件系统兼容是必要的。可以禁用它,但会牺牲一些兼容性。

例如,如果你想同时对一个文件进行读写操作,则需要启用 VFS 缓存。更多详细信息请参阅下文。

请注意,VFS 缓存与缓存后端是分开的,你可能需要其中一个或两个都需要。

--cache-dir string                     rclone 用于缓存的目录。
--vfs-cache-mode CacheMode             缓存模式,可选值为 off|minimal|writes|full(默认值为 off)
--vfs-cache-max-age duration           缓存中对象自上次访问以来的最大时间(默认值为 1 小时 0 分 0 秒)
--vfs-cache-max-size SizeSuffix        缓存中对象的最大总大小(默认值为无限制)
--vfs-cache-min-free-space SizeSuffix  包含缓存的磁盘上的目标最小可用空间(默认值为无限制)
--vfs-cache-poll-interval duration     轮询缓存以查找过期对象的时间间隔(默认值为 1 分钟 0 秒)
--vfs-write-back duration              使用缓存时,文件最后一次使用后写回的时间(默认值为 5 秒)

如果使用 -vv 运行 rclone,它将打印文件缓存的位置。文件存储在用户缓存文件区域,该区域依赖于操作系统,但可以通过 --cache-dir 或设置相应的环境变量来控制。

缓存有 4 种不同的模式,通过 --vfs-cache-mode 进行选择。缓存模式越高,rclone 的兼容性就越好,但会消耗更多的磁盘空间。

请注意,文件只有在关闭且在 --vfs-write-back 秒内未被访问时才会写回到远程存储。如果 rclone 退出或崩溃时还有未上传的文件,下次使用相同标志运行 rclone 时,这些文件将会被上传。

如果使用 --vfs-cache-max-size--vfs-cache-min-free-size,请注意缓存可能会超过这些配额,原因有两个。一是因为缓存只每隔 --vfs-cache-poll-interval 检查一次。二是因为打开的文件无法从缓存中移除。当 --vfs-cache-max-size--vfs-cache-min-free-size 被超过时,rclone 将首先尝试从缓存中移除访问最少的文件。rclone 会从最长时间未被访问的文件开始处理。这种缓存清理策略效率高,且更相关的文件可能会保留在缓存中。

--vfs-cache-max-age 会在自上次访问后经过设定的时间后,将文件从缓存中移除。默认值为 1 小时,这意味着会开始移除 1 小时内未被访问的文件。当访问一个缓存文件时,1 小时的计时器会重置为 0,并在再过 1 小时后才会移除该文件。请使用标准符号(s、m、h、d、w)指定时间。

如果使用 --vfs-cache-mode > off请勿在相同或重叠的远程存储上运行两个使用相同 VFS 缓存的 rclone 副本。这样做可能会导致数据损坏。你可以通过为每个 rclone 实例设置不同的 --cache-dir 来避免这个问题。如果使用的远程存储不重叠,则无需担心这个问题。

–vfs-cache-mode off

在此模式下(默认模式),缓存将直接从远程存储读取数据并直接写入远程存储,不会在磁盘上缓存任何内容。

这意味着某些操作将无法进行:

  • 无法同时以读写模式打开文件
  • 以写入模式打开的文件无法进行定位操作
  • 以写入模式打开现有文件时必须设置 O_TRUNC
  • 以 O_TRUNC 模式以读取模式打开的文件将仅以写入模式打开
  • 仅以写入模式打开的文件将表现得好像设置了 O_TRUNC
  • 打开模式 O_APPEND、O_TRUNC 将被忽略
  • 如果上传失败,则无法重试

–vfs-cache-mode minimal

此模式与 “off” 模式非常相似,不同之处在于以读写模式打开的文件将被缓冲到磁盘。这意味着以写入模式打开的文件将更具兼容性,但仅使用最少的磁盘空间。

以下操作仍然无法进行:

  • 仅以写入模式打开的文件无法进行定位操作
  • 以写入模式打开现有文件时必须设置 O_TRUNC
  • 仅以写入模式打开的文件将忽略 O_APPEND、O_TRUNC
  • 如果上传失败,则无法重试

–vfs-cache-mode writes

在此模式下,仅以读取模式打开的文件仍然直接从远程存储读取,而仅以写入模式或读写模式打开的文件将首先被缓冲到磁盘。

此模式应支持所有正常的文件系统操作。

如果上传失败,将以指数级递增的间隔进行重试,最长间隔为 1 分钟。

–vfs-cache-mode full

在此模式下,所有的读写操作都会在磁盘上进行缓冲。当从远程存储读取数据时,也会将其缓冲到磁盘。

在此模式下,缓存中的文件将是稀疏文件,rclone 会跟踪已下载的文件部分。

因此,如果应用程序只读取每个文件的开头部分,rclone 将只缓冲文件的开头部分。这些文件在缓存中看起来是完整大小,但实际上是稀疏文件,只有已下载的数据存在。

此模式应支持所有正常的文件系统操作,并且在其他方面与 --vfs-cache-mode writes 模式相同。

读取文件时,rclone 将提前读取 --buffer-size 加上 --vfs-read-ahead 字节的数据。--buffer-size 会在内存中进行缓冲,而 --vfs-read-ahead 会在磁盘上进行缓冲。

使用此模式时,建议不要将 --buffer-size 设置得太大,如果需要,可以将 --vfs-read-ahead 设置得大一些。

重要提示:并非所有文件系统都支持稀疏文件。特别是 FAT/exFAT 文件系统不支持。如果缓存目录位于不支持稀疏文件的文件系统上,rclone 的性能会非常差,并且如果检测到这种情况,它会记录一条 ERROR 消息。

指纹识别

VFS 的各个部分使用指纹识别来判断本地文件副本相对于远程文件是否发生了更改。指纹识别基于以下信息生成:

  • 文件大小
  • 修改时间
  • 哈希值

只要对象上有这些信息就会使用。

在某些后端,获取这些属性的速度较慢(每个对象需要额外的 API 调用或额外的处理工作)。

例如,localsftp 后端的 hash 获取速度较慢,因为它们需要读取整个文件并进行哈希计算;而 s3swiftftpqinqstor 后端的 modtime 获取速度较慢,因为它们需要额外的 API 调用才能获取该信息。

如果使用 --vfs-fast-fingerprint 标志,rclone 将不会在指纹识别中包含这些耗时的操作。这会使指纹识别的准确性降低,但速度会快很多,并且会提高缓存文件的打开速度。

如果在 locals3swift 后端上运行 vfs 缓存,建议使用此标志。

请注意,如果更改此标志的值,缓存中文件的指纹可能会失效,文件需要重新下载。

VFS 分块读取

当 rclone 从远程存储读取文件时,它会以分块的方式进行读取。这意味着 rclone 不会请求整个文件,而是只读取指定的块。这样可以通过只从远程存储请求实际读取的块来减少某些远程存储的下载配额使用,但会增加请求的数量。

以下标志用于控制分块操作: –vfs-read-chunk-size SizeSuffix 以分块方式读取源对象(默认值:128M) –vfs-read-chunk-size-limit SizeSuffix 块大小加倍的最大限制(默认值:无限制) –vfs-read-chunk-streams int 同时进行读取的并行流数量

分块读取的行为会根据 --vfs-read-chunk-streams 参数的不同而有所变化。

--vfs-read-chunk-streams == 0

Rclone 将开始读取大小为 --vfs-read-chunk-size 的块,然后每次读取时将块大小加倍。当指定了 --vfs-read-chunk-size-limit 且该值大于 --vfs-read-chunk-size 时,每个打开文件的块大小只会加倍到指定值。如果该值为 “off”(默认值),则不设置限制,块大小将无限增长。

若设置 --vfs-read-chunk-size 100M--vfs-read-chunk-size-limit 0,将下载以下部分:0 - 100M、100M - 200M、200M - 300M、300M - 400M 等等。当指定 --vfs-read-chunk-size-limit 500M 时,结果将是 0 - 100M、100M - 300M、300M - 700M、700M - 1200M、1200M - 1700M 等等。

--vfs-read-chunk-size 设置为 0 或 “off” 将禁用分块读取。

这些块不会在内存中进行缓冲。

--vfs-read-chunk-streams > 0

Rclone 会同时读取 --vfs-read-chunk-streams 个大小为 --vfs-read-chunk-size 的块。每次读取的块大小将保持不变。

这在高延迟链接或连接到高性能对象存储的非常高带宽链接上能显著提高性能。

需要进行一些实验来找到 --vfs-read-chunk-size--vfs-read-chunk-streams 的最优值,因为这些值取决于所使用的后端以及到后端的延迟。

对于高性能对象存储(例如 AWS S3),一个合理的起始设置可能是 --vfs-read-chunk-streams 16--vfs-read-chunk-size 4M。在对 AWS S3 的测试中,性能大致与 --vfs-read-chunk-streams 的设置成正比。

类似的设置也适用于高延迟链接,但根据延迟情况,可能需要更多的 --vfs-read-chunk-streams 才能获得较高的吞吐量。

VFS 性能

可以出于性能或其他原因使用这些标志来启用/禁用 VFS 的某些功能。另请参阅分块读取功能。

特别是 S3 和 Swift 后端,使用 --no-modtime 标志(或者使用 --use-server-modtime 以获得略有不同的效果)会有很大的性能提升,因为每次读取修改时间都会产生一次事务。

--no-checksum     上传/下载时不比较校验和。
--no-modtime      不读取/写入修改时间(可以加快速度)。
--no-seek         不允许在文件中进行定位操作。
--read-only       仅允许只读访问。

有时 rclone 会接收到乱序的读取或写入请求。与其进行定位操作,rclone 会等待一小段时间,以等待按顺序的读取或写入请求到来。这些标志仅在不使用磁盘缓存文件时才会生效。

--vfs-read-wait duration   在进行定位操作之前,等待按顺序读取的时间(默认值:20ms)
--vfs-write-wait duration  在给出错误之前,等待按顺序写入的时间(默认值:1s)

当使用 VFS 写入缓存(--vfs-cache-mode 的值为 writes 或 full)时,可以设置全局标志 --transfers 来调整从缓存中并行上传修改后文件的数量(相关的全局标志 --checkers 对 VFS 没有影响)。

--transfers int  并行进行的文件传输数量(默认值:4)

符号链接

默认情况下,VFS 不支持符号链接。但是,可以使用以下任一标志来启用此功能:

--links      将符号链接转换为带有 `.rclonelink` 扩展名的普通文件,反之亦然。
--vfs-links  为 VFS 将符号链接转换为带有 `.rclonelink` 扩展名的普通文件,反之亦然。

由于大多数云存储系统不直接支持符号链接,rclone 会将符号链接存储为带有特殊扩展名的普通文件。因此,一个看起来是符号链接的文件 link-to-file.txt 在云存储中会被存储为 link-to-file.txt.rclonelink,其内容将是符号链接目标的路径。

请注意,--links 会在 rclone 全局范围内启用符号链接转换 - 这包括任何支持该概念的后端(例如本地后端)。--vfs-links 仅为 VFS 层启用此功能。

此方案与使用 –local-links 标志的本地后端所使用的方案兼容。

--vfs-links 标志是为 rclone mountrclone nfsmountrclone serve nfs 设计的。

目前尚未对其他 rclone serve 命令进行测试。

当前实现的一个限制是,它期望调用者解析子符号链接。例如,给定以下目录树

.
├── dir
│   └── file.txt
└── linked-dir -> dir

VFS 能够正确解析 linked-dir,但无法正确解析 linked-dir/file.txt。对于经过测试的命令而言,这并非问题,但对于其他命令可能会有影响。

注意,符号链接支持存在一个悬而未决的问题 问题 #8245,当符号链接被移动到存在同名文件的目录中时(反之亦然),会创建重复文件。

VFS 大小写敏感性

Linux 文件系统是区分大小写的:两个文件可以仅在大小写上不同,并且在打开文件时必须使用确切的大小写。

现代 Windows 系统中的文件系统不区分大小写,但会保留大小写:尽管可以使用任意大小写来打开现有文件,但创建文件时使用的精确大小写会被保留,并且可供程序查询。同一目录中不允许存在仅大小写不同的两个文件。

通常,macOS 上的文件系统不区分大小写。虽然可以将 macOS 文件系统设置为区分大小写,但这并非默认设置。

--vfs-case-insensitive VFS 标志控制 rclone 如何处理这两种情况。如果其值为 “false”,rclone 会按原样将文件名传递给远程存储。如果该标志为 “true”(或在命令行中不带值出现),rclone 可能会按如下所述进行 “修正”。

用户可能会指定一个与远程存储上存储的大小写不同的文件名来进行打开、删除、重命名等操作。如果参数引用的是一个与现有文件名完全相同的文件,那么磁盘上现有文件的大小写将被使用。然而,如果没有找到完全相同名称的文件,但存在仅大小写不同的名称,rclone 会自动修正该名称。这种修正仅在请求现有文件时发生。rclone 新创建的文件名的大小写敏感性由底层远程存储控制。

请注意,运行 rclone 的操作系统(目标)的大小写敏感性可能与 rclone 呈现的文件系统(源)的大小写敏感性不同。该标志控制是否进行 “修正” 以满足目标的要求。

如果命令行中未提供该标志,则其默认值取决于 rclone 运行的操作系统:在 Windows 和 macOS 上为 “true”,其他情况下为 “false”。如果该标志不带值提供,则其值为 “true”。

--no-unicode-normalization 标志控制是否对那些在 Unicode 方面 规范等效 但不同的文件名进行类似的 “修正”。Unicode 规范化对于 macOS 用户特别有用,因为 macOS 更喜欢使用 NFD 形式,而大多数其他平台使用 NFC 形式。因此,强烈建议在 macOS 上保持默认值 false,以避免编码兼容性问题。

在(可能不太可能)对大小写和 Unicode 进行规范化后,目录中存在多个重复文件名的情况下,--vfs-block-norm-dupes 标志允许隐藏这些重复项。这会带来性能上的权衡,因为 rclone 在列出目录时必须扫描整个目录以查找重复项。因此,如果不需要,建议禁用此功能。但是,macOS 用户可能希望考虑使用它,否则,如果远程目录中同时包含同一文件名的 NFC 和 NFD 版本,将会出现一种奇怪的情况:该文件的两个版本在挂载点中都可见,并且都看起来可以编辑,然而,编辑任何一个版本实际上都会导致只有 NFD 版本在底层被编辑。--vfs-block-norm-dupes 通过检测这种情况、隐藏重复项并记录错误来避免这种混淆,类似于 rclone sync 中的处理方式。

VFS 磁盘选项

此标志允许你手动设置文件系统的统计信息。当这些统计信息无法自动正确读取时,这可能会很有用。

--vfs-disk-space-total-size    手动设置磁盘总空间大小(示例:256G,默认值:-1)

替代的已使用字节报告方式

一些后端,尤其是 S3,不会报告已使用的字节数。如果你在对文件系统运行 df 命令时需要此信息可用,请将 --vfs-used-is-size 标志传递给 rclone。

设置此标志后,rclone 不会依赖后端来报告此信息,而是会像 rclone size 一样扫描整个远程存储,并自行计算总使用空间。

警告:与 rclone size 不同,此标志会忽略过滤器以确保结果准确。然而,这非常低效,可能会导致大量的 API 调用,从而产生额外费用。请将其作为最后的手段使用,并且仅在启用缓存的情况下使用。

rclone serve s3 remote:path [flags]

Options

      --addr stringArray                       要绑定服务器的 IP 地址:端口、:端口 或者 [unix://]/路径/到/套接字 (默认值为 [127.0.0.1:8080])
      --allow-origin string                    允许跨域请求(CORS)执行的源
      --auth-key stringArray                   为 v4 授权设置密钥对:访问密钥 ID, 秘密访问密钥
      --auth-proxy string                      用于根据认证信息创建后端的程序
      --baseurl string                         URL 的前缀 - 留空则使用根路径
      --cert string                            TLS PEM 公钥证书文件的路径(也可以包含中间/CA 证书)
      --client-ca string                       用于验证客户端的 TLS PEM CA 文件的路径,该文件包含证书颁发机构
      --dir-cache-time Duration                目录条目缓存的时间(默认值为 5 分钟)
      --dir-perms FileMode                     目录权限(默认值为 777)
      --etag-hash string                       用于 ETag 的哈希算法,或者设置为 auto 或留空以禁用(默认值为 "MD5")
      --file-perms FileMode                    文件权限(默认值为 666)
      --force-path-style                       如果为 true 则使用路径样式访问,如果为 false 则使用虚拟主机样式访问(默认值为 true)
      --gid uint32                             覆盖文件系统设置的 gid 字段(在 Windows 上不支持)(默认值为 1000)
  -h, --help                                   s3 命令的帮助信息
      --htpasswd string                        htpasswd 文件 - 如果未提供则不进行认证
      --key string                             TLS PEM 私钥文件的路径
      --link-perms FileMode                    链接权限(默认值为 666)
      --max-header-bytes int                   请求头的最大大小(默认值为 4096)
      --min-tls-version string                 可接受的最小 TLS 版本(默认值为 "tls1.0")
      --no-checksum                            上传/下载时不比较校验和
      --no-cleanup                             删除对象后不清理空文件夹
      --no-modtime                             不读取/写入修改时间(可以加快速度)
      --no-seek                                不允许在文件中进行定位操作
      --pass string                            认证密码
      --poll-interval Duration                 轮询更改的间隔时间,必须小于目录缓存时间,仅适用于支持的远程存储(设置为 0 以禁用)(默认值为 1 分钟)
      --read-only                              仅允许只读访问
      --realm string                           认证领域
      --salt string                            密码哈希盐值(默认值为 "dlPL2MqE")
      --server-read-timeout Duration           服务器读取数据的超时时间(默认值为 1 小时)
      --server-write-timeout Duration          服务器写入数据的超时时间(默认值为 1 小时)
      --uid uint32                             覆盖文件系统设置的 uid 字段(在 Windows 上不支持)(默认值为 1000)
      --umask FileMode                         覆盖文件系统设置的权限位(在 Windows 上不支持)(默认值为 002)
      --user string                            认证用户名
      --vfs-block-norm-dupes                   如果同一目录中存在重复的文件名(规范化后),记录错误并隐藏重复项(可能会有性能开销)
      --vfs-cache-max-age Duration             缓存中对象自上次访问以来的最大时间(默认值为 1 小时)
      --vfs-cache-max-size SizeSuffix          缓存中对象的最大总大小(默认值为无限制)
      --vfs-cache-min-free-space SizeSuffix    包含缓存的磁盘上的目标最小可用空间(默认值为无限制)
      --vfs-cache-mode CacheMode               缓存模式:off|minimal|writes|full(默认值为 off)
      --vfs-cache-poll-interval Duration       轮询缓存以查找过期对象的时间间隔(默认值为 1 分钟)
      --vfs-case-insensitive                   如果找不到文件名,查找不区分大小写的匹配项
      --vfs-disk-space-total-size SizeSuffix   指定磁盘的总空间(默认值为无限制)
      --vfs-fast-fingerprint                   使用快速(不太准确)的指纹进行更改检测
      --vfs-links                              为 VFS 将符号链接转换为带有 '.rclonelink' 扩展名的普通文件,反之亦然
      --vfs-read-ahead SizeSuffix              使用 full 缓存模式时,在 --buffer-size 基础上额外预读的字节数
      --vfs-read-chunk-size SizeSuffix         分块读取源对象(默认值为 128Mi)
      --vfs-read-chunk-size-limit SizeSuffix   如果大于 --vfs-read-chunk-size,则每次读取块后将块大小加倍,直到达到限制('off' 表示无限制)(默认值为无限制)
      --vfs-read-chunk-streams int             同时进行读取的并行流数量
      --vfs-read-wait Duration                 在进行定位操作之前,等待按顺序读取的时间(默认值为 20 毫秒)
      --vfs-refresh                            启动时在后台递归刷新目录缓存
      --vfs-used-is-size rclone size           使用 rclone size 算法计算已使用空间
      --vfs-write-back Duration                使用缓存时,文件最后一次使用后写回的时间(默认值为 5 秒)
      --vfs-write-wait Duration                在给出错误之前,等待按顺序写入的时间(默认值为 1 秒)

接下来将介绍与其他命令共享的选项。 有关此处未列出的全局选项,请参阅 全局标志页面

Filter Options

Flags for filtering directory listings

      --delete-excluded                     删除目标端中被排除在同步之外的文件
      --exclude stringArray                 排除符合指定模式的文件
      --exclude-from stringArray            从文件中读取要排除的文件模式(使用 - 从标准输入读取)
      --exclude-if-present stringArray      如果指定文件名存在,则排除该目录
      --files-from stringArray              从文件中读取源文件名列表(使用 - 从标准输入读取)
      --files-from-raw stringArray          从文件中读取源文件名列表,不对行进行任何处理(使用 - 从标准输入读取)
  -f, --filter stringArray                  添加文件过滤规则
      --filter-from stringArray             从文件中读取文件过滤模式(使用 - 从标准输入读取)
      --ignore-case                         在过滤时忽略大小写(大小写不敏感)
      --include stringArray                 包含符合指定模式的文件
      --include-from stringArray            从文件中读取要包含的文件模式(使用 - 从标准输入读取)
      --max-age Duration                    仅传输比指定时间(以秒或后缀 ms|s|m|h|d|w|M|y 表示)更新的文件(默认关闭)
      --max-depth int                       如果设置,则将递归深度限制为此值(默认 -1)
      --max-size SizeSuffix                 仅传输小于指定大小(以 KiB 或后缀 B|K|M|G|T|P 表示)的文件(默认关闭)
      --metadata-exclude stringArray        排除符合指定模式的元数据
      --metadata-exclude-from stringArray   从文件中读取要排除的元数据模式(使用 - 从标准输入读取)
      --metadata-filter stringArray         添加元数据过滤规则
      --metadata-filter-from stringArray    从文件中读取元数据过滤模式(使用 - 从标准输入读取)
      --metadata-include stringArray        包含符合指定模式的元数据
      --metadata-include-from stringArray   从文件中读取要包含的元数据模式(使用 - 从标准输入读取)
      --min-age Duration                    仅传输比指定时间(以秒或后缀 ms|s|m|h|d|w|M|y 表示)更旧的文件(默认关闭)
      --min-size SizeSuffix                 仅传输大于指定大小(以 KiB 或后缀 B|K|M|G|T|P 表示)的文件(默认关闭)

参见

  • rclone serve - 通过协议为远程服务器提供服务。