Git 是否可以防止数据降级

MAD*_*ppy 41 git zfs btrfs data-integrity

我读到 ZFS 和 Btrfs 使用校验和来防止数据降级,并且我读到 Git 通过对每次提交的所有内容进行散列来实现完整性。

我打算在带有 Btrfs RAID 1 的 Linux NAS 上使用 Git 服务器进行存储,但是如果 Git 具有完整性,我想这不是必需的(至少如果我想要防止数据降级的话,则不需要)。

问题: 那么 Git 的完整性虽然在每次提交时对所有内容进行散列,但是否可以防止或帮助防止位腐烂?

hea*_*vyd 62

Git 的散列仅在创建提交时发生,然后散列用于识别提交。这绝不能确保文件的完整性。Git 存储库可能会损坏并丢失数据。事实上,git 有一个内置命令来检测这种丢失,git fsck,但正如文档所说,你有责任从备份中恢复任何损坏的数据。

  • @ CAD97 程序员以这些相对蹩脚的双关语而闻名。这实际上很常见......在我的脑海中,你有像sh(shell),bsh(Bourne shell),然后是bash(Bourne再次shell)之类的东西......最后一个是蹩脚的双关语...... (7认同)
  • 为什么`fsck` 对我来说总是看起来像一个坏词...我想如果结果呈阳性并且你没有可能合适的备份;) (4认同)

Jon*_*fer 16

取决于你所说的“防止”是什么意思。

(首先,bit-rot 是一个有多种定义的术语。这个问题不是关于由于缺乏维护而导致代码无法运行的问题。)

如果你的意思是“防止”它可能会检测到位衰减的损坏,是的,那会起作用。它将但是不能帮助解决腐败:哈希只提供错误检测,而不是修正

这通常是“完整性”的含义:检测未经授权/意外数据操纵的可能性,而不是防止或纠正它的可能性。

您通常仍然需要 RAID1 和备份(可能使用 ZFS 快照或类似方式实现,我不熟悉 RAID1 + 快照上的 ZFS 语义),原因如下:

  • 如果磁盘发生致命故障,您需要一个 RAID1(或最近的备份)来恢复您的数据;没有纠错可以纠正整个磁盘故障,除非它有数据的完整副本 (RAID1)。对于短暂的停机时间,您基本上必须有 RAID1。

  • 如果您不小心删除了部分或整个存储库,则需要备份(RAID1 不会保护您,因为它会立即反映对所有设备的更改)

但是,本身只有两个磁盘的块级 RAID1(例如通过 LVM 或类似的)不会保护您免受数据的静默衰减:RAID 控制器无法知道两个磁盘中的哪一个保存了正确的数据。为此,您需要其他信息,例如文件校验和。这就是ZSF和BTRFS校验进来:他们可以使用(这是不是说他们在这些情况下使用,我不知道ZFS的btrfs或如何处理事情出现)来区分这两个盘的持有正确的数据。

  • 如果您不想,则无需进行镜像。ZFS 支持使用 1、2 或 3 个驱动器的奇偶校验进行条带化;并使用任意数量的驱动器进行镜像(包括单个驱动器 = 无冗余)。我的主要大容量存储是 ZFS,在 RAIDZ2 配置中有六个驱动器,这基本上是文件系统级别的 RAID6(带两个驱动器的冗余)。这可以检测并从这些驱动器中的任何一个丢失加上无法纠正的错误中恢复;或者在重新同步期间丢失两个驱动器并且其他地方没有错误;没有任何数据丢失。仍然建议备份。 (5认同)