90DaysOfDevOps 第 86 天:跨平台数据备份实战——用开源工具 Kopia 落实 3-2-1 备份方法论
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载90DaysOfDevOps 挑战进入第 86 天本篇文章聚焦 DevOps 体系中极易被忽视却至关重要的「数据保护」环节无论此前讨论过的 Linux、Kubernetes、云平台还是自动化工作流所有平台与环境的共同点都是需要某种程度的数据备份。本文将以仓库 2022/Days/day86.md韩文版位于 2022/ko/Days/day86.md为骨架完整展开 3-2-1 备份方法论、备份责任边界、Kopia 开源备份工具的安装与仓库配置以及「本地 NAS 云端对象存储」双位置备份与恢复的完整实战流程。读完本文你将掌握一套可自动化、可集成进工作流的跨平台备份方案并能独立完成从创建仓库、配置快照到离站备份与恢复验证的全过程。为什么所有平台都需要数据备份在长达 90 天的挑战中我们讨论过各种平台和环境——物理服务器、虚拟机、云主机、容器以及 Kubernetes 集群。它们形态各异但有一个共同点都需要数据保护。数据保护的概念已存在多年但今天数据量之庞大、数据价值之高意味着我们不仅需要通过多节点与高可用来抵御基础设施故障还必须考虑当故障场景发生时重要数据是否在某个安全可靠的位置保留了一份副本。下图展示了从物理机、虚拟机到云内虚拟机、容器的架构演进——每一层都可能承载需要备份的数据对象关于备份的必要性文档给出一个常被低估的事实数据丢失最常见的原因并非勒索软件或网络犯罪而是误删除。每个人大概都有过误删文件后瞬间后悔的经历。勒索软件确实是巨大威胁——不是会不会被攻击而是何时被攻击——但日常最频繁的恢复诉求来自人为失误。同时挑战期间讨论的所有技术与自动化手段都不能替代备份需求无论平台形态如何有状态数据乃至复杂的无状态配置都需要在自动化思维的指导下纳入备份保护并最终集成到我们的工作流中。备份的本质定义文档引用了信息技术的经典定义在信息技术中备份backup / data backup是将计算机数据复制并存储到别处以便在数据丢失事件发生后用于恢复原始数据的副本。描述该过程的动词形式是 back up名词和形容词形式是 backup。将其拆到最简形式备份就是把数据复制粘贴到新位置。例如把 C 盘的文件复制到 D 盘当 C 盘故障或文件被误改时就能回退到 D 盘副本。但问题随之而来如果 C、D 盘所在的整台电脑都坏了呢那就需要系统外的解决方案——比如家中 NAS如果家也遭遇意外呢就需要异地系统或云更进一步能否把重要文件副本存放到多个位置以分散故障风险——这正是 3-2-1 方法论要回答的问题。3-2-1 备份方法论文档在此时引入 3-2-1 规则rule或方法论methodology并给出了数据保护的极端场景清单底层存储非容错、误删除、恶意丢失勒索软件、数据损坏、多平台保护需求等对应文件删除、文件损坏、勒索软件、硬件故障、站点中断、合规保留六类风险3-2-1 方法论的落地规则如下3 份数据副本原始数据 两份备份2 种不同介质备份应存放在与生产系统不同的第二介质上1 份异地副本确保有一份数据存放在远离生产环境的位置。文档特别强调第一份副本或备份的放置逻辑尽可能靠近生产系统理由是恢复速度——回到最初关于误删除的观点这将是最高频的恢复原因。但这份副本不应放在原始/生产系统本体上而是存放在生产系统之外合适的第二介质例如独立的 NAS。随后必须把另一份数据副本外部化或离站化第二位置可以是另一处住宅、另一栋建筑、另一个数据中心或公有云。备份责任与常见误区一切皆无状态与高可用即备份的迷思谈到为什么不需要备份时最常见的说法是Everything is stateless一切都是无状态的。文档对此的回应很直接如果一切都是无状态的那业务还有什么难道没有数据库、没有文档吗业务中的每个个体都负有数据保护责任但为关键任务应用与数据提供备份流程的最终还是落在运维团队身上。另一个典型误区是高可用就是我的备份——集群里建了多个节点它不可能宕机 文档指出其漏洞当你对数据库做了错误操作而这个错误会复制到集群所有节点或者发生火灾、水灾等极端场景导致整个集群不可用关键数据随之丢失。强调的重点不是固执而是对数据与服务的清醒认知——高可用与容错设计必须纳入架构但它无法替代备份。复制Replication不等于备份复制看似提供了离站副本例如集群本身跨多个位置部署但第一次误操作同样会被复制到异地。因此备份需求应当与应用程序复制、系统复制并行存在而不是互相替代。过度备份的另一个极端当然也不必走向另一个极端——把数据副本发往过多位置。这不但带来成本问题更会因攻击面大幅扩张而增加被攻击的风险。备份方案需要权衡而非越多越好。谁负责备份每个企业的分工不同但必须有人主动去理解备份需求——并且同样理解恢复计划。备份不是一次性任务而是需要明确责任归属的持续性工程。恢复意识没有人关心备份直到需要恢复备份是Nobody cares till everybody cares的典型例证没人关心备份直到你需要恢复某些东西。因此与备份数据的需求并列我们还必须考虑如何恢复。恢复的粒度与规模是两个关键维度规模文本示例是几 KB 的小文件复制回退轻而易举但面对 100GB 以上的文件恢复将耗时巨大。粒度以虚拟机为例整个 VM 包含操作系统、应用安装以及若是数据库服务器数据库文件。如果只是往数据库里插入了一行错误代码通常不需要恢复整个虚拟机——应当能够按需精细化恢复只还原出问题的部分。这一理念直接决定了备份方案的设计目标既要能整体恢复也要支持细粒度恢复。实战场景本地 NAS 云端对象存储的双位置备份文档将理论落地为一个具体场景保护本地电脑示例为 Windows上的部分文件要求同时覆盖家中本地 NAS 设备与云端 Object Storage 存储桶两个目标位置。被保护的数据恰好是 90DaysOfDevOps 仓库本身——它固然已推送到 GitHub但如果我的电脑坏了且 GitHub 宕机其他人如何读取内容我又如何把数据恢复到另一个服务这个反问正是多位置备份价值的生动例证。实现该目标有许多工具可选文档选用的方案是 Kopia——一个开源备份工具能够同时实现加密、去重dedupe与压缩并支持把备份发送到多个位置。文档写作时采用的版本为 v0.10.6。安装 KopiaGUI 与 CLI 双形态Kopia 同时提供 CLI 与 GUI 两种形态。文档实操使用 GUI安装包为KopiaUI-Setup-0.10.6.exe同时明确指出没有图形界面的 Linux 服务器也可以使用 CLI 版本——这正是 Kopia 跨平台能力的体现免费、开源、跨平台。安装过程非常快速安装完成后打开应用首先看到的是为备份仓库选择存储类型的界面配置仓库通过 SMB 对接本地 NAS第一步是使用本地 NAS 设备建立仓库文档采用SMB协议完成同类型场景也可考虑 NFS。随后进入密码定义界面——该密码用于加密仓库内容即 Kopia 会对写入仓库的数据做客户端侧加密因此这个密码是数据安全的核心凭据需要妥善保管仓库初始化时会同时生成恢复密钥信息也应离线保存。仓库配置完成后即可触发一次临时ad-hoc快照开始向仓库写入数据。首次创建快照时需要依次定义以下内容快照路径输入要快照的目标路径本场景为90DaysOfDevOps文件夹的副本快照保留策略retention定义快照的保留周期与保留数量控制仓库增长与恢复点数量排除规则可以排除某些文件或文件类型例如临时文件、构建产物减少快照体积调度schedule定义周期性备份计划——首次创建快照时这一页就是需要定义的第一页实现从临时备份到定时备份的升级其他设置界面中还可以处理若干附加配置项。完成配置后选择 Snapshot now立即快照数据即写入仓库。离站备份到对象存储Google Cloud Storage 实战Kopia 的 UI 同一时间似乎只支持配置一个仓库但文档给出了巧妙的思路通过 UI 背后的多份仓库配置文件切换实现本地一份 离站对象存储一份的目标——为每个位置维护独立的仓库配置文件例如smb.config与object.config分别执行命令即可把数据副本发送到各自位置。对象存储选择为Google Cloud Storage完整步骤如下创建存储桶登录 Google Cloud Platform 账号创建存储桶本场景命名为90daysofdevops身份认证系统已安装 Google Cloud SDK执行gcloud auth application-default login完成账号认证为后续 Kopia 访问 GCS 提供应用默认凭据ADC查看当前仓库状态使用 Kopia CLI 查看之前通过 UI 添加 SMB 仓库后的当前状态C:\Program Files\KopiaUI\resources\server\kopia.exe --config-fileC:\Users\micha\AppData\Roaming\kopia\repository.config repository status创建 GCS 仓库为演示将仓库配置切换到 GCS执行以下命令把新仓库建立在名为90daysofdevops的存储桶上命令中--bucket 90daysofdevops对应的正是所创建的存储桶名C:\Program Files\KopiaUI\resources\server\kopia.exe --config-fileC:\Users\micha\AppData\Roaming\kopia\repository.config repository create gcs --bucket 90daysofdevops验证仓库切换再次运行repository status命令此时应显示 GCS 仓库配置创建并发送快照对目标路径创建快照把数据写入新仓库C:\Program Files\KopiaUI\resources\server\kopia.exe --config-fileC:\Users\micha\AppData\Roaming\kopia\repository.config kopia snapshot create C:\Users\micha\demo\90DaysOfDevOps执行后在浏览器中打开 Google Cloud Storage 存储桶可以看到基于本次备份的 Kopia 对象文件已经就位至此关键数据被送往2 个不同位置其一位于 Google Cloud Storage 的离站对象存储中另一份为生产数据在不同介质类型上的副本本地 NAS。这正是 3-2-1 方法论中多位置、多介质、异地副本要求的落地。恢复验证备份价值的关键一环恢复是备份方案中极为重要的另一半能力。Kopia 不仅能恢复到原位置也支持恢复到新位置。列出快照查看当前配置仓库GCS中的快照C:\Program Files\KopiaUI\resources\server\kopia.exe --config-fileC:\Users\micha\AppData\Roaming\kopia\repository.config snapshot list挂载快照直接从 GCS 挂载快照以文件系统方式浏览示例挂载到Z:盘C:\Program Files\KopiaUI\resources\server\kopia.exe --config-fileC:\Users\micha\AppData\Roaming\kopia\repository.config mount all Z:恢复快照内容使用kopia snapshot restore直接恢复指定快照kopia snapshot restore kdbd9dff738996cfe7bcf99b45314e193关于命令长度的说明以上命令看起来很长原因在于使用了 KopiaUI 内置的kopia.exe位于C:\Program Files\KopiaUI\resources\server\下并通过--config-file显式指定仓库配置。文档明确指出下载独立的kopia.exe并放入 PATH 后只需使用kopia命令本身命令即可大幅简化。这意味着在无 GUI 的 Linux 服务器上同样可以使用简洁的 CLI 形式完成仓库创建、快照与恢复——这也是将备份自动化并集成进工作流的前提。总结与下一步本篇文章完整梳理了数据保护的必要性、3-2-1 备份方法论、备份责任与常见误区并以 Kopia 为工具从安装、仓库配置SMB/NAS、快照策略保留/排除/调度、GCS 离站备份到恢复list/mount/restore走通了一条本地 云端的双位置备份链路全部基于免费、开源、跨平台的工具链具备直接复制运行的实战价值。文中涉及的完整英文原版见 2022/Days/day86.md韩文版见 2022/ko/Days/day86.md本篇所属的 2022 年完整课程地图见 2022.md。文档预告了下一章节的方向聚焦 Kubernetes 内工作负载的保护。相关的动手实验使用 minikube 与 Kasten K10 进行备份恢复记录在 2022/ko/Days/day87.md感兴趣的读者可以继续沿着课程地图深入。实践提醒仓库为只读学习资源本文所有命令请在你自己的环境中执行Kopia 仓库密码与恢复密钥务必离线妥善保存因为仓库内容默认加密密码一旦丢失备份数据将无法恢复。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps Day86 实战用 Kopia 实现全平台数据备份与 3-2-1 方法论落地90DaysOfDevOps Day86 实战用 Kopia 实现全平台数据备份与 3 2 1 方法论落地 本文是 90DaysOfDevOps 挑战第 86文档/教程90DaysOfDevOps Day86 实战用 Kopia 开源备份工具实现跨平台数据保护与 3-2-1 备份策略90DaysOfDevOps Day86 实战用 Kopia 开源备份工具实现跨平台数据保护与 3 2 1 备份策略 本文是 90DaysOfDevOps 挑文档/教程90DaysOfDevOps 数据保护实战使用 Kopia 开源备份工具落地 3-2-1 备份策略本地 NAS 云对象存储90DaysOfDevOps 数据保护实战使用 Kopia 开源备份工具落地 3 2 1 备份策略本地 NAS 云对象存储 本篇文章是 90DaysO文档/教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ponytail:跨栈契约驱动的 CLI 工具与项目状态机

