如何保护你的数据:从"数据裸奔"到ZFS的完整进化路线

本文梳理了数据文件安全的五个层级,从U盘“裸奔”到最终采用ZFS系统。仅靠同步和哈希校验仍无法解决断电写入损坏等问题,因此提出在Windows下通过虚拟机安装FreeBSD,利用ZFS实现数据校验、加密、快照和增量同步。方案包含安装VMware、配置FreeBSD、挂载共享文件夹、创建加密存储池及rsync同步等步骤,旨在全面提升数据安全性与可靠性。

⚠️ 免责声明与风险提示
本文仅供技术学习、交流与个人参考,不构成任何明示或默示的保证、担保或承诺。文中涉及的命令与操作具有潜在风险,可能导致数据丢失、系统不稳定或其他不可预见的损失。
您应自行承担使用本文任何信息所带来的一切风险与全部后果。
作者明确声明,对于因使用或依赖本文内容而造成的任何直接或间接损失,不承担任何责任。
在尝试任何操作之前,您必须:
1. 完成全部重要数据的完整、可恢复备份。
2. 确保已完全理解每一条命令的具体含义及潜在影响。
3. 在隔离的测试环境中先行验证。

记得十几年前,财务部门的同事们,人手一个u盘,一股脑的往里塞文件,excel表格,word文档,照片,网页,txt文件,常见的格式基本都能在u盘看到。

很多人还直接在u盘进行编辑,让u盘上残留大量各种各样的临时文件对了,还有各种chk扫描文件。

办公电脑上的数据也不可靠,经常说没就没了。

当时应该是win98-win7时期吧,很多人也不知道整理磁盘碎片,硬盘分区也不合理,什么都一股脑往C盘装,一旦出现问题,不管是单位的网管还是外部的电脑维修师傅,一招搞定-Ghost重装,也不管备份,顶多说一句,都拷出来了吗,重装可就没有了。

这就导致了办公电脑上的文件很不保险。

以前的这些场景,在当前也是普遍现象。律所的几个老大哥,要么一个u盘"走天下",要么win98的c盘只剩500MB,没错,还在用win98。

上面的这些情况,不管是电脑硬盘上的文件也好,随身携带的u盘也好,里面的某些文件有可能哪天冷不丁就打不开了。

另外一个情况就是,如果存储介质丢失了,里面的信息就有可能泄露。作为律师,保护客户的信息可是第一位的,案件材料中往往有大量客户信息、个人隐私等等。因此管理好数据文件安全,是重中之重。

应该从两个方面考虑:

  1. 文件的安全可读
  2. 丢失防止被读取

根据这两个方面,我把数据文件安全分成五大类型:

  • 第一类,就是上面说的,用u盘或移动硬盘存储,没有抗风险性,可称之为"数据文件裸奔级"。
  • 第二类,在第一类的基础上,增加了加密防丢失后的被读取,比如带加密软件的u盘(移动硬盘),或者启用Bitlocker,可称之为"入门级"。但仍然无法保证文件能正常读取。
  • 第三类,在第二类基础上,增加同步功能,这个功能尤其好用,因为数据文件往往是长时间的累积产生,在不同的电脑上都使用过,不知道哪个副本的内容是最新的,如果逐个人工对比,几个小时估计搞不定,纯靠记忆,相当不靠谱。因此引入了同步功能,比如SyncToy,freefilesync等等。这种主要是靠数据库+对比修改时间和文件名和文件大小的方式进行对比,属于文件级别的比较。如果出现相同修改时间、文件名相同、文件大小相同、内容不同的文件,也避免不了文件丢失。而且也解决不了数据位随时间衰减或静默数据损坏。
  • 第四类,在第三类的基础上,增加内容对比功能,就是检查文件的哈希值,保证文件一致,比如用unison。缺点是,当文件很多的时候,初次运行相当的耗费时间,后续使用速度会好很多。但仍无法解决一个问题:Windows突然断电时,正在写入的文件可能损坏或丢失。
  • 第五类,彻底放弃 Windows 下缺乏完整性校验的文件系统(如 NTFS),使用先进的ZFS系统。本文简单介绍一下第五类方案的思路及步骤。作为非计算机专业技术人员,该方案仅在本人电脑验证过,不保证所有电脑均可实施。如果抛去windows环境不用,那这个方案的意义就会大打折扣,毕竟windows当前是主流。因此本方案,是在windows下,实现使用ZFS同步和备份数据文件。

