当我开始使用 NAS 时,头几年我一直有种虚假的安全感,以为冗余硬盘就意味着我的数据是安全的。问题在于,RAID(或者 RAIDZ,如果你像我一样运行 ZFS 的话)只能帮你扛住硬盘坏了这种情况,别的就管不了了。如果你覆盖错了文件或删除了本想保留的内容,它帮不上任何忙。冗余说白了就是,你的错误会被同步到存储池里所有硬盘上。
我是吃了苦头才学到这个教训的——当时我覆盖了一个重要的文本文件,里面保存着关于我家庭实验室搭建的所有信息。转眼之间,我所有的自定义设置和配置记录全没了,而我的RAIDZ2 存储池对此毫不在意。那一刻,我才意识到 TrueNAS 图形界面中那个 ZFS 快照按钮是干什么用的。一个我压根没注意过的复选框,丢了一个文件,我才知道它有多重要。
快照为你提供了一个内置的回退按钮
而 ZFS 让这事儿设置起来特别省事
TrueNAS 将这些称为“定期快照任务”,它们就藏在数据保护菜单里。设置自动快照只需要几分钟,所以如果你在乎自己的文件,就真的没有理由不去做。你选择一个数据集、一个执行频率和一个保留期限,剩下的 TrueNAS 在后台全帮你搞定。我设置了每小时快照保留一天、每日快照保留两周、每周快照保留两个月。这样精细度就够了,既能找回最近误删的东西,又不会让旧数据把服务器塞满。
ZFS 处理快照的方式非常漂亮,因为它是一个写时复制文件系统。这意味着快照在创建时不会复制任何数据;它只是把磁盘上当前块的状态锁定了一个引用。不管你有多少数据,快照几乎都是瞬间完成的,而且在当前数据开始变化之前,它不会占用任何空间。一旦发生变化,ZFS 需要保留旧块,以便快照有可引用的内容。在我的存储池上,我保留了两个月的快照历史,结果它占用的磁盘空间少得惊人。
至于恢复,每个 ZFS 数据集在其根目录下都有一个隐藏的 .zfs/snapshot 目录,可以像任何其他文件夹一样浏览,里面装着系统拍下的所有快照。我可以进到这些文件夹里,找到我想要的文件版本,然后直接复制出来。我一开始以为回滚数据集会很麻烦,但实际上你根本不需要做什么特别的操作,就能把过去的文件找回来。
如果在我覆盖那个导致我来到这里的文件时,这套设置已经在运行,那么我只需要大约15秒就能恢复它。我可能好几个月都不需要去翻旧快照、恢复文件,但我是人,偶尔会犯错,所以知道万一真出了事——不是“如果”,而是“早晚”——过去的版本还能恢复,这让人很安心。
把副本放到错误追不到的地方
异地备份是最后一块拼图
本地快照解决了意外覆盖或删除的问题。但它们防不住整个存储池挂掉,所以两头都得考虑到。如果存储池挂了,所有快照也会跟着一起没。为了解决这个问题,我将所有内容复制到异地。我只是使用 rsync 将所有内容备份到远程服务器,但也有很多更花哨的方案,本质上干的是同一件事。
我的备份脚本在开始同步所有最近更改的文件之前,会在远程服务器上创建一个快照。当前位于备份目录中的所有内容都会被创建硬链接,我直接用 cp -al 命令就行了。当 rsync 命令运行时,它不会动旧的快照,只处理当前这份备份。这样我就多了一层恢复的手段,万一整个存储池丢了,我还能把文件恢复到几天甚至几周前的状态。
快照本身并不是备份
它们只是整套备份方案中的一环
请记住,同一个存储池上的快照还是跑在同一套硬件上,所以它们有同一个单点故障的风险。如果存储池因为硬盘坏了、电源浪涌,或者其他各种常见的 NAS 故障原因挂了,快照会跟着你当前的数据一起没了。所以千万别把快照和备份混为一谈,因为它们解决的是不同的问题。
这就是为什么 3-2-1 备份策略里“一份异地备份”这一环特别关键。本地 ZFS 快照能让我快速查看很细的版本历史,但要是没有一个放在别处、本地出事也波及不到的远程副本,那这个备份就不算完整。这两样都到位了,我才算真正做到了 3-2-1 备份,不管出什么事,数据都能保得住。
现在我的错误有了撤销按钮
想把快照用起来,唯一真正的门槛就是 TrueNAS 菜单里的一个复选框。快照占用的空间其实很少,除非你有特别大的文件,而且改得特别频繁。如果你在用 ZFS,还没开快照,别像我一样等把文件覆盖了才想起来去勾那个框。
热门跟贴