ponytail:跨栈契约驱动的 CLI 工具与项目状态机

1. “ponytail”不是发型,而是一个正在 quietly rise 的 CLI 工具生态你搜“ponytail”,第一反应可能是马尾辫——但最近三个月,在 GitHub Trending、Discord 开发者频道和内部技术分享会上,“ponytail”出现的语境,90…

2026/10/7 5:32:10 阅读更多 →
游戏对象与资源管理:游戏引擎架构的核心实践

游戏对象与资源管理:游戏引擎架构的核心实践

聊游戏引擎架构,前面几篇我们一直在聊底层的东西,从内存、渲染、数学库一路下来。今天这篇“游戏对象与资源管理”,其实是整个引擎里最容易被低估、也最容易写崩的两个模块,尤其是项目做到中后期,对象生命周期和资源加…

2026/10/7 5:32:10 阅读更多 →
微信小程序canvas游戏与Java后端联调:飞翔的小鸟学习版demo解析

微信小程序canvas游戏与Java后端联调:飞翔的小鸟学习版demo解析

简介:这是一份微信小程序完整demo,实现“飞翔的小鸟”休闲游戏,前端采用canvas绘制并控制小鸟运动,后端使用java提供数据接口,属于学习版资源。面向正在学习小程序开发或准备课程设计的学生群体,可对照该项…

