多年来,我一直是 Linux 的忠实用户,但后来转向了 Windows。我一直怀念的一件事是使用 rsync 制作增量快照用于备份。您可以使用如下命令:
rsync -aP --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP
它会创建您正在备份的文件夹的当前状态的完整目录结构,使用硬链接引用上一个备份。只有新文件或更改的文件才会真正写入磁盘;所有其他文件都保存为硬链接。这简直太棒了,我在 Windows 中找到的解决方案都无法做到这一点。(作为参考,我尝试过 Windows 文件历史记录,并花钱购买了包括 Crashplan 和其他出色的商业软件无可比拟。
现在微软已经推出了 WSL,我尝试在 Windows 的 bash 中执行此操作。它似乎运行良好,但 Windows 错误地报告了磁盘大小,如下所示:
解释一下,在一张快照中,snapshot-170831__07h08m48s
我添加了一个很大的视频文件,1.40 GB,复制花了几秒钟。在下一张快照中,snapshot-170831__07h09m09s
文件复制没花什么时间,这表明硬链接创建正确,硬盘上没有占用任何空间。
但是我的所有 Windows 工具(Windows 资源管理器、Directory Opus、WinDirStat)都报告第二个快照文件夹占用了 1.40 GB 的磁盘空间。
那么第一个问题是为什么 Windows 会错误地报告这些硬链接的磁盘大小?
但更重要的问题是我应该这样做吗:使用 Windows 下的 Linux 工具进行常规文件备份。我已经在 WSL 上看到,使用 Windows 工具修改 .bashrc 等文件会导致 WSL 内部无法读取该文件。我想知道将我的备份托付给这样的工具是否风险太大,或者我是否有损坏文件系统和丢失重要文件的风险。
答案1
计算 Windows 中硬链接的大小
在 Windows 中很难计算硬链接文件的大小。有一个工具可以帮你做到这一点TreeSize 专业版(不免费,默认情况下硬链接分析是关闭的)。我使用了这个工具,它正确地估计了硬链接文件的大小。
有关更深入的讨论,请参阅如何检查具有许多硬链接的 NTFS 目录中实际使用的大小?
这些文件真的能起作用吗?
至于问题的另一部分,在 WSL 上使用 Windows 下的 Linux 工具备份文件是否有风险?我决定通过将其中一个快照目录复制到单独的外部硬盘驱动器来测试这一点。复制文件或从外部驱动器读取文件都没有问题。换句话说,硬链接的行为完全符合预期,且文件正常运行。
长期数据稳定性
所以归结到最后一点,在 WSL 下使用 Linux 工具作为常规备份的一部分会破坏某些东西吗,例如破坏文件系统?我相信 WSL 不会造成重大破坏吗?任何东西都可能随时发生故障,所以我会确保这些快照目录定期复制到单独的驱动器。