方案 A(最推荐,镜像同步,直接原样复制到第二块硬盘,无压缩包)
用【计划任务 → Shell 脚本】+ rsync,绕开备份账号功能
计划任务 → 创建任务 → 任务类型:
Shell脚本执行周期自定义(例如每天凌晨 2 点)
脚本内容(你只需要改里面 2 条源文件夹路径、第二块硬盘备份目录)
#!/bin/bash
#需要备份的2个源文件夹
SOURCE_1="/文件夹路径"
SOURCE_2="/文件夹路径"
#👉这里改成你第二块硬盘实际挂载的备份文件夹路径
DEST_DIR="第二块硬盘备份文件夹路径"
#自动创建备份目录
mkdir -p "$DEST_DIR/folder1"
mkdir -p "$DEST_DIR/folder2"
#增量同步备份
rsync -av "$SOURCE_1/" "$DEST_DIR/folder1/"
rsync -av "$SOURCE_2/" "$DEST_DIR/folder2/"
echo "备份完成 $(date)"
方案 B(生成 zip 压缩快照备份,新版 1Panel 本地磁盘的正确用法)
新版面板本地磁盘备份账号是内置自带、不能新建
创建计划任务 → 任务类型:
备份目录备份账号下拉直接选择:服务器磁盘(自带选项,无需新建)
这个默认服务器磁盘默认备份路径:
/opt/1panel/backup(系统盘!!)
❗缺点:备份包默认只能存系统盘,不能直接修改备份目标盘为第二块硬盘
👉补救:备份完自动移动压缩包到第二块硬盘 需要分成两条 Shell 任务:
任务 1:定时执行【备份目录】备份到系统盘默认目录
任务 2:延迟几分钟运行 shell 脚本,把生成好的 zip 备份文件移动到第二块硬盘
#!/bin/bash
mv /opt/1panel/backup/*.zip /mnt/disk2/backup/
对比选择建议
想要文件夹实时镜像、随时打开查看文件,不要解压 → 方案 A rsync 脚本(首选)
想要打包 zip 快照、保留多历史版本 → 方案 B
方案 C‑Shell 脚本(生成压缩备份,自动清理旧备份,最多保留 10 份)
第一步:先安装 zip 工具
SSH 登录服务器执行:
如果Ubuntu 系统没有安装 zip 打包工具,请先安装
apt update
apt install zip -y
1Panel → 计划任务 → 创建任务 → Shell 脚本
#!/bin/bash
#################### 配置区 ####################
# 需要备份的两个文件夹
SOURCE1="文件夹路径"
SOURCE2="文件夹路径"
# 第二块硬盘备份存放目录
BACKUP_DIR="第二块硬盘备份文件夹路径"
# 最多保留最近10份备份
KEEP_NUM=10
################################################
# 创建备份根目录
mkdir -p "$BACKUP_DIR"
# 生成带时间戳的备份文件名
TIME_STAMP=$(date +%Y%m%d_%H%M%S)
ZIP_NAME="backup_${TIME_STAMP}.zip"
ZIP_PATH="${BACKUP_DIR}/${ZIP_NAME}"
# 压缩两个目录
zip -r "$ZIP_PATH" "$SOURCE1" "$SOURCE2"
# 删除旧备份:只保留最新10个,多余全部删掉
ls -1t "${BACKUP_DIR}"/backup_*.zip | tail -n +$((KEEP_NUM + 1)) | xargs -r rm -f
echo "备份完成:${ZIP_PATH},旧文件清理完毕 $(date)"
如果不想安装 zip,下面请使用linux自带 tar 打包的替代脚本。
zip vs tar 对比(服务器备份场景)
1、核心区别
zip
跨平台:Windows、Mac、Linux 都能直接双击解压
权限会丢失:Linux 文件所有者、执行权限解压后不会保留
可以单独增删压缩包里某个文件
命令:
zip -r/unzip
tar(推荐服务器 Linux 备份首选)
tar 本身只是打包,不加压缩;一般搭配 gz 压缩 tar -z → .tar.gz
原生 Linux 工具,完整保留文件权限、属主、软链接(网站、halo 博客备份非常重要!)
压缩率略高于 zip,生成文件更小
解压后文件属性和备份前一模一样,不会出奇怪权限问题
Windows 也可以用 7‑zip 解压 tar.gz
#!/bin/bash
#################### 配置区 ####################
SOURCE1="文件夹路径"
SOURCE2="文件夹路径"
BACKUP_DIR="第二块硬盘文件夹路径"
KEEP_NUM=10
################################################
mkdir -p "$BACKUP_DIR"
TIME_STAMP=$(date +%Y%m%d_%H%M%S)
FILE_NAME="backup_${TIME_STAMP}.tar.gz"
FULL_PATH="${BACKUP_DIR}/${FILE_NAME}"
#打包压缩两个目录
tar -zcvf "$FULL_PATH" "$SOURCE1" "$SOURCE2"
#校验文件是否生成成功
if [ ! -f "$FULL_PATH" ];then
echo "备份压缩失败!"
exit 1
fi
#清理旧备份,保留最近10份
ls -1t "${BACKUP_DIR}"/backup_*.tar.gz 2>/dev/null | tail -n +$((KEEP_NUM + 1)) | xargs -r rm -f
echo "备份完成:${FULL_PATH},旧文件清理完毕 $(date)"