关于服务器数据的备份,之前一直使用的是备份到阿里云OSS的方案,可能是数据数据量比较少,连计费的零头都没到,在账单里没看到流量费、请求费的身影。花钱的地方也只是年付购买了一个存储包,总的来说还是可以的。

但是为什么我现在放弃了这套方案?理由也许很可笑——安全性。这不是怀疑阿里的技术,阿里云OSS有多种冗余方式可选择,数据丢失的可能性微乎其微。安全是多方面的,不是说数据不会损毁就是安全,这里就不展开说了,有时候不是一个大公司或个人的意志能改变的。

关于Backblaze B2,不用过多介绍,如果你检索过关于对象存储的内容,肯定知道它声名在外。

正如题目所说,我把Backblaze B2存储挂载到了本地,从宏观上看,可以把它当成一个本地的磁盘,用来备份网站数据。事实上这是可行的,也不是啥船新的玩法,网络上已经有非常多的文章讲这玩意儿。但是随着Rclone(一个把B2存储挂载到本地的软件)的更新迭代,很大一部分文章已经失去了参考价值,也使得我趟了不少坑,故在此记录,方便以后部署参考。

需要注意的是,这不是一篇教程,而是知识记录,所以不会很详细。相比较于这篇文章,我更建议你参看官方文档

Backblaze B2篇

Backblaze B2创建存储桶

image-20220902221322442

过程略,公开或者私有的桶都可以。

Backblaze B2创建应用程序密钥

image-20220902233458847

应用程序密钥分为主应用程序密钥和其他应用的密钥。主密钥拥有管理所有存储桶的权限,一般不会轻易使用。其他应用程序密钥类似于一个子账户,可以配置不同的权限,供不同的程序使用,可以任意创建和删除,而主密钥只能同时存在一个。

子密钥创建好后,需要记一下相应的ID和KEY,在后续配置Rclone中会用到。

image-20220902233755265

RCLONE篇

要想把一些云存储服务挂载到本地,rclone当然是不可或缺的软件。如果你不知道rclone是什么,可以看看这里有关它的内容。简而言之,rclone是一个用于管理云存储的程序,支持超过40种来自各厂商的云存储产品。

在Linux上安装Rclone程序

有好几种安装方式,具体官方部署教程里面有,这里选择一种最简单的脚本安装方式。

curl https://rclone.org/install.sh | sudo bash

出现这些提示就算安装成功啦

rclone v1.59.1 has successfully installed.
Now run "rclone config" for setup. Check https://rclone.org/docs/ for more details.

配置Rclone

配置过程参考官方的部署文档,写得很详细,内容是真的多,让人有点抓不住重点。

以下是配置过程:

[root@]# rclone config   ###开始配置文件
2022/09/02 16:07:27 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n   ###输入“n”创建新的配置文件

Enter name for new remote.
name> BackblazeB2   ###输入新建配置的文件名(很重要,不要忘记了这个名字),这里设定的名字为:BackblazeB2

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.   
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
.......
.......
47 / Zoho
   \ (zoho)
48 / premiumize.me
   \ (premiumizeme)
49 / seafile
   \ (seafile)

Storage> 6   ###输入数字选择云存储服务商

Option account.
Account ID or Application Key ID.
Enter a value.
account> 0045ba**************0009   ###输入上面Backblaze B2密钥的keyID项

