Git是否可以防止数据降级


40

我读到ZFS和Btrfs使用校验和来防止数据降级,并且我读到Git通过对每次提交基本上散列所有内容而具有完整性。

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

问题: Git的完整性通过每次提交基本上散列了所有内容,是否可以防止或帮助防止位腐烂?



3
并且要提防本地克隆,当您在同一文件系统上创建克隆时,git会尝试使用硬链接。这使得克隆变得非常快,但是如果一个对象损坏,则两个克隆都将损坏。
allo

请注意,如果损坏仅发生在给定机器上的某些古老对象上,则这些对象更有可能出现在存储库的其他克隆中,而(较少)更新的文件可能仍然可用。我不知道如何与打包文件集成。
o11c

Answers:


61

Git的哈希仅在创建提交时发生,并从那里开始使用散列来标识提交。这绝不能确保文件的完整性。Git仓库可能会损坏并丢失数据。实际上,git有一个内置命令来检测这种丢失,即git fsck,但是正如文档所述,您有责任从备份中还原所有损坏的数据。


4
为什么fsck对我来说总是看起来像个坏话...我想如果结果是肯定的,尽管您没有一个合适的备份;)
CAD97

7
@ CAD97程序员以这些相对la脚的双关语而闻名。实际上这很普遍...在我的头顶上,您有sh(shell),bsh(Bourne shell),然后是bash(Bourne再次shell)...最后一个是la脚的双关语...
尼尔森

1
@Nelson不要忘记鱼
user253751 '17

@ CAD97地狱,可以这样考虑git本身的名称,即当它不适合您时。
SGR

1
@ CAD97-那是在使用诸如fvcctk之类的标志运行它之前-因为-如果您正在那样运行,则您的数据可能已经被“ fvcctk”存储了。;)
乔(Joe

16

取决于您所说的“预防”。

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

如果您用“预防”的意思是说它很可能会检测到由于位衰变而引起的损坏,那将是可行的。它将但是不能帮助解决腐败:哈希只提供错误检测,而不是修正

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

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

  • 如果磁盘发生致命故障,则需要RAID1(或最近的备份)来还原数据。除非它具有数据的完整副本(RAID1),否则任何纠错都无法纠正整个磁盘故障。对于短时间的停机,您基本上必须具有RAID1。

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

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


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

1

防止位腐烂

不,完全没有。git没有引入类似RAID的冗余。如果目录中的.git文件发生位腐烂,您将像往常一样丢失东西。

帮助防止腐烂?

是的...不。它无助于防止发生位腐烂,但有助于检测到位腐烂。但是在正常使用期间,它绝不会通过自己的帐户来这样做(很显然,当您签出某些对象等等时,它确实会这样做,但不是出于您的历史记录)。您将必须创建cron作业,以根据内容重新计算哈希并将它们与实际哈希进行比较。这样做很琐碎,因为git散列实际上只是内容散列,重新计算它们并git fsck为您这样做很简单。但是,当它检测到位腐烂时,就没有特别的措施可以对抗它。具体来说,由于较大的块会自动压缩,因此如果翻转较大的对象中的某个位,您很可能会导致全部块丢失。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.