2026/10/7 5:32:10 阅读更多 →

最新新闻

基于Java+JavaScript+HTML的水质检测系统设计与实现

基于Java+JavaScript+HTML的水质检测系统设计与实现

简介:基于Java、JavaScript与HTML实现的水质检测系统,是一套面向高校毕业设计、课程设计及项目开发的完整源码与数据库包,覆盖后端逻辑、前端页面与数据存储。资源共297个文件,主要包括37个Java类用于业务逻辑处理、16个JSP页面实…

2026/10/7 5:58:27 阅读更多 →
基于SpringBoot+Vue+MySQL的光影视频平台全栈实战与避坑指南

基于SpringBoot+Vue+MySQL的光影视频平台全栈实战与避坑指南

简介:这份资源是面向计算机专业学生与Java Web开发初学者的完整视频平台项目资料包,可直接用于毕业设计、课程设计或期末大作业。项目采用SpringBoot后端、Vue前端与MySQL数据库的经典技术栈,开发环境覆盖IDEA、VSCode、Maven与Navicat&#…

2026/10/7 5:58:27 阅读更多 →
Django+MySQL从零搭建图书管理系统:ORM模型与事务实战

Django+MySQL从零搭建图书管理系统:ORM模型与事务实战

简介:这是一份基于Python、Django与MySQL构建的图书管理系统完整源码,并附带数据库文件,适用于Python Web初学者、高校课程设计以及小型图书室的信息化管理。系统围绕图书、用户、借阅三条主线展开,包含图书信息增删改查、读者注册…

2026/10/7 5:58:27 阅读更多 →
测试数据太干净测不出Bug?Eon免费造会埋雷的模拟公司

测试数据太干净测不出Bug?Eon免费造会埋雷的模拟公司

背景测了三轮都通过的客户导入,上线第二天被业务一张表退回来:有个客户名出现了两次,几个名字大小写不一致,还有一行"测试-别删"的占位数据。你的测试数据里一条都没有——不是漏测,是数据太干净了。它是什么…

2026/10/7 5:58:27 阅读更多 →
Python+OpenCV轻量级人脸考勤系统实战指南

Python+OpenCV轻量级人脸考勤系统实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 5:58:27 阅读更多 →
AI资讯速递实战:从Claude Sonnet 5.5到每日选题与写作流程

AI资讯速递实战:从Claude Sonnet 5.5到每日选题与写作流程

今早我把当天的AI信息池又做了一遍筛选,最后定下来的标题是:衍辉AI速递 9.29|Anthropic发布Claude Sonnet 5.5等11条AI资讯。做这种每日速递已经不算短时间了,我的核心感受并不是“今天新闻好多”,而是“真正值得被写进…

2026/10/7 5:57:27 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 6:26:51 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →