难绷之灵车服务器的系统盘炸了,损失极其惨重,这几天重新装了个Debian系统,想着有必要搞一个全盘备份系统的功能(数据备份真的很重要QAQ)。

目前用的是dd+alist+rclone,原理就是dd全盘备份+压缩+alist挂载各种云盘+rclone上传到alist的webdav上:

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

# 备份并压缩脚本

# 检查是否具有root权限
if [ "$EUID" -ne 0 ]; then
echo "请使用root权限运行此脚本"
exit 1
fi

# 检查是否传入了源磁盘和目标目录
if [ $# -ne 2 ]; then
echo "使用方法: $0 <源磁盘> <目标目录>"
echo "例如: $0 /dev/sda /path/to/backup_directory"
exit 1
fi

SOURCE_DISK=$1
TARGET_DIR=$2

# 确认源磁盘存在
if [ ! -b "$SOURCE_DISK" ]; then
echo "源磁盘不存在: $SOURCE_DISK"
exit 1
fi

# 确认目标目录存在
if [ ! -d "$TARGET_DIR" ]; then
echo "目标目录不存在: $TARGET_DIR"
exit 1
fi

# 生成目标文件名,使用下划线分割年月日时间
TIMESTAMP=$(date +"%Y_%m_%d_%H_%M_%S")
TARGET_FILE="$TARGET_DIR/backup_$TIMESTAMP.img.gz"

# 备份磁盘并压缩到目标文件
echo "开始备份并压缩 $SOURCE_DISK 到 $TARGET_FILE ..."
dd if=$SOURCE_DISK bs=4M status=progress | gzip > $TARGET_FILE

# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份并压缩成功: $TARGET_FILE"

# 使用rclone将备份文件移动到远程存储
echo "开始将备份文件移动到远程存储..."
rclone move $TARGET_FILE backup:/backup -P --no-check-certificate

# 检查rclone是否成功
if [ $? -eq 0 ]; then
echo "备份文件移动成功"
else
echo "备份文件移动失败"
exit 1
fi
else
echo "备份并压缩失败"
exit 1
fi

保存这个脚本到一个文件中,比如backup_and_compress_with_timestamp.sh,然后给它可执行权限:

1
2
chmod +x backup_and_compress_with_timestamp.sh
sudo ./backup_and_compress_with_timestamp.sh /dev/sda /path/to/backup_directory