logo头像
Snippet 博客主题

七牛云对象存储空间迁移脚本

前言

现在博客的图片都放在七牛云对象存储上面,个人用户有免费10GB的存储空间。

因为每一个的bucket空间分配一个七牛云的空间域名,如下示例:

S3 域名

Endpoint(区域节点): s3-cn-east-1.qiniucs.com

空间域名: 20191119.s3-cn-east-1.qiniucs.com

融合 CDN 测试域名

七牛融合 CDN 测试域名(以 clouddn.com/qiniucdn.com/qiniudn.com/qnssl.com/qbox.me 结尾),每个域名每日限总流量 10GB,每个测试域名自创建起 30 个自然日后系统会自动回收,仅供测试使用并且不支持 Https 访问,详情查看 七牛测试域名使用规范 。点击域名可查看剩余回收时间。

q176n8af9.bkt.clouddn.com

七牛云很坑的一点就是这个测试域名有效期是30天(随口一说,人家免费给你的10G存储已经很不错了),所以30天以后域名会自动过期,意味着里面存储的图片以及对象都不能访问。

解决这种问题有两种方法:

  1. 绑定一个备案的域名(非常建议);

    优点:快速好管理,只有域名不过期,终身享受;

    缺点:条件限制比较大,域名要备案。

  2. 切换bucket空间,即新建一个新的bucket,然后将旧的bucket迁移过去。

    优点:免费

    缺点:麻烦,每隔30天迁移一次

迁移

我只有国内的域名:http://yeamin.top

我的Blog域名是http://blog.yeamin.top

因为我个人没有服务器,主域名都没有在国内备案,在我这里选择了第二种方式:迁移空间换取新的bucket和域名。

准备工作

打开七牛云官网,登录进入到管理控制台,左侧选择对象存储

  1. 找到要迁移的bucket,即源存储;
  2. 新建一个bucket,即便目标存储空间;
  3. 下载并解压七牛云官方提供的同步迁移工具:http://developer.qiniu.com/docs/v6/tools/qshell.html;
  4. 在右上角找到我的图像悬浮出来菜单后,选择秘钥管理,准备好AK和SK(AccessKey/SecretKey)。

具体迁移可以参照七牛云的迁移文档可完成迁移工作,但是我觉得每次都这样一个一个这样迁移很麻烦,所以我今天抽空写了一段脚本去处理迁移工作。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
#
# author: tong.li
# description: qshell bucket transfer
# date: 2019-11-02 14:45:22

#准备配置环境
echo "Prepare Environment..."
if [ ! -x './qshell-windows-x64-v2.4.0' ]
then
echo "qshell script file not exist"
fi

if [[ !"$1" ]]; then
echo -n "please input account:"
read account
fi

echo -n 'please input your AK:'
read AK
echo -n 'please input your SK:'
read SK

if [[ ! "$AK" || ! "$SK" ]]; then
echo "AK OR SK is null, please try again"
exit 0
fi

# 已有账户列表
rs=`./qshell-windows-x64-v2.4.0 user ls | awk '{print $2}'`

if [[ $rs=~$AK && $rs=~$SK && $rs=~$account ]]; then
echo "Config OK..."
else
echo "Starting AK、SK Config..."
./qshell-windows-x64-v2.4.0 account ak sk name
fi
echo "account: $account"
echo "AK is : $AK"
echo "SK is: $SK"


if [[ !"$sourcebucket" ]]; then
echo -n "please input sourcebucket:"
read sourcebucket
fi
if [[ !"$desbucket" ]]; then
echo -n "please input desbucket:"
read desbucket
fi

# 列举当前需要复制bucket数据
./qshell-windows-x64-v2.4.0 listbucket $sourcebucket -o cp.txt
# 生成文件列表
cat cp.txt | awk '{print $1}' > cpp.txt

size=$(du -sb cpp.txt|cut -f1)
if [[ size <=0 ]]; then
echo "cpp.txt size is 0KB"
exit 0
fi

# 开始批量迁移
./qshell-windows-x64-v2.4.0 batchcopy $sourcebucket $desbucket -i cpp.txt
if [ $? -eq 0 ]; then
echo "==============transfer bucket From $sourcebucket to $desbucket success=============================="
else
echo "=============================transfer bucket failed,please try again=================================="
fi

执行迁移

  1. 将上述代码保存batchcopy.sh,并赋予可执行权限;
  2. 执行./batchcopy.sh 你的七牛云账户名
  3. 之后按输入提示输入AK、SK、源bucket、目标bucket即可完成迁移操作。

总结

​ 经常看别人的shell脚本,自己从来也没写过,这是是第一次写脚本,多少可能有些bug。后续发现了会及时更正他。总之还是多学多实践一下没坏处。

参考文档

支付宝打赏 微信打赏

请作者喝杯咖啡吧