Microsoft Azure Blob Storage

Microsoft Azure Blob Storage

路径指定为 remote:container(对于 lsd 命令,可使用 remote:)。你也可以指定子目录,例如 remote:container/path/to/dir

配置

以下是一个配置 Microsoft Azure Blob 存储的示例,远程存储名为 remote。首先运行:

 rclone config

这将引导你完成一个交互式的设置过程:

No remotes found, make a new one? n) New remote s) Set configuration password q) Quit config n/s/q> n name> remote Type of storage to configure. Choose a number from below, or type in your own value [snip] XX / Microsoft Azure Blob Storage \ “azureblob” [snip] Storage> azureblob Storage Account Name account> account_name Storage Account Key key> base64encodedkey== Endpoint for the service - leave blank normally. endpoint> Remote config Configuration complete. Options:

  • type: azureblob
  • account: account_name
  • key: base64encodedkey==
  • endpoint: Keep this “remote” remote? y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y

查看所有容器

    rclone lsd remote:

创建一个新容器

    rclone mkdir remote:container

列出容器的内容

    rclone ls remote:container

将 `/home/local/directory` 同步到远程容器,并删除容器中多余的文件。

    rclone sync --interactive /home/local/directory remote:container

### --fast-list

此远程存储支持 `--fast-list`,它允许你以使用更多内存为代价来减少事务次数。有关更多详细信息,请参阅 [rclone 文档](/docs/#fast-list)。

### 修改时间和哈希值

修改时间以元数据的形式存储在对象上,键为 `mtime`。它使用具有纳秒精度的 RFC3339 格式时间进行存储。在目录列表中会提供该元数据,因此使用它不会带来性能开销。

如果你希望使用存储在对象上的 Azure 标准 `LastModified` 时间作为修改时间,请使用 `--use-server-modtime` 标志。请注意,rclone 无法设置 `LastModified`,因此如果使用 `--use-server-modtime`,建议在同步时使用 `--update` 标志。

MD5 哈希值与 blob 一起存储。但是,以分块方式上传的 blob 仅在源远程存储支持 MD5 哈希时才有 MD5 值,例如本地磁盘。

### 性能

上传大文件时,增加 `--azureblob-upload-concurrency` 的值将提高性能,但会消耗更多内存。默认值 16 设置得比较保守,以减少内存使用。对于单文件传输,可能需要将其提高到 64 或更高,才能充分利用 1 GBit/s 的链接。

### 受限文件名字符

除了 [默认受限字符集](/overview/#restricted-characters) 之外,以下字符也会被替换:

| 字符 | 编码值 | 替换字符 |
| --------- |:-----:|:-----------:|
| /         | 0x2F  | /           |
| \         | 0x5C  | \           |

文件名也不能以以下字符结尾。只有当这些字符是文件名的最后一个字符时才会被替换:

| 字符 | 编码值 | 替换字符 |
| --------- |:-----:|:-----------:|
| .         | 0x2E  | .          |

无效的 UTF-8 字节也会被 [替换](/overview/#invalid-utf8),因为它们不能用于 JSON 字符串。

### 身份验证 {#authentication}

有多种方式可以为 Azure Blob 存储提供凭据。rclone 会按以下部分的顺序尝试这些方式。

#### 环境变量认证

如果 `env_auth` 配置参数为 `true`,则 rclone 将从环境变量或运行时获取凭据。

它按以下顺序尝试这些认证方法:

1. 环境变量
2. 托管服务标识凭据
3. Azure CLI 凭据(与 `az` 工具使用的相同)

以下各节将详细介绍这些方法。

##### 环境变量认证:1. 环境变量

如果设置了 `env_auth` 且存在环境变量,rclone 将根据设置的环境变量,使用密钥或证书对服务主体进行认证,或使用密码对用户进行认证。它按以下顺序从这些变量中读取配置:

1. 使用客户端密钥的服务主体
    - `AZURE_TENANT_ID`:服务主体的租户 ID,也称为“目录” ID。
    - `AZURE_CLIENT_ID`:服务主体的客户端 ID。
    - `AZURE_CLIENT_SECRET`:服务主体的一个客户端密钥。
2. 使用证书的服务主体
    - `AZURE_TENANT_ID`:服务主体的租户 ID,也称为“目录” ID。
    - `AZURE_CLIENT_ID`:服务主体的客户端 ID。
    - `AZURE_CLIENT_CERTIFICATE_PATH`:包含私钥的 PEM 或 PKCS12 证书文件的路径。
    - `AZURE_CLIENT_CERTIFICATE_PASSWORD`:(可选)证书文件的密码。
    - `AZURE_CLIENT_SEND_CERTIFICATE_CHAIN`:(可选)指定认证请求是否将包含 x5c 标头以支持基于主题名称/颁发者的认证。当设置为 "true" 或 "1" 时,认证请求将包含 x5c 标头。
3. 使用用户名和密码的用户
    - `AZURE_TENANT_ID`:(可选)要进行认证的租户,默认为 "organizations"。
    - `AZURE_CLIENT_ID`:用户要认证的应用程序的客户端 ID。
    - `AZURE_USERNAME`:用户名(通常是电子邮件地址)。
    - `AZURE_PASSWORD`:用户的密码。
4. 工作负载身份
    - `AZURE_TENANT_ID`:要进行认证的租户。
    - `AZURE_CLIENT_ID`:用户要认证的应用程序的客户端 ID。
    - `AZURE_FEDERATED_TOKEN_FILE`:投影服务账户令牌文件的路径。
    - `AZURE_AUTHORITY_HOST`:Azure Active Directory 端点的权限(默认:login.microsoftonline.com)。

##### 环境变量认证:2. 托管服务标识凭据

使用托管服务标识时,如果运行此程序的虚拟机(SS)具有系统分配的标识,则默认使用该标识。如果资源没有系统分配的标识,但只有一个用户分配的标识,则默认使用该用户分配的标识。

如果资源有多个用户分配的标识,则需要取消设置 `env_auth` 并设置 `use_msi`。请参阅 [`use_msi` 部分](#use_msi)。

如果在断开连接的云或私有云(如 Azure Stack)中操作,你可能希望将 `disable_instance_discovery` 设置为 `true`。这决定了 rclone 在认证之前是否从 `https://login.microsoft.com/` 请求 Microsoft Entra 实例元数据。将此设置为 `true` 将跳过此请求,这意味着你需要确保配置的权限是有效且可信任的。

##### 环境变量认证:3. Azure CLI 凭据(与 `az` 工具使用的相同)

使用 `az` 工具创建的凭据可以通过 `env_auth` 获取。

例如,如果你使用以下命令以服务主体身份登录:

    az login --service-principal -u XXX -p XXX --tenant XXX

然后你可以使用以下方式访问 rclone 资源:

    rclone lsf :azureblob,env_auth,account=ACCOUNT:CONTAINER

或者

    rclone lsf --azureblob-env-auth --azureblob-account=ACCOUNT :azureblob:CONTAINER

这类似于使用 `az` 工具:

    az storage blob list --container-name CONTAINER --account-name ACCOUNT --auth-mode login

#### 账户和共享密钥

这是最直接但灵活性最低的方法。只需填写 `account` 和 `key` 字段,其余字段留空即可。

#### SAS URL

这可以是账户级别的 SAS URL 或容器级别的 SAS URL。

要使用它,请将 `account` 和 `key` 留空,并填写 `sas_url`。

可以从 Azure 门户或 Azure 存储资源管理器获取账户级别的 SAS URL 或容器级别的 SAS URL。要获取容器级别的 SAS URL,请在 Azure 门户的 Azure Blob 资源管理器中右键单击容器。

如果你使用容器级别的 SAS URL,rclone 操作仅允许在特定容器上进行,例如:

    rclone ls azureblob:container

你也可以从根目录列出单个容器。这将仅显示 SAS URL 指定的容器。

    $ rclone lsd azureblob:
    container/

请注意,你无法查看或访问任何其他容器,以下操作将失败:

    rclone ls azureblob:othercontainer

容器级别的 SAS URL 对于临时允许第三方访问单个容器或将凭据放入不可信环境(如 CI 构建服务器)很有用。

#### 使用客户端密钥的服务主体

如果设置了以下变量,rclone 将使用客户端密钥对服务主体进行认证。

- `tenant`:服务主体的租户 ID,也称为“目录” ID。
- `client_id`:服务主体的客户端 ID。
- `client_secret`:服务主体的一个客户端密钥。

凭据也可以使用 `service_principal_file` 配置选项放在文件中。

#### 使用证书的服务主体

如果设置了以下变量,rclone 将使用证书对服务主体进行认证。

- `tenant`:服务主体的租户 ID,也称为“目录” ID。
- `client_id`:服务主体的客户端 ID。
- `client_certificate_path`:包含私钥的 PEM 或 PKCS12 证书文件的路径。
- `client_certificate_password`:(可选)证书文件的密码。
- `client_send_certificate_chain`:(可选)指定认证请求是否将包含 x5c 标头以支持基于主题名称/颁发者的认证。当设置为 "true" 或 "1" 时,认证请求将包含 x5c 标头。

**注意**:`client_certificate_password` 必须进行加密处理 - 请参阅 [rclone obscure](/commands/rclone_obscure/)。

#### 使用用户名和密码的用户

如果设置了以下变量,rclone 将使用用户名和密码进行认证。

- `tenant`:(可选)要进行认证的租户,默认为 "organizations"。
- `client_id`:用户要认证的应用程序的客户端 ID。
- `username`:用户名(通常是电子邮件地址)。
- `password`:用户的密码。

微软不建议使用这种认证方式,因为它比其他认证流程的安全性低。这种方法是非交互式的,因此与任何形式的多因素认证都不兼容,并且应用程序必须已经获得用户或管理员的同意。此凭据只能对工作和学校账户进行认证,不能对 Microsoft 账户进行认证。

**注意**:`password` 必须进行加密处理 - 请参阅 [rclone obscure](/commands/rclone_obscure/)。

#### 托管服务标识凭据 {#use_msi}

如果设置了 `use_msi`,则使用托管服务标识凭据。此认证仅在 Azure 服务中运行时有效。要使用此功能,需要取消设置 `env_auth`。

但是,如果你有多个用户标识可供选择,则必须使用 `msi_object_id`、`msi_client_id` 或 `msi_mi_res_id` 中的一个参数明确指定。

如果未设置 `msi_object_id`、`msi_client_id` 或 `msi_mi_res_id`,则等同于使用 `env_auth`。

#### Azure CLI 工具 `az` {#use_az}

设置为使用 [Azure CLI 工具 `az`](https://learn.microsoft.com/en-us/cli/azure/) 作为唯一的认证方式。

如果你希望在具有系统托管标识但不想使用该标识的主机上使用 `az` CLI,设置此选项会很有用。

不要同时设置 `env_auth`。

#### 匿名访问 {#anonymous}

如果你想访问具有公共匿名访问权限的资源,只需设置 `account`。你可以在不创建 rclone 配置的情况下执行此操作:

    rclone lsf :azureblob,account=ACCOUNT:CONTAINER


### 标准选项

以下是 Azure Blob(Microsoft Azure Blob 存储)特定的标准选项。

#### --azureblob-account

Azure 存储账户名称。

将此设置为正在使用的 Azure 存储账户名称。

若要使用 SAS URL 或模拟器,请留空;否则需要设置此选项。

如果此选项为空且设置了 `env_auth`,则会尽可能从环境变量 `AZURE_STORAGE_ACCOUNT_NAME` 中读取该值。

属性:

- 配置项:account
- 环境变量:RCLONE_AZUREBLOB_ACCOUNT
- 类型:字符串
- 是否必需:否

#### --azureblob-env-auth

从运行时(环境变量、CLI 或 MSI)读取凭据。

有关详细信息,请参阅 [认证文档](/azureblob#authentication)。

属性:

- 配置项:env_auth
- 环境变量:RCLONE_AZUREBLOB_ENV_AUTH
- 类型:布尔值
- 默认值:false

#### --azureblob-key

存储账户共享密钥。

若要使用 SAS URL 或模拟器,请留空。

属性:

- 配置项:key
- 环境变量:RCLONE_AZUREBLOB_KEY
- 类型:字符串
- 是否必需:否

#### --azureblob-sas-url

仅用于容器级访问的 SAS URL。

如果使用账户/密钥或模拟器,请留空。

属性:

- 配置项:sas_url
- 环境变量:RCLONE_AZUREBLOB_SAS_URL
- 类型:字符串
- 是否必需:否

#### --azureblob-tenant

服务主体的租户 ID,也称为目录 ID。

在以下情况下设置此选项:
- 使用客户端密钥的服务主体
- 使用证书的服务主体
- 使用用户名和密码的用户

属性:

- 配置项:tenant
- 环境变量:RCLONE_AZUREBLOB_TENANT
- 类型:字符串
- 是否必需:否

#### --azureblob-client-id

正在使用的客户端的 ID。

在以下情况下设置此选项:
- 使用客户端密钥的服务主体
- 使用证书的服务主体
- 使用用户名和密码的用户

属性:

- 配置项:client_id
- 环境变量:RCLONE_AZUREBLOB_CLIENT_ID
- 类型:字符串
- 是否必需:否

#### --azureblob-client-secret

服务主体的一个客户端密钥。

在以下情况下设置此选项:
- 使用客户端密钥的服务主体

属性:

- 配置项:client_secret
- 环境变量:RCLONE_AZUREBLOB_CLIENT_SECRET
- 类型:字符串
- 是否必需:否

#### --azureblob-client-certificate-path

包含私钥的 PEM 或 PKCS12 证书文件的路径。

在以下情况下设置此选项:
- 使用证书的服务主体

属性:

- 配置项:client_certificate_path
- 环境变量:RCLONE_AZUREBLOB_CLIENT_CERTIFICATE_PATH
- 类型:字符串
- 是否必需:否

#### --azureblob-client-certificate-password

证书文件的密码(可选)。

在以下情况下可选择设置此选项:
- 使用证书的服务主体

并且证书有密码。

**注意**:输入此选项的值必须进行加密处理 - 请参阅 [rclone obscure](/commands/rclone_obscure/)。

属性:

- 配置项:client_certificate_password
- 环境变量:RCLONE_AZUREBLOB_CLIENT_CERTIFICATE_PASSWORD
- 类型:字符串
- 是否必需:否

### 高级选项

以下是 Azure Blob(Microsoft Azure Blob 存储)特定的高级选项。

#### --azureblob-client-send-certificate-chain

在使用证书认证时发送证书链。

指定认证请求是否将包含 x5c 标头以支持基于主题名称/颁发者的认证。当设置为 true 时,认证请求将包含 x5c 标头。

在以下情况下可选择设置此选项:
- 使用证书的服务主体

属性:

- 配置项:client_send_certificate_chain
- 环境变量:RCLONE_AZUREBLOB_CLIENT_SEND_CERTIFICATE_CHAIN
- 类型:布尔值
- 默认值:false

#### --azureblob-username

用户名(通常是电子邮件地址)

在以下情况下设置此选项:
- 使用用户名和密码的用户

属性:

- 配置项:username
- 环境变量:RCLONE_AZUREBLOB_USERNAME
- 类型:字符串
- 是否必需:否

#### --azureblob-password

用户的密码

在以下情况下设置此选项:
- 使用用户名和密码的用户

**注意**:输入此选项的值必须进行加密处理 - 请参阅 [rclone obscure](/commands/rclone_obscure/)。

属性:

- 配置项:password
- 环境变量:RCLONE_AZUREBLOB_PASSWORD
- 类型:字符串
- 是否必需:否

#### --azureblob-service-principal-file

包含服务主体凭据的文件路径。

通常留空。仅当你想使用服务主体而不是交互式登录时才需要设置。

    $ az ad sp create-for-rbac --name "<name>" \
      --role "Storage Blob Data Owner" \
      --scopes "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/blobServices/default/containers/<container>" \
      > azure-principal.json

有关更多详细信息,请参阅 ["创建 Azure 服务主体"](https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli) 和 ["分配 Azure 角色以访问 blob 数据"](https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-rbac-cli) 页面。

将凭据直接放在 rclone 配置文件中的 `client_id`、`tenant` 和 `client_secret` 键下,而不是设置 `service_principal_file`,可能会更方便。

属性:

- 配置项:service_principal_file
- 环境变量:RCLONE_AZUREBLOB_SERVICE_PRINCIPAL_FILE
- 类型:字符串
- 是否必需:否

#### --azureblob-disable-instance-discovery

跳过请求 Microsoft Entra 实例元数据

只有在断开连接的云或私有云(如 Azure Stack)中进行认证的应用程序才应将此设置为 true。

它决定了 rclone 在认证之前是否从 `https://login.microsoft.com/` 请求 Microsoft Entra 实例元数据。

将此设置为 true 将跳过此请求,这意味着你需要确保配置的权限是有效且可信任的。

属性:

- 配置项:disable_instance_discovery
- 环境变量:RCLONE_AZUREBLOB_DISABLE_INSTANCE_DISCOVERY
- 类型:布尔值
- 默认值:false

#### --azureblob-use-msi

使用托管服务标识进行认证(仅在 Azure 中有效)。

当设置为 true 时,使用 [托管服务标识](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/) 而不是 SAS 令牌或账户密钥来对 Azure 存储进行认证。

如果运行此程序的虚拟机(SS)具有系统分配的标识,则默认使用该标识。如果资源没有系统分配的标识,但只有一个用户分配的标识,则默认使用该用户分配的标识。如果资源有多个用户分配的标识,则必须使用 `msi_object_id`、`msi_client_id` 或 `msi_mi_res_id` 中的一个参数明确指定要使用的标识。

属性:

- 配置项:use_msi
- 环境变量:RCLONE_AZUREBLOB_USE_MSI
- 类型:布尔值
- 默认值:false

#### --azureblob-msi-object-id

要使用的用户分配的 MSI 的对象 ID(如果有)。

如果指定了 `msi_client_id` 或 `msi_mi_res_id`,则留空。

属性:

- 配置项:msi_object_id
- 环境变量:RCLONE_AZUREBLOB_MSI_OBJECT_ID
- 类型:字符串
- 是否必需:否

#### --azureblob-msi-client-id

要使用的用户分配的 MSI 的对象 ID(如果有)。

如果指定了 `msi_object_id` 或 `msi_mi_res_id`,则留空。

属性:

- 配置项:msi_client_id
- 环境变量:RCLONE_AZUREBLOB_MSI_CLIENT_ID
- 类型:字符串
- 是否必需:否

#### --azureblob-msi-mi-res-id

要使用的用户分配的 MSI 的 Azure 资源 ID(如果有)。

如果指定了 `msi_client_id` 或 `msi_object_id`,则留空。

属性:

- 配置项:msi_mi_res_id
- 环境变量:RCLONE_AZUREBLOB_MSI_MI_RES_ID
- 类型:字符串
- 是否必需:否

#### --azureblob-use-emulator

如果设置为 'true',则使用本地存储模拟器。

如果使用真实的 Azure 存储端点,请留空。

属性:

- 配置项:use_emulator
- 环境变量:RCLONE_AZUREBLOB_USE_EMULATOR
- 类型:布尔值
- 默认值:false

#### --azureblob-use-az

使用 Azure CLI 工具 `az` 进行认证

设置为使用 [Azure CLI 工具 `az`](https://learn.microsoft.com/en-us/cli/azure/) 作为唯一的认证方式。

如果你希望在具有系统托管标识但不想使用该标识的主机上使用 `az` CLI,设置此选项会很有用。

不要同时设置 `env_auth`。

属性:

- 配置项:use_az
- 环境变量:RCLONE_AZUREBLOB_USE_AZ
- 类型:布尔值
- 默认值:false

#### --azureblob-endpoint

服务的端点。

通常留空。

属性:

- 配置项:endpoint
- 环境变量:RCLONE_AZUREBLOB_ENDPOINT
- 类型:字符串
- 是否必需:否

#### --azureblob-upload-cutoff

切换到分块上传的阈值(<= 256 MiB)(已弃用)。

属性:

- 配置项:upload_cutoff
- 环境变量:RCLONE_AZUREBLOB_UPLOAD_CUTOFF
- 类型:字符串
- 是否必需:否

#### --azureblob-chunk-size

上传块大小。

请注意,此块会存储在内存中,并且内存中可能会同时存储多达 "--transfers" * "--azureblob-upload-concurrency" 个块。

属性:

- 配置项:chunk_size
- 环境变量:RCLONE_AZUREBLOB_CHUNK_SIZE
- 类型:SizeSuffix
- 默认值:4Mi

#### --azureblob-upload-concurrency

多部分上传的并发数。

这是同一文件的多个块同时上传的数量。

如果你通过高速链接上传少量大文件,并且这些上传没有充分利用你的带宽,那么增加此值可能有助于加快传输速度。

在测试中,上传速度几乎与上传并发数成线性增长。例如,要填满千兆位管道,可能需要将此值提高到 64。请注意,这将使用更多内存。

请注意,块会存储在内存中,并且内存中可能会同时存储多达 "--transfers" * "--azureblob-upload-concurrency" 个块。

属性:

- 配置项:upload_concurrency
- 环境变量:RCLONE_AZUREBLOB_UPLOAD_CONCURRENCY
- 类型:整数
- 默认值:16

#### --azureblob-list-chunk

Blob 列表的大小。

这设置了每个列表块中请求的 Blob 数量。默认值是最大值 5000。“列出 Blob”请求允许每兆字节 2 分钟来完成。如果一个操作平均每兆字节花费的时间超过 2 分钟,它将超时([来源](https://docs.microsoft.com/en-us/rest/api/storageservices/setting-timeouts-for-blob-service-operations#exceptions-to-default-timeout-interval))。这可用于限制返回的 Blob 项数量,以避免超时。

属性:

- 配置项:list_chunk
- 环境变量:RCLONE_AZUREBLOB_LIST_CHUNK
- 类型:整数
- 默认值:5000

#### --azureblob-access-tier

Blob 的访问层:热、冷、酷或存档。

存档的 Blob 可以通过将访问层设置为热、冷或酷来恢复。如果你打算使用在账户级别设置的默认访问层,请留空。

如果没有指定“访问层”,rclone 不会应用任何层。rclone 在上传时会对 Blob 执行“设置层”操作,如果对象未修改,将“访问层”指定为新的层将不会有任何效果。如果远程的 Blob 处于“存档层”,尝试从远程执行数据传输操作将不被允许。用户应首先通过将 Blob 分层为“热”、“冷”或“酷”来恢复。

属性:

- 配置项:access_tier
- 环境变量:RCLONE_AZUREBLOB_ACCESS_TIER
- 类型:字符串
- 是否必需:否

#### --azureblob-archive-tier-delete

在覆盖存档层 Blob 之前删除它们。

存档层的 Blob 不能更新。因此,如果没有设置此标志,当你尝试更新存档层的 Blob 时,rclone 将产生错误:

    不使用 --azureblob-archive-tier-delete 无法更新存档层的 Blob

设置此标志后,rclone 在尝试覆盖存档层的 Blob 之前,会在上传替换文件之前删除现有 Blob。如果上传失败,这有可能导致数据丢失(与更新普通 Blob 不同),而且由于提前删除存档层的 Blob 可能会产生费用,因此成本可能更高。

属性:

- 配置项:archive_tier_delete
- 环境变量:RCLONE_AZUREBLOB_ARCHIVE_TIER_DELETE
- 类型:布尔值
- 默认值:false

#### --azureblob-disable-checksum

不将 MD5 校验和存储在对象元数据中。

通常,rclone 会在上传之前计算输入的 MD5 校验和,以便将其添加到对象的元数据中。这对于数据完整性检查非常有用,但可能会导致大文件上传开始前出现长时间延迟。

属性:

- 配置项:disable_checksum
- 环境变量:RCLONE_AZUREBLOB_DISABLE_CHECKSUM
- 类型:布尔值
- 默认值:false

#### --azureblob-memory-pool-flush-time

内部内存缓冲区池刷新的频率(不再使用)。

属性:

- 配置项:memory_pool_flush_time
- 环境变量:RCLONE_AZUREBLOB_MEMORY_POOL_FLUSH_TIME
- 类型:Duration
- 默认值:1m0s

#### --azureblob-memory-pool-use-mmap

内部内存池是否使用 mmap 缓冲区(不再使用)。

属性:

- 配置项:memory_pool_use_mmap
- 环境变量:RCLONE_AZUREBLOB_MEMORY_POOL_USE_MMAP
- 类型:布尔值
- 默认值:false

#### --azureblob-encoding

后端的编码方式。

有关更多信息,请参阅 [概述中的编码部分](/overview/#encoding)。

属性:

- 配置项:encoding
- 环境变量:RCLONE_AZUREBLOB_ENCODING
- 类型:Encoding
- 默认值:Slash,BackSlash,Del,Ctl,RightPeriod,InvalidUtf8

#### --azureblob-public-access

容器的公共访问级别:blob 或 container。

属性:

- 配置项:public_access
- 环境变量:RCLONE_AZUREBLOB_PUBLIC_ACCESS
- 类型:字符串
- 是否必需:否
- 示例:
    - ""
        - 只能通过授权请求访问容器及其 Blob。
        - 这是默认值。
    - "blob"
        - 可以通过匿名请求读取此容器内的 Blob 数据。
    - "container"
        - 允许对容器和 Blob 数据进行完全公共读取访问。

#### --azureblob-directory-markers

创建新目录时,上传一个带有尾随斜杠的空对象

基于存储桶的远程存储不支持空文件夹,此选项会创建一个以 "/" 结尾的空对象来保留文件夹。

此对象还具有元数据 "hdi_isfolder = true" 以符合 Microsoft 标准。

属性:

- 配置项:directory_markers
- 环境变量:RCLONE_AZUREBLOB_DIRECTORY_MARKERS
- 类型:布尔值
- 默认值:false

#### --azureblob-no-check-container

如果设置,则不尝试检查容器是否存在或创建它。

如果你知道容器已经存在,并且希望尽量减少 rclone 执行的事务数量,那么此选项会很有用。

属性:

- 配置项:no_check_container
- 环境变量:RCLONE_AZUREBLOB_NO_CHECK_CONTAINER
- 类型:布尔值
- 默认值:false

#### --azureblob-no-head-object

如果设置,则在获取对象时不进行 GET 前的 HEAD 请求。

属性:

- 配置项:no_head_object
- 环境变量:RCLONE_AZUREBLOB_NO_HEAD_OBJECT
- 类型:布尔值
- 默认值:false

#### --azureblob-delete-snapshots

设置以指定在删除 Blob 时如何处理快照。

属性:

- 配置项:delete_snapshots
- 环境变量:RCLONE_AZUREBLOB_DELETE_SNAPSHOTS
- 类型:字符串
- 是否必需:否
- 选项:
    - ""
        - 默认情况下,如果 Blob 有快照,删除操作将失败。
    - "include"
        - 指定 'include' 以删除根 Blob 及其所有快照。
    - "only"
        - 指定 'only' 以仅删除快照但保留根 Blob。

#### --azureblob-description

远程存储的描述。

属性:

- 配置项:description
- 环境变量:RCLONE_AZUREBLOB_DESCRIPTION
- 类型:字符串
- 是否必需:否



### 自定义上传头部

你可以使用 `--header-upload` 标志来设置自定义上传头部。

- Cache-Control
- Content-Disposition
- Content-Encoding
- Content-Language
- Content-Type
- X-MS-Tags

例如 `--header-upload "Content-Type: text/potato"` 或者 `--header-upload "X-MS-Tags: foo=bar"`

## 限制

只有当源文件有 MD5 哈希值时,分块文件的 MD5 哈希值才会被上传。从本地复制到 Azure 时总是会有这种情况。

Microsoft Azure Blob 存储后端不支持 `rclone about` 命令。不具备此功能的后端无法确定 rclone 挂载的可用空间,也不能在 rclone 联合远程存储中使用 `mfs`(最大可用空间)策略。

请参阅 [不支持 rclone about 的后端列表](https://rclone.cn/overview/#optional-features) 和 [rclone about](https://rclone.cn/commands/rclone_about/)

## Azure 存储模拟器支持

你可以使用存储模拟器(通常是 _azurite_)来运行 rclone。

要实现这一点,只需按照介绍中的说明使用 `rclone config` 设置一个新的远程存储,并在高级设置中将 `use_emulator` 设置为 `true`。你无需提供默认的账户名和账户密钥,但可以在 `account` 和 `key` 选项中进行覆盖。(在 v1.61 之前,它们被硬编码为 _azurite_ 的 `devstoreaccount1`。)

此外,如果你想访问运行在不同机器上的存储模拟器实例,可以在高级设置中覆盖 `endpoint` 参数,将其设置为 `http(s)://<主机>:<端口>/devstoreaccount1`(例如 `http://10.254.2.5:10000/devstoreaccount1`)。