使用 COSCLI 工具快速迁移本地数据到 腾讯云 COS

简介

在 GitHub 或者 Gitee 等其他地方“白嫖“存储难免会遇到无法访问的时候,例如前段时间 jsDelivr 就因为被 DNS 污染导致无法访问、Gitee 公开仓库私有…

而这两种情况还好,可以使用 git 获取到数据,能拉取到本地,对于有服务器的同学,重新放到本地,替换一下访问链接就可以继续访问了。没有服务器或者没有任何备份程序的就很不友好了,可能会出现数据丢失的问题。

那么这个时候就推荐数据上云了,以腾讯云为例:可以将本地数据迁移至 COS。

对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。针对不同存储类型,腾讯云分别承诺标准存储服务可用性不低于 99.95%,低频存储可用性不低于 99.9%。

提到迁移,第一个想到的可能是 COS Migration 工具:

COS Migration 是一个集成了 COS 数据迁移功能的一体化工具。通过简单的配置操作,用户可以将本地数据迁移至 COS 中,它具有以下特点:

  • 断点续传:工具支持上传时断点续传。对于一些大文件,如果中途退出或者因为服务故障,可重新运行工具,会对未上传完成的文件进行续传。
  • 分块上传:将对象按照分块的方式上传到 COS。
  • 并行上传:支持多个对象同时上传。
  • 迁移校验:对象迁移后的校验。

但是呢,这篇文章推荐使用 COSCLI 工具。COS Migration 是使用 Java 语言开发的,在使用时需要依赖 JDK,Linux 环境需要 IFUNC 支持,确保环境 binutils 版本大于 2.20,对于小白用户不太友好。而 COSCLI 是使用 Go 语言开发,部署方便,且支持跨桶操作。

除此之外,之前还介绍过 COSCMD 的用法,那么 COSCLI 工具与 COSCMD 工具有什么区别?

COSCLI 工具使用 golang 构建,直接发布编译后的二进制包,用户在安装部署时无需预先安装任何依赖,开箱即用;COSCMD 工具使用 Python 构建,用户在安装时需先安装 Python 环境和依赖包。
COSCLI 工具支持设置存储桶别名,可以使用一个短字符串来代替,方便用户使用;COSCMD 工具不支持存储桶别名,用户需要输入来指定一个存储桶,命令繁琐且不易阅读。

COSCLI 工具支持在配置文件内配置多个存储桶,且支持跨桶操作;COSCMD 工具在配置文件中只能配置一个存储桶,且跨桶操作命令过于冗长。

下载与安装配置

COSCLI 工具提供 Windows、Mac、Linux 操作系统的二进制包,通过简单的安装和配置后即可使用,具体请看官方文档:点我直达

以下仅以linux服务器为例:

单击 下载 Linux 版本 COSCLI,或运行以下命令下载 COSCLI:

wget https://github.com/tencentyun/coscli/releases/download/v0.13.0-beta/coscli-linux

运行以下命令重命名文件:

mv coscli-linux coscli

运行以下命令修改文件执行权限:

chmod 755 coscli

在命令行窗口中输入 ./coscli --version,若打印出以下信息则代表安装成功:

coscli version v0.13.0-beta

配置参数

可以使用coscli –help命令来快速查看 COSCLI 的使用方法。在第一次使用时,执行./coscli命令,会进行初始化配置,需要输入Secret ID等信息,按步骤填写完成后,COSCLI 会默认在~/.cos.yaml的位置生成配置文件:

$ ./coscli
2023/05/27 13:01:46 Welcome to coscli!
When you use coscli for the first time, you need to input some necessary information to generate the default configuration file of coscli.
Input Your Secret ID:

后期也可以使用coscli config init命令在其他位置为 COSCLI 交互式地生成配置文件,或者可以直接手动编写 COSCLI 的配置文件。

配置文件中各配置项的说明如下:

配置项 说明
Secret ID 密钥 ID,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 子账号访问密钥管理
Secret Key 密钥 Key,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 子账号访问密钥管理
Session Token 临时密钥 token,当使用临时密钥时需要配置,若不使用可以直接按 Enter 跳过。 关于临时密钥的更多信息,详见 使用临时密钥访问 COS
protocol 网络传输协议,默认为 https。如需更改为 http,可直接进入配置文件进行修改即可。
APPID APPID 是您在成功申请腾讯云账户后所得到的账号,由系统自动分配,可从 账号信息 中获取。一个存储桶的全称由 Bucket Name 和 APPID 这两个元素组成,格式为 <BucketName-APPID>,详情请参见 存储桶命名规范
Bucket Name 存储桶名称,和 APPID 一起构成存储桶全称,格式为 <BucketName-APPID>,详情请参见 存储桶命名规范
Bucket Endpoint 存储桶所在地域的域名,格式为 cos.<region>.myqcloud.com,其中 <region> 代表存储桶地域,例如 ap-guangzhou、ap-beijing 等,COS 支持的地域列表可参见 地域与访问域名
Bucket Alias 存储桶别名,配置后可以在使用时用 BucketAlias 代替 BucketName-APPID,减少所需输入的命令长度,如果不配置此项,BucketAlias 的值是 BucketName-APPID 的值。
OFS Bucket 元数据加速桶标记,用于标识该桶是否开启 元数据加速 功能。目前元数据加速功能为公测功能,需要 联系我们 申请使用。公测期间暂不收费,您可以关注您的 站内信 或者 计费概述,了解最新的计费动态。

