ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux 归档与备份实战指南:SRE 视角下的压缩、归档、rsync 同步与增量备份方案

Linux 归档与备份实战指南:SRE 视角下的压缩、归档、rsync 同步与增量备份方案 教程【免费下载链接】school-of-sreAt LinkedIn, we are using this curriculum for onboarding our entry-level talents into the SRE role.项目地址https://gitcode.com/gh_mirrors/sc/school-of-sre点击查看免费下载SRE 的核心职责是保障服务持续可用而服务背后每台服务器都会产生海量数据——访问日志、数据库记录、各类元数据。如何高效地压缩、归档、轮转并备份这些数据既是数据安全的基本保障也是避免磁盘空间耗尽的关键。本篇指南基于 School of SRELinkedIn 内部 SRE 入门课程的 Linux 中级课程 中 Archiving and Backup 章节系统讲解 gzip 压缩、tar 归档、rsync 网络同步备份及增量/差异/云备份的核心概念并给出可直接落地的命令与脚本帮助你构建一套完整的日志与数据保护方案。上图为 gzip 压缩的典型实操一个 248984 字节的messages日志文件经gzip压缩后生成messages.gz大小缩减至 46793 字节约为原文件的五分之一随后又通过gunzip恢复了原始文件。为什么 SRE 需要掌握归档与备份在 SRE 的日常工作中服务不掉线至少 99.99% 可用只是表象真正需要持续管理的是服务背后产生的大量数据。这些数据包括日志文件应用日志、系统日志如/var/log/messages、审计日志用于排障与合规审计数据库中的用户数据任何业务的核心资产丢失即灾难各类元数据与配置支撑系统运行状态的描述性信息。这些数据的特点是只增不减若不加以控制磁盘很快会被写满导致服务因空间不足而异常。因此 SRE 需要一套组合拳压缩compress、归档archive、轮转rotate、备份backup在保障数据安全的同时避免跑满磁盘的运维事故。一个值得注意的区分是压缩Compression用算法减小数据体积如 gzip归档Archiving把多个文件/目录合并为单个文件便于管理与传输如 tar轮转Rotation按时间/大小切分日志保留最近 N 份如 logrotate备份Backup复制数据到独立介质/位置用于灾难恢复。本篇聚焦归档与备份两大环节这也是 本课程 中与存储Storage Media并列的 SRE 核心技能。归档Archiving为合规与空间管理而压缩存储归档通常针对不再频繁使用、但出于合规compliance目的必须保留的数据。通过压缩格式存储可以大幅节省磁盘空间。归档不是删除而是把冷数据以更紧凑的方式保存下来随时可以恢复。下面的章节介绍两类最核心的归档工具gzip单文件压缩与tar多文件/目录打包。gzip单文件压缩与解压gzip是 Linux 下最常用的压缩程序用于压缩一个或多个文件。它的一个关键行为是压缩后会用压缩版本替换原始文件。# 查看原始文件大小 ls -l # -rw-r--r-- 1 root root 248984 ... messages # 压缩 gzip messages # 再次查看原始 messages 已被 messages.gz 替换 ls -l # -rw-r--r-- 1 root root 46793 ... messages.gz从输出可以看到248984 字节的messages日志被压缩为 46793 字节的messages.gz体积缩减到原来的约五分之一这就是日志文件为何普遍采用 gzip 轮转存储的原因。解压使用gunzip命令它会将.gz文件还原为原始文件gunzip messages.gz提示gzip只处理单个文件。如果需要压缩整个目录应先用tar打包再压缩或直接使用tar的-z选项一步完成见下文。tar把多个文件与目录打包成单个归档tarTape Archive磁带归档程序用于把文件和目录归档为单个文件通常称为 tarball。它在 SRE 工作中的典型用途是在数据转移到长期备份服务器之前先打包成归档文件。与gzip不同tar不会替换现有文件与目录而是创建一个新的.tar后缀文件。tar提供了大量旗标flags下表是 SRE 最常用的一组旗标说明-c创建归档Create-x从归档中提取eXtract-f指定归档文件名File-t列出归档中的文件列表lisT-u归档并追加到已存在的归档文件Update-v显示详细verbose信息-A拼接concatenate多个归档文件-z用 gzip 压缩 tar 文件生成.tar.gz-j用 bzip2 压缩 tar 文件生成.tar.bz2-W校验归档文件的完整性Verify-r向已存在的.tar文件中追加/更新文件或目录用文件与文件夹创建归档创建归档使用-ccreate旗标-f后紧跟归档文件名# 将 file1、file2、messages 三个文件打包为 archive.tar tar cf archive.tar file1 file2 messages # 验证归档已生成且原文件仍然保留 ls # archive.tar file1 file2 messages如上图所示执行tar cf archive.tar file1 file2 messages后目录中多出了archive.tar而原文件file1、file2、messages依然存在——这正是归档与压缩gzip在行为上的重要区别。列出归档中的文件使用-t旗标可以查看归档内容而不解压tar tf archive.tartar tvf archive.tar # 加上 -v 可以看到每个文件的权限、属主与大小详情从归档中提取文件使用-x旗标解包归档tar xf archive.tartar xvf archive.tar # -v 显示解包过程的每个文件一步完成打包 压缩日常运维中最常见的组合是-czf创建归档的同时用 gzip 压缩得到体积更小的.tar.gz文件tar czf backup.tar.gz /var/log/ tar tzf backup.tar.gz # 查看 .tar.gz 内容 tar xzf backup.tar.gz # 解压并解包如需更强的压缩率可改用 bzip2-j生成.tar.bz2或 xz-J生成.tar.xz代价是压缩耗时更长。用 tar 实现增量备份tar不仅用于静态打包还内置了增量归档能力是后续自动化备份脚本的基础。核心参数是--listed-incremental它配合一个元数据文件通常以.snar结尾记录上次归档后哪些文件发生了变化# 第一次全量归档同时生成元文件 snapshot.snar tar --create --listed-incrementalsnapshot.snar --filebackup-$(date %F).tar /var/log/ # 第二次基于元文件只归档自上次以来的变更 tar --create --listed-incrementalsnapshot.snar --filebackup-$(date %F).tar /var/log/第一次执行时归档全部内容之后每次执行只追加变更过的文件这与下文增量备份的理念完全一致。备份Backup数据丢失前的最后防线备份是复制/拷贝现有数据的过程目的是在数据丢失时能够恢复数据集。当某些数据虽然不在日常工作中使用但需要作为未来合规依据与真相来源source of truth时备份就显得尤为关键。根据策略不同备份可分为以下几种类型增量备份Incremental Backup增量备份是自上次备份以来新增或变更数据的备份。它的优点是大幅减少数据冗余、提高存储效率因为每次只备份变化量而非全部数据。优点备份数据量小、耗时短、占用存储少缺点恢复时需要首次全量 所有增量按顺序重放恢复链路较长。差异备份Differential Backup当数据持续修改、更新时我们通常针对自上次备份以来发生的变更进行备份这类备份称为差异备份。与增量备份的区别差异备份基于上次全量备份计算差异而不是基于上一次任意类型的备份优点恢复只需上次全量 最后一次差异比增量备份的恢复更简单缺点随着时间推移每次差异备份的数据量会逐渐增大存储开销高于增量备份。网络备份Network Backup网络备份是指通过客户端-服务器模型把数据从源端发送到远端备份目的地。备份目的地可以是集中式centralized也可以是去中心化decentralized。其中去中心化备份对灾难恢复disaster recovery场景尤其有价值——当某个数据中心整体不可用时其他站点仍持有数据副本。rsync跨服务器同步的利器rsync是 Linux 下用于将文件从一台服务器同步到目标服务器的经典命令也是网络备份最常用的工具之一。rsync [options] source destination如上图所示一条典型的远程备份命令rsync -av archive.tar azureuserbackup_server:-aarchive mode归档模式递归同步并保留权限、时间戳、属主等元数据-vverbose显示同步过程的详细信息azureuserbackup_server:目标地址。冒号:后没有指定路径时文件会被放到该用户的主目录home directory下本例中即/home/azureuser。rsync 的增量特性体现在输出中的sending incremental file list它只传输发生变化的部分并给出发送/接收字节数、传输速率、文件总大小与加速比等信息非常适合日志与归档文件的定期同步。日常高频使用的 rsync 选项包括选项说明-a归档模式递归 保留权限/时间/属主等-v详细输出-z传输时压缩节省带宽-P显示进度并支持断点续传--partial --progress--delete删除目标端源端已不存在的文件保持两端一致-e ssh通过 SSH 加密传输默认即走 SSH查看rsync全部可用选项随时使用man rsync云备份Cloud Backup除了本地与网络备份还可以把备份数据托管到第三方云服务。相比本地机器或未配置 RAID 的服务器上的存储云备份通常更可靠因为云厂商负责数据冗余redundancy管理、数据恢复recovery与数据安全security。即使本地磁盘全部损坏、机房整体故障云端副本依然可以恢复业务。课程中提到的两个广泛使用的云备份方案是Azure Backup微软面向 Azure 生态的托管备份服务支持虚拟机、数据库与文件级备份Amazon GlacierAWS面向长期归档的低成本冷存储服务适合合规留存类数据。需要说明的是云备份虽然可靠性更高但引入网络带宽成本与恢复时间RTO考量实践中常按本地快速恢复 云端长期留存的分层策略组合使用。综合实战用 Bash 脚本自动化日志备份理解了tar与备份类型之后可以把它们串成一个可投入使用的备份脚本。在 Bash Scripting 章节中课程给出了一个将备份流程自动化的backup.sh脚本它把增量备份与全量备份统一到一个命令入口并用到函数、参数校验、字符串比较与逻辑运算符等 bash 特性#!/bin/bash # Scripts to take incremental and full backup backup_dir/mnt/backup/ time_stampdate %d-%m-%Y-%Hh-%Mm-%Ss log_backup(){ if [ $# -lt 2 ]; then echo Usage: ./backup.sh [backup_type] [log_path] exit 1; fi if [ $1 incremental ]; then if [ $# -ne 3 ]; then echo Usage: ./backup.sh [backup_type] [log_path] [meta_file] exit 3; fi tar --create --listed-incremental$3 --verbose --verbose --file${backup_dir}incremental-${time_stamp}.tar $2 if [ $? -eq 0 ]; then echo Incremental backup succesful at ${backup_dir}incremental-${time_stamp}.tar else echo Incremental Backup Failure fi elif [ $1 full ];then tar cf ${backup_dir}fullbackup-${time_stamp}.tar $2 if [ $? -eq 0 ];then echo Full backup successful at ${backup_dir}fullbackup-${time_stamp}.tar else echo Full Backup Failure fi else echo Unknown parameter passed echo Usage: ./backup.sh [incremental|full] [log_path] exit 2; fi } if [ $# -lt 2 ] || [ $# -gt 3 ];then echo Usage: ./backup.sh [incremental|full] [log_path] exit 1 elif [ $# -eq 2 ];then log_backup $1 $2 elif [ $# -eq 3 ];then log_backup $1 $2 $3 fi exit 0这个脚本的核心设计值得逐点拆解参数约定第一个参数指定备份类型incremental或full第二个参数是要备份的日志路径只有增量备份需要第三个参数——元数据文件.snar用于记录上次备份状态时间戳命名date %d-%m-%Y-%Hh-%Mm-%Ss为每次归档生成唯一文件名避免覆盖历史备份增量备份实现核心命令是tar --create --listed-incremental$3 --verbose --verbose --file... $2其中--listed-incremental即上文提到的增量归档机制--verbose --verbose双-v会输出更详细的文件级信息全量备份实现tar cf ${backup_dir}fullbackup-${time_stamp}.tar $2每次对目录做完整归档失败处理通过$?检查每条tar命令的退出码成功或失败分别输出明确提示退出码约定参数个数不足返回1未知备份类型返回2增量备份缺少元文件参数返回3正常结束返回0——非零退出码与错误类型一一对应便于被监控系统捕获。运行方式# 全量备份 /var/log ./backup.sh full /var/log # 增量备份 /var/log并使用 snapshot.snar 作为元文件 ./backup.sh incremental /var/log snapshot.snar将上述脚本加入cron例如每天凌晨执行一次增量备份、每周一次全量备份再配合 rsync 将归档传输到远端备份服务器就构成了一套完整的本地压缩归档 → 定期增量备份 → 远程异地同步的数据保护链路。该脚本与 bash 基础变量、参数、退出状态紧密结合是练习 SRE 自动化能力的好起点。最佳实践小结结合本课程内容Storage Media 中 RAID 冗余与文件系统管理、本篇的归档备份SRE 在数据保护上的实践要点可归纳为先归档后压缩目录用tar打包再以-z/-j压缩兼顾管理与体积日志必须轮转配合 gzip 按日/周切分只保留 N 份防止磁盘被日志写满分层备份策略本地增量备份满足快速恢复云备份如 Azure Backup、Amazon Glacier满足异地容灾与长期合规留存网络备份走 rsync利用增量传输与 SSH 加密高效、安全地同步到备份服务器自动化 监控用 bash 脚本 cron 把备份变成例行任务并用退出码接入监控告警确保备份失败能第一时间被发现定期验证恢复备份的价值在于可恢复应周期性演练从归档中tar xf还原数据确认链路可用。进一步学习本课程整体路线与实验环境RHEL 8 Docker 容器见 Linux 中级课程介绍深入理解磁盘、文件系统、RAID 冗余与 LVM见 Storage Media巩固变量、函数、条件判断等 bash 基础见 Bash Scripting如需了解文件系统损坏检查与修复fsck及其错误码可参考 Storage Media 的Checking and Repairing FS一节。赞分享教程【免费下载链接】school-of-sreAt LinkedIn, we are using this curriculum for onboarding our entry-level talents into the SRE role.项目地址https://gitcode.com/gh_mirrors/sc/school-of-sre点击查看免费下载相关推荐MariaDB Server备份革命Mariabackup增量备份与压缩实战指南MariaDB Server备份革命Mariabackup增量备份与压缩实战指南 还在为数据库备份耗时长、占用空间大而烦恼Mariabackup作为Mari数据库关系型数据库Linux增量备份rsync --link-dest实现高效备份 | linux-tutorialLinux增量备份rsync link dest实现高效备份 | linux tutorial 你是否遇到过服务器备份占用空间过大、重复文件多的问题传统全量文档教程运维Messenger-iOS-chat-swift-firestore国际化打造支持多语言聊天界面的完整指南Messenger iOS chat swift firestore国际化打造支持多语言聊天界面的完整指南 Messenger iOS chat swift上一篇终极指南nlp_chinese_corpus数据集从v1.0到2025更新全解析下一篇Intel One Mono源码贡献指南从提交PR到UFO文件审核标准创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表