本文目录导读:

我来帮你编写一个系统备份脚本,这里提供两个版本:一个简单的通用备份脚本和一个更完整的系统备份方案。
简单通用备份脚本
#!/bin/bash
# 系统快速备份脚本
# 使用方法: sudo ./backup.sh
# 配置
BACKUP_DIR="/backup"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
HOSTNAME=$(hostname)
BACKUP_NAME="system_backup_${HOSTNAME}_${TIMESTAMP}"
LOG_FILE="${BACKUP_DIR}/backup_${TIMESTAMP}.log"
# 检查是否以root运行
if [ "$EUID" -ne 0 ]; then
echo "请使用sudo运行此脚本"
exit 1
fi
# 创建备份目录
mkdir -p "${BACKUP_DIR}/${BACKUP_NAME}"
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "开始系统备份..."
# 1. 备份重要配置文件
log "备份系统配置文件..."
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}/etc_backup.tar.gz" \
/etc/hosts \
/etc/hostname \
/etc/fstab \
/etc/crontab \
/etc/ssh/sshd_config \
/etc/network/interfaces 2>/dev/null || true
# 2. 备份用户家目录(排除缓存和临时文件)
log "备份用户目录..."
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}/home_backup.tar.gz" \
--exclude="*/cache/*" \
--exclude="*/tmp/*" \
--exclude="*/Downloads/*" \
/home/ 2>/dev/null || true
# 3. 备份软件包列表
log "备份软件包列表..."
if command -v dpkg &> /dev/null; then
dpkg --get-selections > "${BACKUP_DIR}/${BACKUP_NAME}/packages_list.txt"
elif command -v rpm &> /dev/null; then
rpm -qa > "${BACKUP_DIR}/${BACKUP_NAME}/packages_list.txt"
fi
# 4. 备份系统服务状态
log "备份服务状态..."
systemctl list-units --type=service --all > "${BACKUP_DIR}/${BACKUP_NAME}/services_list.txt"
# 5. 备份网络配置
log "备份网络配置..."
ip a > "${BACKUP_DIR}/${BACKUP_NAME}/network_config.txt"
ip route > "${BACKUP_DIR}/${BACKUP_NAME}/routing_table.txt"
# 6. 创建备份信息文件
echo "备份信息" > "${BACKUP_DIR}/${BACKUP_NAME}/backup_info.txt"
echo "主机名: $HOSTNAME" >> "${BACKUP_DIR}/${BACKUP_NAME}/backup_info.txt"
echo "备份时间: $(date)" >> "${BACKUP_DIR}/${BACKUP_NAME}/backup_info.txt"
echo "系统版本: $(cat /etc/os-release 2>/dev/null | head -n 2)" >> "${BACKUP_DIR}/${BACKUP_NAME}/backup_info.txt"
echo "内核版本: $(uname -r)" >> "${BACKUP_DIR}/${BACKUP_NAME}/backup_info.txt"
# 7. 打包整个备份
log "创建最终备份包..."
cd "${BACKUP_DIR}"
tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"
rm -rf "${BACKUP_NAME}"
log "备份完成!备份文件: ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
log "备份大小: $(du -h "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" | cut -f1)"
进阶系统备份脚本(完整系统)
#!/bin/bash
# 完整系统备份脚本
# 支持增量备份和加密
# 配置
BACKUP_ROOT="/backup"
BACKUP_TYPE="${1:-full}" # full 或 incremental
ENCRYPT="${2:-no}" # yes 或 no
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
HOSTNAME=$(hostname)
LOGFILE="/var/log/backup.log"
SNAPSHOT_FILE="${BACKUP_ROOT}/last_snapshot.txt"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 初始化
init_backup() {
mkdir -p "${BACKUP_ROOT}"
echo "开始备份: $(date)" >> "$LOGFILE"
}
# 清理函数
cleanup() {
echo "清理临时文件..."
find "${BACKUP_ROOT}" -name "*.tmp" -delete
find "${BACKUP_ROOT}" -mtime +30 -delete # 删除30天前的备份
}
# 完整备份
full_backup() {
local BACKUP_NAME="${HOSTNAME}_full_${TIMESTAMP}"
local BACKUP_PATH="${BACKUP_ROOT}/${BACKUP_NAME}"
echo -e "${YELLOW}执行完整系统备份...${NC}"
mkdir -p "${BACKUP_PATH}"
# 排除列表
local EXCLUDE="--exclude=/proc \
--exclude=/sys \
--exclude=/dev \
--exclude=/run \
--exclude=/mnt \
--exclude=/media \
--exclude=/lost+found \
--exclude=/tmp \
--exclude=/var/cache \
--exclude=/var/tmp \
--exclude=${BACKUP_ROOT}"
# 使用tar创建完整备份
tar $EXCLUDE \
-czf "${BACKUP_PATH}/system.tar.gz" \
--ignore-failed-read \
/
echo "${TIMESTAMP}" > "$SNAPSHOT_FILE"
# 记录备份信息
echo "备份类型: 完整" >> "${BACKUP_PATH}/info.txt"
echo "备份时间: $(date)" >> "${BACKUP_PATH}/info.txt"
echo "系统信息: $(uname -a)" >> "${BACKUP_PATH}/info.txt"
du -sh "${BACKUP_PATH}/system.tar.gz" >> "${BACKUP_PATH}/info.txt"
echo -e "${GREEN}完整备份完成${NC}"
echo "备份位置: ${BACKUP_PATH}"
}
# 增量备份
incremental_backup() {
local BACKUP_NAME="${HOSTNAME}_incr_${TIMESTAMP}"
local BACKUP_PATH="${BACKUP_ROOT}/${BACKUP_NAME}"
if [ ! -f "$SNAPSHOT_FILE" ]; then
echo -e "${RED}没有找到上次备份记录,执行完整备份...${NC}"
full_backup
return
fi
echo -e "${YELLOW}执行增量备份...${NC}"
mkdir -p "${BACKUP_PATH}"
local LAST_BACKUP=$(cat "$SNAPSHOT_FILE")
# 只备份修改过的文件
find / -newer "${SNAPSHOT_FILE}" \
-not -path "/proc/*" \
-not -path "/sys/*" \
-not -path "/dev/*" \
-not -path "/run/*" \
-not -path "/tmp/*" \
-not -path "${BACKUP_ROOT}/*" \
-type f > "${BACKUP_PATH}/changed_files.txt"
if [ -s "${BACKUP_PATH}/changed_files.txt" ]; then
tar -czf "${BACKUP_PATH}/changes.tar.gz" \
-T "${BACKUP_PATH}/changed_files.txt" \
--ignore-failed-read
echo "${TIMESTAMP}" > "$SNAPSHOT_FILE"
echo -e "${GREEN}增量备份完成${NC}"
else
echo -e "${YELLOW}没有文件变更${NC}"
rm -rf "${BACKUP_PATH}"
fi
}
# 加密备份
encrypt_backup() {
local BACKUP_FILE="$1"
if [ ! -f "$BACKUP_FILE" ]; then
echo -e "${RED}备份文件不存在${NC}"
return 1
fi
echo -e "${YELLOW}加密备份文件...${NC}"
# 使用gpg加密
gpg --symmetric --cipher-algo AES256 \
--output "${BACKUP_FILE}.gpg" \
"$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo -e "${GREEN}加密成功${NC}"
rm "$BACKUP_FILE" # 删除未加密文件
echo 0
else
echo -e "${RED}加密失败${NC}"
return 1
fi
}
# 备份验证
verify_backup() {
local BACKUP_FILE="$1"
echo -e "${YELLOW}验证备份文件完整性...${NC}"
if tar -tzf "$BACKUP_FILE" &>/dev/null; then
echo -e "${GREEN}备份完整验证通过${NC}"
return 0
else
echo -e "${RED}备份文件可能损坏${NC}"
return 1
fi
}
# 创建定时备份任务
create_cron_job() {
echo -e "${YELLOW}是否创建定时备份任务?(y/n)${NC}"
read -r answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
local CRON_CMD="0 2 * * * /root/backup.sh incremental"
(crontab -l 2>/dev/null; echo "$CRON_CMD") | crontab -
echo -e "${GREEN}已创建定时备份任务 (每天凌晨2点执行增量备份)${NC}"
fi
}
# 主函数
main() {
init_backup
case "$BACKUP_TYPE" in
"full")
full_backup
;;
"incremental")
incremental_backup
;;
"restore")
echo -e "${YELLOW}恢复功能需要单独编写${NC}"
;;
*)
echo "使用方法: $0 {full|incremental} [encrypt]"
echo "示例:"
echo " $0 full # 完整备份"
echo " $0 incremental # 增量备份"
echo " $0 full yes # 完整备份并加密"
exit 1
;;
esac
# 处理加密
if [ "$ENCRYPT" = "yes" ]; then
encrypt_backup "${BACKUP_ROOT}/${HOSTNAME}_${BACKUP_TYPE}_${TIMESTAMP}/system.tar.gz"
fi
# 验证最后创建的备份
local LAST_BACKUP=$(ls -t "${BACKUP_ROOT}" | head -1)
verify_backup "${BACKUP_ROOT}/${LAST_BACKUP}/system.tar.gz" 2>/dev/null || true
cleanup
echo "备份日志: $LOGFILE"
}
# 执行主程序
main "$@"
使用说明
基本使用
# 保存脚本 sudo nano /usr/local/bin/backup.sh # 添加执行权限 sudo chmod +x /usr/local/bin/backup.sh # 运行完整备份 sudo ./backup.sh # 运行进阶版本 sudo ./backup.sh full # 完整备份 sudo ./backup.sh incremental # 增量备份 sudo ./backup.sh full yes # 完整加密备份
恢复系统
# 恢复配置文件 sudo tar -xzf backup.tar.gz -C / # 恢复特定目录 sudo tar -xzf etc_backup.tar.gz -C /etc
自动化备份
# 添加到cron 0 3 * * * /usr/local/bin/backup.sh full 0 */6 * * * /usr/local/bin/backup.sh incremental
注意事项
- 测试备份: 定期测试备份文件的完整性
- 存储位置: 建议将备份保存到外部存储或网络位置
- 加密敏感数据: 包含密码或密钥的配置文件建议加密
- 监控备份大小: 定期检查备份文件大小,避免磁盘满载
- 保留策略: 设置合理的备份保留期限
这个脚本可以根据你的具体需求进行修改和扩展!
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播