本文目录导读:

我来为您提供一个系统状态自动备份脚本的完整方案,包含多种备份场景。
基础系统状态备份脚本
#!/bin/bash
# 系统状态自动备份脚本包括:系统配置、服务状态、重要文件等
# 配置参数
BACKUP_DIR="/var/backups/system-state"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="system-state-$DATE"
LOG_FILE="/var/log/system-backup.log"
RETENTION_DAYS=30
# 创建备份目录
mkdir -p "$BACKUP_DIR/$BACKUP_NAME"
# 日志函数
log_message() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
echo "$msg" | tee -a "$LOG_FILE"
}
# 备份系统配置文件
backup_system_configs() {
log_message "开始备份系统配置文件..."
# 备份网络配置
cp -r /etc/network "$BACKUP_DIR/$BACKUP_NAME/networking/" 2>/dev/null || true
# 备份SSH配置
cp -r /etc/ssh "$BACKUP_DIR/$BACKUP_NAME/ssh/" 2>/dev/null || true
# 备份主机名和hosts文件
cp /etc/hostname "$BACKUP_DIR/$BACKUP_NAME/" 2>/dev/null || true
cp /etc/hosts "$BACKUP_DIR/$BACKUP_NAME/" 2>/dev/null || true
# 备份crontab
crontab -l > "$BACKUP_DIR/$BACKUP_NAME/crontab.txt" 2>/dev/null || true
# 备份系统服务状态
systemctl list-units --type=service --all > "$BACKUP_DIR/$BACKUP_NAME/services.txt" 2>/dev/null || true
log_message "系统配置文件备份完成"
}
# 备份系统信息
backup_system_info() {
log_message "备份系统信息..."
# 系统基本信息
uname -a > "$BACKUP_DIR/$BACKUP_NAME/system_info.txt"
cat /etc/os-release >> "$BACKUP_DIR/$BACKUP_NAME/system_info.txt" 2>/dev/null || true
# 磁盘使用情况
df -h > "$BACKUP_DIR/$BACKUP_NAME/disk_usage.txt"
# 内存使用情况
free -h > "$BACKUP_DIR/$BACKUP_NAME/memory_usage.txt"
# 运行进程
ps aux --sort=-%mem | head -50 > "$BACKUP_DIR/$BACKUP_NAME/top_processes.txt"
# 网络连接
ss -tuln > "$BACKUP_DIR/$BACKUP_NAME/network_connections.txt"
# 已安装软件包
if command -v dpkg &> /dev/null; then
dpkg -l > "$BACKUP_DIR/$BACKUP_NAME/installed_packages.txt"
elif command -v rpm &> /dev/null; then
rpm -qa --qf="%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" > "$BACKUP_DIR/$BACKUP_NAME/installed_packages.txt"
fi
log_message "系统信息备份完成"
}
# 备份用户和权限
backup_users_permissions() {
log_message "备份用户和权限信息..."
# 用户列表
cat /etc/passwd > "$BACKUP_DIR/$BACKUP_NAME/users.txt"
# 用户组
cat /etc/group > "$BACKUP_DIR/$BACKUP_NAME/groups.txt"
# sudoers配置
cp /etc/sudoers "$BACKUP_DIR/$BACKUP_NAME/sudoers" 2>/dev/null || true
cp -r /etc/sudoers.d "$BACKUP_DIR/$BACKUP_NAME/sudoers.d/" 2>/dev/null || true
# 重要文件的权限
ls -la /etc/shadow /etc/gshadow /etc/passwd /etc/group > "$BACKUP_DIR/$BACKUP_NAME/important_permissions.txt"
log_message "用户和权限备份完成"
}
# 创建压缩包
create_archive() {
log_message "创建压缩备份包..."
cd "$BACKUP_DIR"
tar -czf "$BACKUP_NAME.tar.gz" "$BACKUP_NAME/"
# 删除临时目录
rm -rf "$BACKUP_NAME"
# 计算校验和
md5sum "$BACKUP_NAME.tar.gz" > "$BACKUP_NAME.tar.gz.md5"
log_message "备份包创建完成: $BACKUP_DIR/$BACKUP_NAME.tar.gz"
}
# 清理旧备份
cleanup_old_backups() {
log_message "清理旧备份..."
find "$BACKUP_DIR" -name "system-state-*.tar.gz" -mtime +$RETENTION_DAYS -exec rm {} \;
find "$BACKUP_DIR" -name "system-state-*.tar.gz.md5" -mtime +$RETENTION_DAYS -exec rm {} \;
log_message "旧备份清理完成"
}
# 发送通知(可选)
send_notification() {
local status="$1"
local message="系统备份状态: $status\n备份文件: $BACKUP_DIR/$BACKUP_NAME.tar.gz"
# 可以添加邮件通知等
# echo -e "$message" | mail -s "系统备份通知" admin@example.com
log_message "通知发送"
}
# 主函数
main() {
log_message "=== 开始系统状态备份 ==="
# 检查磁盘空间
local available_space=$(df "$BACKUP_DIR" | awk 'NR==2 {print $4}')
if [ "$available_space" -lt 1048576 ]; then # 1GB in KB
log_message "错误: 磁盘空间不足"
send_notification "失败"
exit 1
fi
# 执行备份
backup_system_configs
backup_system_info
backup_users_permissions
create_archive
cleanup_old_backups
log_message "=== 系统状态备份完成 ==="
send_notification "成功"
}
# 执行主函数
main
带增量备份的高级版本
#!/bin/bash
# 高级系统状态备份脚本
# 支持增量备份和加密
# 配置
BACKUP_DIR="/var/backups/system-state"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="sysbackup-$DATE"
SNAPSHOT_DIR="$BACKUP_DIR/snapshots"
ENCRYPTION_KEY="your-encryption-key-here" # 使用环境变量替代
LOG_FILE="/var/log/system-backup.log"
RETENTION_DAYS=7
MAX_BACKUPS=10
# 备份清单
declare -A BACKUP_ITEMS
BACKUP_ITEMS=(
["/etc"]="配置文件"
["/var/log"]="日志文件"
["/home"]="用户数据"
["/var/www"]="Web服务器"
["/var/lib/mysql"]="MySQL数据"
)
# 函数:检查并创建目录
ensure_directory() {
local dir="$1"
if [ ! -d "$dir" ]; then
mkdir -p "$dir"
log "创建目录: $dir"
fi
}
# 函数:日志记录
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
echo "$msg" | tee -a "$LOG_FILE"
}
# 函数:检查系统资源
check_resources() {
# 检查磁盘空间
local space=$(df "$BACKUP_DIR" | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$space" -gt 90 ]; then
log "警告: 磁盘使用率超过90%"
return 1
fi
# 检查CPU负载
local load=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)
if (( $(echo "$load > 5" | bc -l) )); then
log "警告: 系统负载过高: $load"
return 1
fi
return 0
}
# 函数:执行增量备份
perform_incremental_backup() {
local source="$1"
local basename=$(basename "$source")
local dest="$BACKUP_DIR/$BACKUP_NAME/$basename"
local snapshot="$SNAPSHOT_DIR/$basename.snar"
ensure_directory "$(dirname "$dest")"
# 检查是否存在快照文件
if [ -f "$snapshot" ]; then
log "执行增量备份: $source"
tar --listed-incremental="$snapshot" \
-czf "$dest.tar.gz" \
"$source" 2>/dev/null || return 1
else
log "执行完整备份: $source"
ensure_directory "$(dirname "$snapshot")"
tar --listed-incremental="$snapshot" \
-czf "$dest.tar.gz" \
"$source" 2>/dev/null || return 1
fi
}
# 函数:加密备份
encrypt_backup() {
local file="$1"
if [ -n "$ENCRYPTION_KEY" ] && command -v openssl &> /dev/null; then
log "加密备份: $file"
openssl enc -aes-256-cbc -salt \
-in "$file" \
-out "$file.enc" \
-pass pass:"$ENCRYPTION_KEY" 2>/dev/null
rm "$file"
log "加密完成: $file.enc"
fi
}
# 函数:备份数据库(如果存在)
backup_databases() {
# MySQL
if command -v mysqldump &> /dev/null; then
log "备份MySQL数据库..."
ensure_directory "$BACKUP_DIR/$BACKUP_NAME/databases/mysql"
mysql -e "SHOW DATABASES;" | grep -v Database | while read db; do
mysqldump --single-transaction "$db" > \
"$BACKUP_DIR/$BACKUP_NAME/databases/mysql/$db.sql" 2>/dev/null
done
fi
# PostgreSQL
if command -v pg_dumpall &> /dev/null; then
log "备份PostgreSQL数据库..."
ensure_directory "$BACKUP_DIR/$BACKUP_NAME/databases/postgres"
pg_dumpall > "$BACKUP_DIR/$BACKUP_NAME/databases/postgres/all.sql" 2>/dev/null
fi
}
# 函数:创建备份报告
create_backup_report() {
local report_file="$BACKUP_DIR/$BACKUP_NAME/backup_report.txt"
cat > "$report_file" << EOF
系统备份报告
==============
备份时间: $(date)
主机名: $(hostname)
备份类型: $([ -d "$SNAPSHOT_DIR" ] && echo "增量" || echo "完整")
系统信息:
- 操作系统: $(cat /etc/os-release 2>/dev/null | grep PRETTY_NAME | cut -d'"' -f2)
- 内核版本: $(uname -r)
- 运行时间: $(uptime -p)
$(for item in "${!BACKUP_ITEMS[@]}"; do
echo "- $item (${BACKUP_ITEMS[$item]})"
done)
备份大小:
$(du -sh "$BACKUP_DIR/$BACKUP_NAME" 2>/dev/null | awk '{print $1 " 总大小"}')
EOF
}
# 主函数
main() {
local start_time=$(date +%s)
log "================================="
log "开始系统备份"
log "================================="
# 检查资源
if ! check_resources; then
log "资源检查失败,停止备份"
exit 1
fi
# 创建备份目录
ensure_directory "$BACKUP_DIR/$BACKUP_NAME"
# 执行备份
for item in "${!BACKUP_ITEMS[@]}"; do
if [ -d "$item" ]; then
log "备份 ${BACKUP_ITEMS[$item]}: $item"
if ! perform_incremental_backup "$item"; then
log "警告: 备份失败 $item"
fi
fi
done
# 备份数据库
backup_databases
# 创建报告
create_backup_report
# 创建归档
log "创建完整归档..."
tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" \
-C "$BACKUP_DIR" "$BACKUP_NAME"
# 加密
encrypt_backup "$BACKUP_DIR/$BACKUP_NAME.tar.gz"
# 清理临时文件
rm -rf "$BACKUP_DIR/$BACKUP_NAME"
# 清理旧备份
log "清理旧备份..."
find "$BACKUP_DIR" -name "sysbackup-*.tar.gz" -mtime +$RETENTION_DAYS | sort | head -n -$MAX_BACKUPS | xargs rm -f
local end_time=$(date +%s)
local duration=$((end_time - start_time))
log "备份完成,耗时: $duration 秒"
log "备份位置: $BACKUP_DIR"
log "================================="
}
# 错误处理
trap 'log "备份脚本被中断"; exit 1' SIGINT SIGTERM
# 执行
main $@
定时执行配置 (crontab)
# 编辑crontab配置 sudo crontab -e # 添加以下配置 # 每天凌晨2点执行完整备份 0 2 * * * /usr/local/bin/system-backup.sh # 每6小时执行一次增量备份 0 */6 * * * /usr/local/bin/system-backup-incremental.sh # 每周一凌晨3点清理日志和旧备份 0 3 * * 1 /usr/local/bin/cleanup-backups.sh
使用Systemd定时器
# /etc/systemd/system/system-backup.service [Unit] Description=System State Backup Service After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/system-backup.sh User=root Environment=ENCRYPTION_KEY=your_key_here [Install] WantedBy=multi-user.target
# /etc/systemd/system/system-backup.timer [Unit] Description=System Backup Timer Requires=system-backup.service [Timer] OnCalendar=daily Persistent=true RandomizedDelaySec=1800 [Install] WantedBy=timers.target
使用说明
# 1. 保存脚本 sudo cp system-backup.sh /usr/local/bin/ sudo chmod +x /usr/local/bin/system-backup.sh # 2. 创建备份目录 sudo mkdir -p /var/backups/system-state sudo chmod 750 /var/backups/system-state # 3. 测试运行 sudo /usr/local/bin/system-backup.sh # 4. 查看备份状态 ls -l /var/backups/system-state/ # 5. 配置定时任务(根据需要选择) # 方法1: 使用crontab sudo crontab -e # 方法2: 使用systemd sudo systemctl enable system-backup.timer sudo systemctl start system-backup.timer
这个脚本提供了:
- 完整的系统状态备份
- 增量备份支持
- 备份加密
- 自动清理
- 日志记录
- 错误处理
- 多种调度方式
请根据实际需求调整配置参数。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播