Skip to content

项目3:Linux系统备份与恢复

用tar命令备份重要文件/目录

tar命令是Linux系统中最常用的备份工具之一,它可以将多个文件或目录打包成一个压缩文件,方便存储和传输。

基本语法

bash
tar [选项] [归档文件] [文件/目录...]

常用选项

  • -c:创建新的归档文件
  • -x:从归档文件中提取文件
  • -v:显示详细信息
  • -f:指定归档文件的名称
  • -z:使用gzip压缩
  • -j:使用bzip2压缩
  • -J:使用xz压缩
  • -p:保留文件权限
  • --exclude:排除指定的文件或目录

备份示例

1. 备份单个目录

bash
# 备份/home目录到backup.tar.gz
tar -czvf backup.tar.gz /home

2. 备份多个目录

bash
# 备份/home和/etc目录到backup.tar.gz
tar -czvf backup.tar.gz /home /etc

3. 排除特定文件或目录

bash
# 备份/home目录,排除node_modules和tmp目录
tar -czvf backup.tar.gz --exclude=node_modules --exclude=tmp /home

4. 备份系统重要文件

bash
# 备份系统配置文件
tar -czvf system_config_backup.tar.gz /etc /boot /usr/local

5. 定时备份

创建一个备份脚本:

bash
#!/bin/bash

# 设置备份目录
BACKUP_DIR="/backup"

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 设置备份文件名
BACKUP_FILE="$BACKUP_DIR/system_backup_$(date +%Y%m%d).tar.gz"

# 备份系统重要文件
tar -czvf $BACKUP_FILE /etc /boot /usr/local /var/www

# 清理30天前的备份文件
find $BACKUP_DIR -name "system_backup_*.tar.gz" -mtime +30 -delete

echo "备份完成:$BACKUP_FILE"

添加执行权限并运行:

bash
chmod +x backup_script.sh
./backup_script.sh

实现备份文件的压缩与解压

压缩格式

Linux系统支持多种压缩格式,常见的有:

  • .tar.gz:使用gzip压缩,最常用
  • .tar.bz2:使用bzip2压缩,压缩率更高
  • .tar.xz:使用xz压缩,压缩率最高

压缩示例

bash
# 使用gzip压缩
tar -czvf backup.tar.gz /home

# 使用bzip2压缩
tar -cjvf backup.tar.bz2 /home

# 使用xz压缩
tar -cJvf backup.tar.xz /home

解压示例

bash
# 解压gzip压缩文件
tar -xzvf backup.tar.gz

# 解压bzip2压缩文件
tar -xjvf backup.tar.bz2

# 解压xz压缩文件
tar -xJvf backup.tar.xz

# 解压到指定目录
tar -xzvf backup.tar.gz -C /target/directory

查看压缩文件内容

bash
# 查看tar.gz文件内容
tar -tzvf backup.tar.gz

# 查看tar.bz2文件内容
tar -tjvf backup.tar.bz2

# 查看tar.xz文件内容
tar -tJvf backup.tar.xz

恢复备份文件,验证备份效果

恢复示例

1. 恢复整个备份

bash
# 恢复备份到当前目录
tar -xzvf backup.tar.gz

# 恢复备份到指定目录
tar -xzvf backup.tar.gz -C /target/directory

2. 恢复单个文件

bash
# 从备份中提取单个文件
tar -xzvf backup.tar.gz path/to/file

3. 恢复多个文件

bash
# 从备份中提取多个文件
tar -xzvf backup.tar.gz path/to/file1 path/to/file2

验证备份效果

1. 检查备份文件大小

bash
du -h backup.tar.gz

2. 检查备份文件内容

bash
tar -tzvf backup.tar.gz | head -20

3. 测试恢复

bash
# 创建测试目录
mkdir test_restore

# 恢复备份到测试目录
tar -xzvf backup.tar.gz -C test_restore

# 检查恢复的文件
ls -la test_restore/

4. 验证文件完整性

使用md5sumsha256sum命令验证文件完整性:

bash
# 计算原文件的哈希值
md5sum /path/to/original/file > original.md5

# 恢复文件后计算哈希值
md5sum /path/to/restored/file > restored.md5

# 比较哈希值
diff original.md5 restored.md5

备份策略建议

  1. 定期备份:设置定时任务,定期执行备份
  2. 增量备份:只备份变化的文件,减少备份时间和空间
  3. 异地备份:将备份文件存储到不同的物理位置,防止数据丢失
  4. 多版本备份:保留多个版本的备份,以便恢复到不同的时间点
  5. 测试恢复:定期测试备份的恢复过程,确保备份有效

增量备份示例

创建增量备份脚本:

bash
#!/bin/bash

# 设置备份目录
BACKUP_DIR="/backup"
mkdir -p $BACKUP_DIR

# 设置全量备份文件名
FULL_BACKUP="$BACKUP_DIR/full_backup_$(date +%Y%m%d).tar.gz"

# 设置增量备份文件名
INCREMENTAL_BACKUP="$BACKUP_DIR/incremental_backup_$(date +%Y%m%d).tar.gz"

# 检查是否需要全量备份
if [ ! -f "$BACKUP_DIR/full_backup_*.tar.gz" ] || [ $(find "$BACKUP_DIR" -name "full_backup_*.tar.gz" -mtime +7 | wc -l) -gt 0 ]; then
    # 执行全量备份
    echo "执行全量备份..."
    tar -czvf $FULL_BACKUP /home /etc
    echo "全量备份完成:$FULL_BACKUP"
else
    # 执行增量备份
    echo "执行增量备份..."
    # 找到最近的全量备份
    LATEST_FULL_BACKUP=$(ls -t "$BACKUP_DIR"/full_backup_*.tar.gz | head -1)
    # 获取全量备份的时间戳
    FULL_BACKUP_TIME=$(stat -c %Y "$LATEST_FULL_BACKUP")
    # 执行增量备份
    find /home /etc -type f -newerct "@$FULL_BACKUP_TIME" -print0 | tar -czvf $INCREMENTAL_BACKUP --null -T -
    echo "增量备份完成:$INCREMENTAL_BACKUP"
fi

# 清理过期备份
find "$BACKUP_DIR" -name "full_backup_*.tar.gz" -mtime +30 -delete
find "$BACKUP_DIR" -name "incremental_backup_*.tar.gz" -mtime +14 -delete

echo "备份任务完成"

灾难恢复计划

  1. 准备恢复介质:确保有可用的安装介质或恢复环境
  2. 建立恢复流程:记录详细的恢复步骤
  3. 测试恢复流程:定期测试恢复流程,确保其有效性
  4. 文档化:将备份和恢复过程文档化,方便团队成员参考

通过以上步骤,我们学习了如何使用tar命令进行系统备份,如何压缩和解压备份文件,以及如何验证备份效果和执行恢复操作。这些技能对于保障系统数据安全非常重要。

© 2026 编程马·菜鸟教程 版权所有