简述

目的:把天翼云盘做为备份盘映射到迷你主机(Linux)上,做为数据备份盘,每月自动备份重要数据一次。

主要流程:
通过alist使天翼云盘能webdav访问,通过rclone实现alist的webdav挂载在Linux上,然后通过rclone的克隆命令,执行定时任务备份数据到天翼云盘上。

ps:使用的是ubuntu版本的

1.alist挂载天翼云盘

1 网页端天翼云盘的cookies

F12,网络 获取cookies
image.png

2 选择要映射的自定义目录id

可以选填-11,或者填写自己创建的文件夹对应的id:425391173447345769,如上图所示
image.png

3 alist配置

  1. 选择:存储-添加
  2. 设置自定义映射目录,比如/cloud
  3. 缓存过期时间,默认30或者选择0
  4. webdav策略选择本地代理
  5. 提前文件夹,提前到最前
  6. 启用签名打开
  7. 输入天翼云的账号密码
  8. 映射的自定义目录id,比如我自定义上图的,或者填-11
  9. 配置映射的alist账号密码:用户-添加
    image.png
    image.png
    image.png

2.Rclone挂载网盘

rclone是一个管理云存储上文件的命令行程序,也是云供应商web存储接口的一个功能丰富的替代方案。超过70种云存储产品支持rclone,包括百度智能云对象存储(BOS)、企业和消费者文件存储服务以及标准传输协议。rclone在Linux、Windows和Mac上广泛使用,第三方开发人员可以使用rclone命令行或API创建备份、恢复、和业务流程解决方案。
rclone官网地址
rclone alist配置

1 linux 安装Rclone

1
sudo -v ; curl https://rclone.org/install.sh | sudo bash

2 配置

1
rclone config
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
70
71
72
73
74
75
76
77
78
79
# 进入rclone设置
rclone config
# 选择新远程
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n #这里选择n
# 设置名字
name> cloud
Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / WebDAV
\ "webdav"
[snip]
Storage> webdav #这里输入webdav,也可以选择有个webdav的字段XX(55)
# 设置远程地址url http://your_alist_ip:port/dav
URL of http host to connect to
Choose a number from below, or type in your own value
1 / Connect to example.com
\ "https://example.com"
url> http://127.0.0.1:8081/dav #这里设置alist的地址和端口,后面要带dav,http://ip:端口/dav/,记得替换为ip和端口,我的是本地的IP+端口
# 这里选6 选择带有other的字段
Name of the WebDAV site/service/software you are using
Choose a number from below, or type in your own value
1 / Fastmail Files
\ (fastmail)
2 / Nextcloud
\ (nextcloud)
3 / Owncloud
\ (owncloud)
4 / Sharepoint Online, authenticated by Microsoft account
\ (sharepoint)
5 / Sharepoint with NTLM authentication, usually self-hosted or on-premises
\ (sharepoint-ntlm)
6 / Other site/service or software
\ (other)
vendor> 6
# 设置远程账号
User name
user> admin #alist的账号
# 设置远程密码
Password.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank
y/g/n> y #这里输入y
Enter the password: #alist密码,密码是看不到的
password:
Confirm the password: #再次输入密码
password:
# 这里直接回车即可
Bearer token instead of user/pass (e.g. a Macaroon)
bearer_token>

# 这里可能会问你是默认还是高级
Edit advanced config?
y) Yes
n) No (default)
y/n> n #选择n

#后面的回车即可
# 你的远程信息
--------------------
[remote]
type = webdav
url = http://#.#.#.#:5244/dav/
vendor = Other
user = admin
pass = *** ENCRYPTED ***
--------------------
# 确认
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y #输入y即可,
# 最后按q退出设置

3 查询十分安装fuse和fuse3(无需安装版)

1
2
3
which fusermount3
#看到下面为y无需安装fuse
grep FUSE /boot/config-$(uname -r)
1
2
CONFIG_FUSE_FS=y
CONFIG_FUSE_DAX=y

注意设置user_allow_other没有被注释掉

1
vim /etc/fuse.conf

4 安装fuse3(需安装版)

fuse3 是 Filesystem in Userspace(用户空间文件系统)的第三个主要版本,它提供了一种机制,允许非特权用户创建自己的文件系统而无需修改内核代码。与之前的版本相比,fuse3 提供了改进的性能、更好的并发处理能力以及更现代化的API支持。如果您打算使用Rclone挂载云存储(如天翼云盘),并且您的Linux发行版支持fuse3,那么安装和配置fuse3可能是有益的。

安装 fuse3
在大多数现代Linux发行版中,您可以直接通过包管理器安装fuse3及其相关依赖项。以下是针对不同发行版的安装指南:

Debian/Ubuntu
对于基于Debian或Ubuntu的系统,可以通过以下命令安装fuse3:

1
2
3
sudo apt-get update
sudo apt-get install fuse
sudo apt-get install fuse3 libfuse3-3

此外,还需要确保加载了fuse模块:

1
sudo modprobe fuse

为了使该模块在重启后仍然有效,可以将其添加到/etc/modules-load.d/中的一个新文件里,例如:

1
echo fuse | sudo tee /etc/modules-load.d/fuse.conf

5 挂载命令

1
mkdir /mnt/cloud
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rclone mount cloud:/ /mnt/cloud
--umask 000 \
--allow-non-empty \
--allow-other \
--buffer-size 32M \
--low-level-retries 200 \
--dir-cache-time 2h \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G \
--vfs-cache-mode full \
--transfers=8 \
--tpslimit=5 \
--checkers=20 \
--log-file=/var/log/rclone.log \
--log-level=DEBUG &