ZFS的优点:支持数据校验和、快照、压缩、原生加密等等。可自行官网搜索详细介绍,这里不再赘述。

方案具体步骤如下

  1. windows中安装vmware workstation(本文基于26H1)
  2. 虚拟机安装Freebsd(本文基于15p9)
  3. 虚拟机安装open-vm-tools并进行设置
pkg install open-vm-tools
sysrc vmware_guest_vmblock_enable="YES"
sysrc vmware_guest_vmhgfs_enable="YES"
sysrc vmware_guest_vmmemctl_enable="YES"
sysrc vmware_guest_vmxnet_enable="YES"
  1. 加载内核
kldload fusefs
  1. 虚拟机设置文件共享

虚拟机关机状态,点击virtual machine settings→options→shared folders→always enabled→add folders

运行虚拟机,挂载刚才的共享文件夹

mkdir -p /mnt/123
vmhgfs-fuse .host:/123 /mnt/123 -o allow_other
  1. 插入移动硬盘

选择虚拟机独占,检查移动硬盘名称,这里假设da1

camcontrol devlist

清除重建(注意!!!所有该硬盘已存储的文件都会被破坏!!)

⚠️ 高风险操作
以下操作会永久删除移动硬盘上的所有数据,请务必确认设备名称,避免误操作。

gpart destroy -F da1

清除原先win的残留信息-清除原有分区表
风险操作!!!风险操作!!!风险操作!!!

gpart create -s GPT da1
gpart add -t freebsd-zfs -l 123 da1

上面两个命令重新创建gpt信息,这可以防止移动硬盘插入windows电脑中时,系统提示初始化,不小心破坏了数据。因为windows检测到有gpt信息就不会提示初始化,一定程度上避免数据在windows系统中遭到破坏,需要注意,这个硬盘在win下无法使用,虽然在磁盘管理器中能看到信息。

  1. 建立新池
zpool create -o ashift=12 \
  -O encryption=aes-256-gcm \
  -O keyformat=passphrase \
  123_pool /dev/gpt/123

会提示输入密码,这是ZFS原生加密,可以想象成Bitlocker,有更多高级的用法。

  1. 同步数据
rsync -av --progress /mnt/123/ /123_pool/123/

注意mnt的123后面一定要有"/"
否则的话rsync会把mnt的123作为一个整体,复制到pool的123中,也就是说,会出现pool/123/123这样的情况。

下次增量同步可以使用

rsync -av --progress --delete /mnt/123/ /123_pool/123/
  1. 创建快照
zfs snapshot 123_pool@2026-06-03

(自行设置日期)

  1. 安全退出移动硬盘
zpool export 123_pool

以上就是整个方案的思路和一个大概的步骤。

有兴趣的,欢迎联系讨论交流。


⚠️ 再次提醒:免责声明与风险提示
本文仅供技术学习、交流与个人参考,不构成任何明示或默示的保证、担保或承诺。文中涉及的命令与操作具有潜在风险,可能导致数据丢失、系统不稳定或其他不可预见的损失。
您应自行承担使用本文任何信息所带来的一切风险与全部后果。
作者明确声明,对于因使用或依赖本文内容而造成的任何直接或间接损失,不承担任何责任。
在尝试任何操作之前,您必须:
1. 完成全部重要数据的完整、可恢复备份。
2. 确保已完全理解每一条命令的具体含义及潜在影响。
3. 在隔离的测试环境中先行验证。