引言:为什么Slackware备份至关重要
Slackware Linux作为现存最古老的Linux发行版,以其简洁、稳定和接近Unix传统的设计哲学而闻名。然而,正是由于其高度的定制性和”DIY”特性,系统备份与恢复成为每个Slackware用户必须掌握的核心技能。与Ubuntu或Fedora等现代发行版不同,Slackware没有图形化的系统快照工具,也不提供自动回滚机制。一旦发生硬盘故障、误操作或软件包冲突,数据丢失的风险极高。
本指南将从零基础开始,逐步深入,教你如何构建一套完整的Slackware备份与恢复体系。我们将涵盖文件级备份、系统镜像备份、增量备份策略、灾难恢复流程,以及自动化脚本编写。通过本指南,你将能够:
理解备份的基本原则和Slackware特有的挑战
掌握多种备份工具的使用方法
构建适合个人需求的备份策略
在系统崩溃时快速恢复
实现备份自动化,确保持续的数据保护
第一部分:备份基础概念与Slackware特性
1.1 备份的核心原则
在开始技术细节之前,我们需要理解三个核心原则:
3-2-1备份法则
:
3份数据副本(原始数据 + 2个备份)
2种不同的存储介质(例如:硬盘 + 云存储)
1个异地备份(防止火灾、盗窃等物理灾害)
备份类型
:
完整备份
:复制所有选定文件,耗时较长但恢复简单
增量备份
:只备份自上次备份后变化的文件,节省空间和时间
差异备份
:备份自上次完整备份后变化的所有文件
Slackware的特殊性
:
没有包管理器依赖追踪(pkgtools是独立的)
系统配置文件分散在/etc的各个子目录
用户数据通常集中在/home,但自定义安装的软件可能在/usr/local
没有系统快照功能(如Btrfs快照或Timeshift)
1.2 识别关键数据位置
在备份前,必须明确哪些数据需要保护:
# 系统关键目录
/etc # 系统配置
/home # 用户数据
/usr/local # 自定义安装的软件
/var # 数据库、邮件、日志等
/boot # 引导加载程序和内核
# 特定应用数据
/var/lib/mysql/ # MySQL数据库
/var/lib/postgresql/ # PostgreSQL数据库
~/.ssh/ # SSH密钥
~/.config/ # 应用配置
重要提示
:Slackware的系统文件本身(/usr/bin, /lib等)可以通过重新安装恢复,但配置文件和用户数据是不可替代的。因此,备份重点应放在
配置文件
和
用户数据
上。
第二部分:基础备份工具与实战
2.1 使用tar进行完整系统备份
tar是Slackware自带的最基础的备份工具,适合初学者。
2.1.1 备份/home目录
# 创建压缩备份
tar -czvf home_backup_$(date +%Y%m%d).tar.gz /home
# 查看备份内容
tar -tzvf home_backup_20231015.tar.gz
# 解压到指定目录(恢复时)
tar -xzvf home_backup_20231015.tar.gz -C /mnt/restore
2.1.2 排除不需要备份的目录
# 排除缓存和临时文件
tar –exclude=’/home/*/.cache’ \
–exclude=’/home/*/Downloads’ \
–exclude=’/home/*/.local/share/Trash’ \
-czvf home_backup_$(date +%Y%m%d).tar.gz /home
2.1.3 增量备份实现
tar支持增量备份,通过–listed-incremental选项:
# 第一次完整备份
tar –listed-incremental=snapshot.file -cvzf full_backup_01.tar.gz /home
# 后续增量备份
tar –listed-incremental=snapshot.file -cvzf inc_backup_02.tar.gz /home
注意
:snapshot.file记录了文件系统状态,必须保留。
2.2 使用rsync进行同步备份
rsync是更强大的工具,支持增量传输和校验。
2.2.1 基本同步命令
# 将/home同步到备份目录(本地)
rsync -av –delete /home/ /mnt/backup/home/
# 同步到远程服务器(通过SSH)
rsync -avz –delete -e ssh /home/ user@remote:/mnt/backup/home/
参数说明:
-a
:归档模式(保留权限、时间戳等)
-v
:显示详细输出
-z
:压缩传输
–delete
:删除目标端多余文件(保持完全一致)
2.2.2 增量备份与硬链接
通过硬链接技术,可以创建”时间机器”式的备份:
#!/bin/bash
# 增量备份脚本:backup.sh
BACKUP_DIR=”/mnt/backup”
DATE=$(date +%Y%m%d)
LINK_DEST=””
# 检查是否存在前一天的备份
if [ -d “$BACKUP_DIR/home.$DATE” ]; then
echo “备份已存在,退出”
exit 1
fi
# 查找最新的备份用于硬链接
LATEST=$(ls -dt $BACKUP_DIR/home.* | head -1)
if [ -n “$LATEST” ]; then
LINK_DEST=”–link-dest=$LATEST”
fi
# 执行rsync备份
rsync -av –delete \
$LINK_DEST \
/home/ \
$BACKUP_DIR/home.$DATE/
# 创建符号链接指向最新备份
ln -sfn $BACKUP_DIR/home.$DATE $BACKUP_DIR/latest_home
工作原理
:新备份中未修改的文件会硬链接到旧备份,节省空间;修改过的文件会存储新副本。
2.3 使用dar(Disk ARchive)进行高级备份
dar是Slackware自带的强大备份工具,支持压缩、加密和分卷。
2.3.1 安装dar
# Slackware自带dar,无需额外安装
# 如果未安装,使用slackpkg或pkgtool安装
2.3.2 创建完整备份
# 创建加密备份
dar -c backup_$(date +%Y%m%d) \
-R /home \
-s 4G \ # 分卷大小4GB
-D \ # 保留目录结构
-y \ # 跳过符号链接
-e “*.tmp” \ # 排除临时文件
-K “aes:my_password” # 加密
2.3.3 恢复备份
# 列出备份内容
dar -l backup_20231015 -K “aes:my_password”
# 恢复到指定目录
dar -x backup_20231015 \
-R /mnt/restore \
-K “aes:my_password” \
-O # 覆盖现有文件
第三部分:系统级备份与镜像
3.1 使用dd创建磁盘镜像
dd可以创建整个磁盘的二进制镜像,适合全盘备份。
3.1.1 备份整个磁盘
# 备份sda1分区到文件
dd if=/dev/sda1 of=/mnt/backup/sda1_image.img bs=4M status=progress
# 备份整个磁盘(包括分区表)
dd if=/dev/sda of=/mnt/backup/sda_full_image.img bs=4M status=progress
# 压缩备份
dd if=/dev/sda1 | gzip > /mnt/backup/sda1_image.img.gz
警告
:dd操作危险,if和of参数不能颠倒,否则会覆盖数据!
3.1.2 恢复磁盘镜像
# 恢复到分区
dd if=/mnt/backup/sda1_image.img of=/dev/sda1 bs=4M status=progress
# 解压并恢复
gunzip -c /mnt/backup/sda1_image.img.gz | dd of=/dev/sda1 bs=4M
3.1.3 使用dd进行分区克隆
# 将sda1克隆到sdb1
dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress
3.2 使用Clonezilla进行专业级备份
Clonezilla是基于Linux的磁盘克隆/备份工具,支持多种文件系统。
3.2.1 准备Clonezilla启动盘
# 下载Clonezilla ISO
wget https://sourceforge.net/projects/clonezilla/files/clonezilla_live_stable/2.8.0-1/clonezilla-live-2.8.0-1-amd64.iso
# 创建启动U盘(假设U盘为/dev/sdc)
dd if=clonezilla-live-2.8.0-1-amd64.iso of=/dev/sdc bs=4M status=progress
3.2.2 使用Clonezilla备份
从U盘启动,选择”device-image”模式
选择备份到本地硬盘或网络存储
选择要备份的磁盘/分区
等待备份完成
3.2.3 使用Clonezilla恢复
启动Clonezilla
选择”restored-image”模式
选择之前创建的镜像
选择目标磁盘/分区
确认并恢复
3.3 使用Btrfs快照(如果使用Btrfs文件系统)
如果Slackware使用Btrfs文件系统,可以利用其快照功能。
3.3.1 创建子卷和快照
# 创建子卷
btrfs subvolume create /home/home_subvol
# 创建只读快照
btrfs subvolume snapshot -r /home/home_subvol /home/home_snapshot_20231015
# 查看快照
btrfs subvolume list /home
3.3.2 恢复快照
# 将快照复制回原位置
btrfs subvolume snapshot /home/home_snapshot_20231015 /home/home_subvol
# 或者挂载快照访问文件
mount -o subvol=home_snapshot_20231015 /dev/sda1 /mnt/snapshot
第四部分:数据库与应用数据备份
4.1 MySQL/MariaDB备份
4.1.1 使用mysqldump
# 备份单个数据库
mysqldump -u root -p –single-transaction –routines –triggers mydatabase > mydatabase_$(date +%Y%m%d).sql
# 备份所有数据库
mysqldump -u root -p –all-databases –single-transaction > all_databases_$(date +%Y%m%d).sql
# 压缩备份
mysqldump -u root -p –all-databases –single-transaction | gzip > all_databases_$(date +%Y%m%d).sql.gz
4.1.2 恢复数据库
# 解压并恢复
gunzip < all_databases_20231015.sql.gz | mysql -u root -p
# 或者直接恢复SQL文件
mysql -u root -p < all_dellites_20231015.sql
4.1.3 自动化备份脚本
#!/bin/bash
# MySQL自动备份脚本:mysql_backup.sh
DB_USER="backup_user"
DB_PASS="backup_password"
BACKUP_DIR="/mnt/backup/mysql"
DATE=$(date +%Y%m%d)
RETENTION=7 # 保留7天
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份所有数据库
mysqldump -u $DB_USER -p$DB_PASS --all-databases --single-transaction | gzip > $BACKUP_DIR/all_databases_$DATE.sql.gz
# 删除旧备份
find $BACKUP_DIR -name “all_databases_*.sql.gz” -mtime +$RETENTION -delete
# 记录日志
echo “$(date): MySQL备份完成” >> /var/log/mysql_backup.log
4.2 PostgreSQL备份
4.2.1 使用pg_dump
# 备份单个数据库
pg_dump -U postgres -Fc mydatabase > mydatabase_$(date +%Y%m%d).dump
# 备份所有数据库
pg_dumpall -U postgres > all_databases_$(date +%Y%m%d).sql
4.2.2 恢复PostgreSQL
# 恢复单个数据库(需要先创建目标数据库)
createdb -U postgres mydatabase
pg_restore -U postgres -d mydatabase mydatabase_20231015.dump
# 恢复所有数据库
psql -U postgres -f all_databases_20231015.sql
4.3 备份应用配置
4.3.1 备份/etc目录
# 创建/etc的tar备份
tar -czvf etc_backup_$(date +%Y%m%d).tar.gz /etc
# 更精细的备份:只备份关键配置
tar -czvf etc_key_backup_$(date +%Y%m%d).tar.gz \
/etc/passwd /etc/shadow /etc/group /etc/gshadow \
/etc/fstab /etc/inittab /etc/rc.d/ \
/etc/X11/ /etc/slackpkg/ /etc/pkgtool/
4.3.2 备份SSH密钥和配置
# 备份SSH配置
tar -czvf ssh_backup_$(date +%Y%m%d).tar.gz ~/.ssh/
# 恢复SSH配置
tar -xzvf ssh_backup_20231015.tar.gz -C ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
第五部分:增量备份与版本控制
5.1 使用rsync+硬链接构建时间机器
前面已经介绍了基本脚本,这里完善为生产级方案:
#!/bin/bash
# 生产级增量备份脚本:advanced_backup.sh
# 配置
BACKUP_BASE=”/mnt/backup”
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
LOG_FILE=”/var/log/backup.log”
# 源目录列表(每行一个)
SOURCES=(
“/home”
“/etc”
“/usr/local”
“/var/www”
)
# 日志函数
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” | tee -a $LOG_FILE
}
# 检查备份磁盘空间
check_space() {
local required_gb=50
local available_gb=$(df $BACKUP_BASE | awk ‘NR==2 {print $4/1024/1024}’)
if (( $(echo “$available_gb < $required_gb" | bc -l) )); then
log "错误:备份空间不足,需要${required_gb}GB,可用${available_gb}GB"
exit 1
fi
}
# 执行备份
do_backup() {
local source=$1
local dest=$BACKUP_BASE/$(basename $source).$DATE
# 查找最新备份用于硬链接
local latest=$(ls -dt $BACKUP_BASE/$(basename $source).* 2>/dev/null | head -1)
local link_dest=””
if [ -n “$latest” ] && [ “$latest” != “$dest” ]; then
link_dest=”–link-dest=$latest”
fi
log “开始备份: $source -> $dest”
rsync -av –delete \
$link_dest \
–exclude=’*.tmp’ \
–exclude=’.cache/’ \
–exclude=’Downloads/’ \
$source/ $dest/
if [ $? -eq 0 ]; then
log “备份成功: $source”
else
log “备份失败: $source”
return 1
fi
}
# 清理旧备份
cleanup() {
log “清理30天前的旧备份…”
find $BACKUP_BASE -maxdepth 1 -type d -name “*.*” -mtime +$RETENTION_DAYS -exec rm -rf {} \;
log “清理完成”
}
# 主流程
main() {
log “========== 备份开始 ==========”
check_space
for source in “${SOURCES[@]}”; do
if [ -d “$source” ]; then
do_backup “$source”
else
log “警告: 源目录不存在: $source”
fi
done
cleanup
log “========== 备份完成 ==========”
}
main “$@”
5.2 使用BorgBackup进行去重备份
BorgBackup是现代的去重备份工具,支持加密和压缩。
5.2.1 安装BorgBackup
# Slackware没有官方包,需要从源码编译
# 或者使用pip安装
pip3 install borgbackup
5.2.2 初始化仓库
# 初始化本地仓库
borg init –encryption=repokey-blake2 /mnt/backup/borg_repo
# 设置密码
# 或者使用SSH远程仓库
borg init –encryption=repokey-blake2 user@remote:/mnt/backup/borg_repo
5.2.3 创建备份
# 创建备份存档
borg create –stats –progress \
/mnt/backup/borg_repo::home_{now} \
/home \
–exclude ‘*/.cache’ \
–exclude ‘*/Downloads’
# 查看备份列表
borg list /mnt/backup/borg_repo
# 查看备份内容
borg list /mnt/backup/borg_repo::home_20231015T120000
5.2.4 恢复备份
# 恢复整个存档
borg extract /mnt/backup/borg_repo::home_20231015T120000
# 恢复单个文件
borg extract /mnt/backup/borg_repo::home_20231015T120000 home/user/document.txt
# 挂载备份为文件系统(只读)
mkdir /mnt/borg_mount
borg mount /mnt/backup/borg_repo::home_20231015T120000 /mnt/borg_mount
5.2.5 自动化Borg备份
#!/bin/bash
# Borg自动化备份脚本:borg_backup.sh
export BORG_PASSPHRASE=”your_secure_password”
REPO=”/mnt/backup/borg_repo”
ARCHIVE=”home_$(date +%Y%m%d_%H%M%S)”
# 创建备份
borg create \
–stats \
–progress \
–compression lz4 \
$REPO::$ARCHIVE \
/home \
/etc \
/usr/local
# 验证备份
borg check $REPO
# 删除旧备份(保留最近7天,每周一个,每月一个)
borg prune –keep-daily=7 –keep-weekly=4 –keep-monthly=6 $REPO
# 远程备份(通过SSH)
# borg create user@remote:/mnt/backup/borg_repo::$ARCHIVE /home
第六部分:系统恢复实战
6.1 灾难恢复场景
6.1.1 场景1:/home目录误删除
恢复步骤
:
# 1. 停止所有写入操作
# 2. 从tar备份恢复
tar -xzvf /mnt/backup/home_backup_20231015.tar.gz -C /
# 3. 或者从rsync备份恢复
rsync -av /mnt/backup/home.20231015/ /home/
# 4. 检查恢复的文件权限
ls -la /home/
6.1.2 场景2:系统无法启动(/etc配置错误)
恢复步骤
:
# 1. 使用Slackware安装盘启动,选择”rescue”模式
# 2. 挂载根分区
mount /dev/sda1 /mnt
# 3. 挂载备份磁盘
mount /dev/sdb1 /mnt/backup
# 4. 恢复关键配置
tar -xzvf /mnt/backup/etc_backup_20231015.tar.gz -C /mnt
# 5. 修复引导(如果需要)
chroot /mnt /bin/bash
grub-install /dev/sda
mkinitrd -c -k 5.15.0 -m ext4 -r /dev/sda1
6.1.3 场景3:整个磁盘损坏
恢复步骤
:
# 1. 更换新硬盘
# 2. 重新安装Slackware基础系统
# 3. 从Clonezilla镜像恢复
# 或者
# 4. 从Borg备份恢复
export BORG_PASSPHRASE=”your_password”
borg extract /mnt/backup/borg_repo::home_20231015T120000
# 5. 恢复数据库
gunzip < /mnt/backup/mysql/all_databases_20231015.sql.gz | mysql -u root -p
6.2 创建恢复环境
6.2.1 制作Slackware恢复U盘
# 1. 下载Slackware ISO
wget http://slackware.cs.utah.edu/pub/slackware/slackware64-15.0/installer.iso
# 2. 创建启动U盘
dd if=slackware64-15.0-install-dvd.iso of=/dev/sdc bs=4M status=progress
# 3. 在U盘上创建备份分区
# 使用fdisk分区,然后格式化
mkfs.ext4 /dev/sdc2
# 挂载并复制备份文件
mount /dev/sdc2 /mnt/usb
cp /mnt/backup/* /mnt/usb/
6.2.2 创建自定义恢复脚本
#!/bin/bash
# 恢复脚本:restore.sh
echo "=== Slackware系统恢复工具 ==="
echo "1. 恢复/home目录"
echo "2. 恢复/etc配置"
echo "3. 恢复MySQL数据库"
echo "4. 恢复PostgreSQL数据库"
echo "5. 全盘恢复(谨慎!)"
echo "============================="
read -p "选择操作: " choice
case $choice in
1)
read -p "输入备份文件路径: " backup_file
tar -xzvf $backup_file -C /
;;
2)
read -p "输入备份文件路径: " backup_file
tar -xzvf $backup_file -C /
;;
3)
read -p "输入MySQL备份文件路径: " backup_file
gunzip < $backup_file | mysql -u root -p
;;
4)
read -p "输入PostgreSQL备份文件路径: " backup_file
psql -U postgres -f $backup_file
;;
5)
read -p "警告:这将覆盖整个磁盘!输入YES确认: " confirm
if [ "$confirm" = "YES" ]; then
read -p "输入磁盘镜像路径: " image_file
dd if=$image_file of=/dev/sda bs=4M status=progress
fi
;;
*)
echo "无效选择"
;;
esac
第七部分:备份自动化与监控
7.1 使用cron定时任务
7.1.1 设置每日备份
# 编辑crontab
crontab -e
# 添加以下内容(每天凌晨2点执行)
0 2 * * * /usr/local/bin/daily_backup.sh >> /var/log/backup.log 2>&1
# 每周日执行完整备份
0 3 * * 0 /usr/local/bin/weekly_full_backup.sh >> /var/log/backup.log 2>&1
# 每月1日清理旧备份
0 4 1 * * /usr/local/bin/cleanup_old_backups.sh >> /var/log/backup.log 2>&1
7.1.2 使用systemd定时器(Slackware 15.0+)
# 创建service文件
cat > /etc/systemd/system/backup.service <
if [ -n “$LATEST_BACKUP” ]; then
SIZE=$(du -sh $LATEST_BACKUP | cut -f1)
echo “备份成功!最新备份: $LATEST_BACKUP,大小: $SIZE” | mail -s “备份成功” $EMAIL
else
echo “备份失败:未找到备份文件” | mail -s “备份失败” $EMAIL
fi
else
echo “备份失败:日志中未找到完成标记” | mail -s “备份失败” $EMAIL
fi
# 检查备份磁盘空间
SPACE=$(df /mnt/backup | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
if [ $SPACE -gt 90 ]; then
echo “警告:备份磁盘使用率超过90%(当前: ${SPACE}%)” | mail -s “备份磁盘空间告警” $EMAIL
fi
7.2.2 使用monit监控备份
# 安装monit
slackpkg install monit
# 配置monit监控备份脚本
cat > /etc/monit.d/backup <
echo “✓ tar备份有效: $backup_file”
return 0
else
echo “✗ tar备份损坏: $backup_file”
return 1
fi
}
# 验证rsync备份
verify_rsync() {
local backup_dir=$1
if [ -d “$backup_dir” ] && [ “$(ls -A $backup_dir)” ]; then
echo “✓ rsync备份有效: $backup_dir”
return 0
else
echo “✗ rsync备份无效: $backup_dir”
return 1
fi
}
# 验证Borg备份
verify_borg() {
local repo=$1
if borg list $repo > /dev/null 2>&1; then
echo “✓ Borg备份有效: $repo”
return 0
else
echo “✗ Borg备份无效: $repo”
return 1
fi
}
# 主验证流程
echo “开始备份验证…”
verify_tar /mnt/backup/home_backup_20231015.tar.gz
verify_rsync /mnt/backup/home.20231015
verify_borg /mnt/backup/borg_repo
echo “验证完成”
第八部分:高级技巧与最佳实践
8.1 备份加密最佳实践
8.1.1 使用GPG加密备份
# 加密备份文件
gpg –symmetric –cipher-algo AES256 backup.tar.gz
# 解密备份文件
gpg –decrypt backup.tar.gz.gpg > backup.tar.gz
8.1.2 在备份管道中加密
# tar + gpg加密(不生成中间文件)
tar -czf – /home | gpg –symmetric –cipher-algo AES256 -o home_backup_$(date +%Y%m%d).tar.gz.gpg
# 解密并解压
gpg –decrypt home_backup_20231015.tar.gz.gpg | tar -xzf –
8.2 备份存储策略
8.2.1 本地+远程混合备份
#!/bin/bash
# hybrid_backup.sh
# 本地备份
rsync -av /home/ /mnt/local_backup/home/
# 远程备份(通过SSH)
rsync -avz -e ssh /home/ user@remote:/mnt/remote_backup/home/
# 云备份(使用rclone)
rclone sync /home/ remote:backup/home/ –progress
8.2.2 备份轮换策略
备份轮换示例:
– 每日:增量备份,保留7天
– 每周:完整备份,保留4周
– 每月:完整备份,保留12个月
– 每年:完整备份,永久保留
存储位置:
– 本地硬盘:最近7天
– 外置硬盘:最近4周
– 云存储:最近12个月
– 归档存储:永久
8.3 性能优化
8.3.1 并行备份
# 使用parallel工具并行备份多个目录
echo “/home /etc /usr/local” | parallel -j 4 ‘rsync -av {} /mnt/backup/{}’
8.3.2 压缩级别选择
# 快速压缩(速度优先)
tar -czf – /home | gzip -1 > backup.tar.gz
# 高压缩(空间优先)
tar -czf – /home | gzip -9 > backup.tar.gz
# 使用xz(更好的压缩比)
tar -cJf backup.tar.xz /home
8.4 备份文档化
8.4.1 创建备份清单
# backup_manifest.txt
# 生成日期: 2023-10-15
# 备份工具: rsync + 硬链接
# 存储位置: /mnt/backup
# 保留策略: 30天
# 包含目录:
/home
/etc
/usr/local
/var/www
# 排除模式:
*.tmp
.cache/
Downloads/
Trash/
# 恢复步骤:
# 1. 挂载备份磁盘
# 2. 运行: rsync -av /mnt/backup/home.latest/ /home/
# 3. 恢复数据库: mysql -u root -p < /mnt/backup/mysql/all.sql
第九部分:常见问题与故障排除
9.1 备份失败常见原因
9.1.1 权限问题
# 错误:Permission denied
# 解决方案:使用sudo或以root运行
sudo /usr/local/bin/backup.sh
# 或者调整权限
chown root:root /usr/local/bin/backup.sh
chmod 700 /usr/local/bin/backup.sh
9.1.2 磁盘空间不足
# 检查磁盘空间
df -h /mnt/backup
# 清理旧备份
find /mnt/backup -name "*.tar.gz" -mtime +30 -delete
# 或者使用硬链接节省空间
# 如前面rsync+硬链接方案
9.1.3 网络中断导致rsync失败
# 使用--partial选项继续中断的传输
rsync -av --partial /home/ /mnt/backup/home/
# 或者使用screen/tmux保持会话
screen -S backup
rsync -av /home/ /mnt/backup/home/
# 按Ctrl+A, D分离会话
# 重新连接:screen -r backup
9.2 恢复失败常见问题
9.2.1 恢复后文件权限错误
# 恢复后检查权限
ls -la /home/
# 修复权限(谨慎使用)
chown -R username:username /home/username
chmod 755 /home/username
9.2.2 数据库恢复失败
# 检查MySQL错误日志
tail -f /var/log/mysql/error.log
# 如果表损坏,尝试修复
mysqlcheck -u root -p --repair --all-databases
9.3 备份验证失败
# 如果tar备份损坏,尝试恢复尽可能多的文件
tar -xzvf backup.tar.gz --warning=no-timestamp
# 或者使用ddrescue恢复损坏的磁盘
ddrescue /dev/sda /mnt/backup/disk.img /mnt/backup/logfile.log
第十部分:总结与检查清单
10.1 备份策略检查清单
[ ] 确定了需要备份的关键目录
[ ] 选择了合适的备份工具(tar/rsync/dar/borg)
[ ] 实现了3-2-1备份法则
[ ] 设置了自动化定时任务
[ ] 创建了恢复脚本和文档
[ ] 定期测试备份恢复流程
[ ] 实施了备份加密
[ ] 配置了监控和告警
[ ] 保留了足够的备份历史
[ ] 测试了灾难恢复场景
10.2 推荐的备份方案组合
对于个人用户
:
日常备份
:rsync + 硬链接(本地)
每周备份
:BorgBackup(加密,远程)
每月备份
:Clonezilla全盘镜像(外置硬盘)
对于服务器
:
系统配置
:tar备份/etc(每日)
用户数据
:BorgBackup(每小时增量)
数据库
:mysqldump/pg_dump(每日)
全盘镜像
:Clonezilla(每周)
10.3 最后的建议
备份不是一次性任务
:持续维护和测试比初始设置更重要
保持简单
:复杂的备份方案更容易出错
文档化一切
:记录你的备份策略和恢复步骤
定期演练
:每季度至少进行一次完整的恢复测试
监控备份
:确保你知道备份何时失败
保护备份密钥
:加密备份的密钥必须单独安全存储
通过遵循本指南,你将能够为Slackware系统构建一个健壮、可靠且易于管理的备份与恢复方案。记住,最好的备份是那个你已经测试过恢复的备份。数据安全无小事,预防胜于治疗。