难绷之灵车服务器的系统盘炸了,损失极其惨重,这几天重新装了个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
|