CentOS 磁盘镜像备份并 SFTP 上传脚本
用 Bash 脚本定时(每周一 23 点)用 dd 制作磁盘镜像并压缩,再通过 SFTP 上传到指定服务器。
⚠️ 磁盘镜像操作有风险,运行前务必备份重要数据。
备份压缩并上传
#!/bin/bash
backup_directory="/path/to/backup"
# SFTP 目标服务器信息(按需替换)
sftp_host="<目标服务器IP>"
sftp_port="<端口>"
sftp_user="<用户>"
sftp_password="<密码>"
# 仅在周一 23:00 执行
if [ "$(date +%u)" -eq 1 ] && [ "$(date +%H:%M)" == "23:00" ]; then
current_datetime=$(date +"%Y%m%d%H%M%S")
backup_dir="${backup_directory}/backup_${current_datetime}"
mkdir -p "$backup_dir"
# dd 制作磁盘镜像
sudo dd if=/dev/sda of="${backup_dir}/sda_backup.img" bs=4M
# 压缩为 tar.gz
tar -czf "${backup_dir}/sda_backup.tar.gz" -C "$backup_dir" "sda_backup.img"
# sftp 上传
sftp -P "$sftp_port" "$sftp_user@$sftp_host" <<EOF
cd /remote/backup/directory
put "${backup_dir}/sda_backup.tar.gz"
bye
EOF
rm -rf "$backup_dir"
echo "备份并上传完成于 $(date +'%Y-%m-%d %H:%M:%S')."
fi
加入 crontab 定时执行:
crontab -e
# 每周一 23:00 执行
0 23 * * 1 /path/to/backup_script.sh
边备份边上传(dd 管道 + ssh)
# dd 输出通过管道传给 ssh,直接写入远程文件(需先配置 SSH 密钥认证)
sudo dd if=/dev/sda bs=4M | ssh -p "<端口>" "<用户>@<目标服务器IP>" "cat > /remote/backup/directory/sda_backup.img"
边备份边上传需谨慎,网络中断可能导致失败。
原文链接:https://www.ssssmy.com/notes/centos-ci-pan-jing-xiang-bei-fen-bing-sftp-shang-chuan-jiao-ben