在初次配置时,COSCLI 只会要求您配置一个存储桶的信息,如果您希望配置多个存储桶,您后续可以使用 ./coscli config add 命令添加存储桶配置。如您需要修改配置文件,或获取更多有关配置文件的操作,请参考 config 命令 或使用 ./coscli config –help 命令来快速查看和配置文件相关的指令。

在正式开始使用指令之前,您可以使用 ./coscli –help 命令来快速查看 COSCLI 的使用方法。

操作示例

这里介绍一下cp和sync命令

cp 命令用于上传、下载或拷贝文件。
sync 命令用于同步上传、下载或拷贝文件。

与 cp 命令不同的是:sync 命令首先会对比同名文件的 crc64,如果 crc64 值相同则不进行传输。

这两个命令在上传和下载大文件时会自动启用并发上传/下载。当以分块形式上传/下载文件时,会默认开启断点续传。

cp 命令包含以下可选 flag:

flag 简写 flag 全称 flag 用途
–include 包含特定模式的文件
–exclude 排除特定模式的文件
-r –recursive 是否递归遍历文件夹下所有文件
–storage-class 指定上传文件的存储类型(默认 STANDARD),更多存储类型,请参见 存储类型概述
–part-size 文件分块大小(默认32MB),单位MB
–thread-num 并发线程数(默认并发5)
–rate-limiting 单链接速率限制(0.1~100MB/s),单位MB/s
–meta 上传文件的元信息。包括部分 HTTP 标准属性(HTTP Header)以及以 x-cos-meta- 开头的用户自定义元数据(User Meta)。文件元信息格式为 header:value#header:value,示例为 Expires:2022-10-12T00:00:00.000Z#Cache-Control:no-cache#Content-Encoding:gzip#x-cos-meta-x:x。

上传单文件

./coscli cp ~/example.txt cos://bucket1/example.txt

将本地 test 文件夹下的所有文件上传至 bucket1 桶中的 example 文件夹下

./coscli cp ~/test/ cos://bucket1/example/ -r

将本地 test 文件夹下的所有 .mp4 类型文件上传至 bucket1 桶中的 example 文件夹下

./coscli cp ~/test/ cos://bucket1/example/ -r --include .*.mp4

将本地 test 文件夹下的所有非 .md 类型文件上传至 bucket1 桶中的 example 文件夹下

./coscli cp ~/test/ cos://bucket1/example/ -r --exclude .*.md

将本地 dir 文件夹下有 dirA、dirB、dirC、dirD 四个文件夹,将 dir 文件夹下除 dirD 文件夹之外的所有内容上传

./coscli cp dir/ cos://bucket1/example/ -r --exclude dirD/.*

将本地 test 文件夹下的所有文件上传至 bucket1 桶中的 example 文件夹下,并以归档类型文件存储

./coscli cp ~/test/ cos://bucket1/example/ -r --storage-class ARCHIVE

将本地的 file.txt 文件上传至 bucket1 桶并设置单链接速率限制为1.3MB/s

./coscli cp ~/file.txt cos://bucket1/file.txt --rate-limiting 1.3

二次上传

如果出现了某些异常,或者手动停止掉后,想要重新上传,可以使用sync,该命令会对比同名文件的 crc64,如果 crc64 值相同则不进行传输。

coscli sync /yourpath/wp-content/uploads/ cos://bucket1/wp-content/uploads/ -r

使用小技巧

统计文件信息

列出 bucket1 存储桶内文件的统计信息

./coscli du cos://bucket1

列出 bucket1 存储桶 picture 文件夹下文件的统计信息

./coscli du cos://bucket1/picture/

列出 bucket1 存储桶 picture 文件夹下所有 .mp4 类型文件的统计信息

./coscli du cos://bucket1/picture/ --include .*.mp4

列出 bucket1 存储桶 picture 文件夹下所有非 .md 类型文件的统计信息

./coscli du cos://bucket1/picture/ --exclude .*.md

返回的结果示例如下,输出的信息包括:该桶各存储类型下的对象数量和大小、桶内对象总数、桶内对象总容量。

删除文件

命令格式

./coscli rm cos://<bucket-name>[/prefix/] [flag]

解释说明:

flag 简写 flag 全称 flag 用途
-h –help 查看该命令的具体用法
–include 包含特定模式的文件
–exclude 排除特定模式的文件
-r –recursive 是否递归地遍历文件夹下所有文件
-f –force 强制删除(删除文件前不弹出确认信息)

操作示例:
删除文件

./coscli rm cos://bucket1/fig1.png

删除 pictrue 文件夹下的所有文件

./coscli rm cos://bucket1/pictrue/ -r

更多关于 COSCLI 的使用方法请查看官网文档介绍