参数解释

  • **--umask 000**:赋予所有用户对挂载点上的文件和目录完全的读、写和执行权限。请注意,这种配置可能存在安全风险。
  • **--allow-non-empty**:允许挂载到非空目录上。
  • **--allow-other**:允许其他用户访问挂载点。
  • **--buffer-size 32M**:设置单个文件传输的最大缓冲区大小为32MB。
  • **--low-level-retries 200**:设置低级别重试次数为200次,以处理网络波动。
  • **--dir-cache-time 2h**:设置目录缓存时间为2小时,减少频繁查询远程服务器的需求。
  • **--vfs-read-chunk-size 64M**:设置读取文件时的块大小为64MB。
  • **--vfs-read-chunk-size-limit 1G**:设置读取文件时的最大块大小限制为1GB。
  • **--vfs-cache-mode full**:启用完整缓存模式,将所有文件缓存到本地磁盘。
  • **--transfers=8**:设置并发传输的数量为8。
  • **--tpslimit=5**:每秒传输请求数量限制为5。
  • **--checkers=20**:设置用于检查文件是否存在或是否需要更新的并发数量为20。
  • **--log-file=/var/log/rclone.log**:指定日志文件的位置。
  • **--log-level=DEBUG**:启用详细日志记录,便于调试和问题排查。

6 卸载挂载

1
fusermount -qzu 挂载的本地目录

7 开机自动挂载

创建serveice文件

1
touch /etc/systemd/system/rclone-mount.service

文件内容

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
[Unit]
Description=Rclone mount for cloud storage
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
ExecStart=/usr/bin/rclone mount \
cloud:/ /mnt/cloud \
--umask 000 \
--allow-non-empty \
--allow-other \
--buffer-size 32M \
--low-level-retries 200 \
--dir-cache-time 2h \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G \
--vfs-cache-mode full \
--transfers=8 \
--tpslimit=5 \
--checkers=20 \
--log-file=/var/log/rclone.log \
--log-level=DEBUG
Restart=on-failure
RestartSec=10
KillMode=mixed
UMask=000

[Install]
WantedBy=default.target

重启命令

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable rclone-mount.service
sudo systemctl start rclone-mount.service

3.定时备份重要数据到天翼云盘

1 创建文件夹及文件

1
mkdir /mnt/cloud/backup
1
touch /usr/local/bin/mybackup.sh

2 备份目标(备份命令)+删除超时备份数据(存在延迟)

1.图床 数据 /var/minio
2.waline评论数据 /var/alist/data/commonSave/bright/waline/data

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
#!/bin/bash

# 定义要备份的源目录列表
SOURCES=(
"/var/alist/data/commonSave/bright/waline/data"
"/var/minio"
)

# 定义目标备份根目录
BACKUP_ROOT="/mnt/cloud/backup"

# 获取当前日期(格式:YYYY-MM-DD)
CURRENT_DATE=$(date +"%Y-%m-%d")

# 创建基于当前日期的目标目录
DESTINATION="$BACKUP_ROOT/$CURRENT_DATE"

# 定义 rclone 配置文件路径(如果需要)
RCLONE_CONFIG="/root/.config/rclone/rclone.conf"

# 日志文件路径
LOG_FILE="/var/log/backup.log"

# 开始备份
echo "Starting backup at $(date)" >> "$LOG_FILE"

# 确保目标日期目录存在
/usr/bin/rclone mkdir --config="$RCLONE_CONFIG" "$DESTINATION" >> "$LOG_FILE" 2>&1

# 备份每个源目录到日期目录下,保留源目录结构
for SOURCE in "${SOURCES[@]}"; do
# 获取源目录相对于根目录的相对路径并去除开头斜杠
SOURCE_RELATIVE_PATH=${SOURCE#/}
DESTINATION_PATH="$DESTINATION/$SOURCE_RELATIVE_PATH"

echo "Backing up $SOURCE to $DESTINATION_PATH" >> "$LOG_FILE"

# 确保目标子目录存在
/usr/bin/rclone mkdir --config="$RCLONE_CONFIG" --parents "$DESTINATION_PATH" >> "$LOG_FILE" 2>&1

/usr/bin/rclone sync \
--config="$RCLONE_CONFIG" \
"$SOURCE" "$DESTINATION_PATH" \
--transfers=8 \
--checkers=20 \
--exclude '.minio.sys/**' \
--log-file="$LOG_FILE" \
--log-level=INFO
done

echo "Backup completed at $(date)" >> $LOG_FILE


# 找到所有超过180天的备份目录并删除它们
find "$BACKUP_ROOT" -mindepth 1 -maxdepth 1 -type d -mtime +180 | while read -r dir; do
echo "Deleting old backup: $dir" >> $LOG_FILE
/usr/bin/rclone delete --config=$RCLONE_CONFIG "$dir" >> $LOG_FILE 2>&1
done

echo "Cleanup completed at $(date)" >> $LOG_FILE
1
sudo chmod +x /usr/local/bin/mybackup.sh

3 编辑 root 用户的 crontab 文件

使用 crontab -e 命令编辑 root 用户的 crontab 文件:

1
sudo crontab -e

4 添加定时任务

添加一行来定义备份任务的时间间隔。例如,每月一号凌晨 2 点:

1
0 2 1 * * /usr/local/bin/mybackup.sh

5 手动执行一遍

1
/usr/local/bin/mybackup.sh

6 查看执行日志

1
tail -2000f /var/log/backup.sh