Option key.
Application Key.
Enter a value.
key> K004/**************orKuzc   ###输入上面Backblaze B2密钥的ApplicationKey项

Option hard_delete.
Permanently delete files on remote removal, otherwise hide files.
Enter a boolean value (true or false). Press Enter for the default (false).
hard_delete> true   ###这个地方配置的是,当在服务器删除文件时,是否也把在云存储端的文件一起删了,true表示两边同步删除。基于节省云存储空间的考量,一般选true就行了。

Edit advanced config?
y) Yes
n) No (default)
y/n> n   ###这里是说是否要开启高级配置选项。基于能用就行的原则,选n。后续想调整的话,请参阅官方手册进行配置。

Configuration complete.
Options:
- type: b2
- account: 0045ba**************0009
- key: K004/**************orKuzc
- hard_delete: true
Keep this "BackblazeB2" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y   ###输入“y”保存配置文件。

Current remotes:

Name                 Type
====                 ====
BackblazeB2          b2

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q   ###输入“q”退出配置编辑模式。

至此,Rclone的配置文件设置完成。

测试Rclone配置是否正常

以下命令中data*****为存储桶名称,为安全起见而打码。

查看文件

执行远程文件查看命令

rclone ls BackblazeB2:data*****

此处data*****表示云存储桶的名称,执行此命令可查看桶根目录下的文件。命令结构如下:

rclone ls [配置文件名称]:[存储桶名称]/[目录]

正常情况下会得到这样的结果,会显示存储桶里的所有文件

[root@]# rclone ls  BackblazeB2:data*****
        0 sitedata/panel/2022-09-02.zip
        5 sitedata/panel/2022-09-02/config/abort.json
      170 sitedata/panel/2022-09-02/config/api.json
      479 sitedata/panel/2022-09-02/config/api_node.json
      324 sitedata/panel/2022-09-02/config/config.json
     1874 sitedata/panel/2022-09-02/config/dns_api.json
     1548 sitedata/panel/2022-09-02/config/dns_api_init.json
       54 sitedata/panel/2022-09-02/config/hide_menu.json
      111 sitedata/panel/2022-09-02/config/hosts.json
       24 sitedata/panel/2022-09-02/config/index.json

错误类型

  • 如果出现
    Failed to create file system for "remote:data*****": didn't find section in config file
    

    说明你打错了配置文件的名称

  • 如果出现

    Failed to create file system for "BackblazeB2:data*****": failed to authorize account: failed to authenticate: Unknown 401  (401 bad_auth_token)
    

    说明你的应用程序密钥写错了,请检查是否多了一个空格啥的。

如果发现配置错了,执行rclone config重新设置配置文件

  [root@]# rclone config
  Current remotes:

  Name                 Type
  ====                 ====
  BackblazeB2          b2

  e) Edit existing remote
  n) New remote
  d) Delete remote
  r) Rename remote
  c) Copy remote
  s) Set configuration password
  q) Quit config
  e/n/d/r/c/s/q> e   ###输入“e”重新设置配置文件

  Select remote.
  Choose a number from below, or type in an existing value.
   1 > BackblazeB2
  remote> 1   ###输入配置文件的对应代号

  ###后续配置步骤同上述的“ 配置Rclone”条目,不再赘述。

挂载云存储到本地目录

在上述的测试步骤中能正常浏览到文件后,即可将云存储桶挂载到本地目录中。

挂载

新建一个挂载目录

mkdir /mnt/b2

通过Rclone挂载

rclone mount BackblazeB2:data***** /mnt/b2

命令结构如下:

rclone mount [配置文件名称]:[存储桶名称] [挂载点]

使用过mount命令的同学应该很熟悉了,注意[存储桶名称][挂载点]之间的空格。

需要注意的是,这种挂载方式属于前台挂载,执行完命令之后ssh会卡着,输入CTRL+ c后会停止挂载,结束ssh会话也会停止挂载。

如果需要后台挂载,在命令的后面加--daemon即可,即:

rclone mount BackblazeB2:data***** /mnt/b2 --daemon

错误类型

2022/09/02 16:39:42 Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount": executable file not found in $PATH

原因:缺少fuser程序。在最小化安装centos的时候,是没有fuser这个命令的,有些云服务商提供的系统可能会没有fuser,需要手动安装。以CentOS为例,执行命令yum install fuser -y即可安装。安装完成后再次执行挂载命令即可成功挂载。

[root@]# df -h
Filesystem                         Size  Used Avail Use% Mounted on
BackblazeB2:data*****  1.0P     0  1.0P   0% /mnt/b2

可以看到直接把容量标成了1PB,太暴力了!

后续篇

成功将云存储桶挂载到本地目录后,即可将文件备份到此目录中,Rclone会将它们上传到云上。此目录可以当成本地磁盘使用,应用程序无缝兼容。

这篇文章只是使用到了Rclone的基本功能,还有很多的高级功能等待去探索。不过基于能用就行为主导思想的我,应该是没啥动力去研究了....

当然了,这玩意儿也是有缺点的——不适合频繁读写的场合,所以也只是建议拿来当备份目录。

この素晴らしい世界に祝福を!
最后更新于 2022-09-05