Leí que ZFS y Btrfs usan sumas de verificación para evitar la degradación de datos y leí que Git tiene integridad a través del hashing esencialmente todo con cada confirmación.
Iba a usar un servidor Git en un NAS de Linux con Btrfs RAID 1 para el almacenamiento, pero si Git tiene integridad, supongo que esto no sería necesario (al menos no si lo único que quiero es evitar la degradación de datos).
Pregunta: Entonces, ¿la integridad de Git, aunque elimina todo esencialmente con cada confirmación, previene o ayuda contra la descomposición de bits?
git
zfs
btrfs
data-integrity
MADforFUNandHappy
fuente
fuente
Respuestas:
El hash de Git solo ocurre en el momento en que se crean los commits, y a partir de ahí los hashes se usan para identificar los commits. Esto de ninguna manera garantiza la integridad de los archivos. Los repositorios de Git pueden corromperse y perder datos. De hecho, git tiene un comando incorporado para detectar este tipo de pérdida, git fsck , pero como dice la documentación, usted es responsable de restaurar los datos corruptos de las copias de seguridad.
fuente
fsck
siempre me parece una mala palabra? Supongo que si resulta positivo y no tienes una copia de seguridad que pueda ser apropiada;)Depende de lo que quieras decir con "prevenir".
(En primer lugar, la rotura de bits es un término con múltiples definiciones. Esta pregunta no se trata de que el código no se pueda ejecutar debido a la falta de mantenimiento ).
Si quiere decir "prevenir" que probablemente detectará la corrupción por descomposición de bits, sí, eso funcionará. Sin embargo, no ayudará a corregir esa corrupción: los hash solo proporcionan detección de errores , no corrección .
En general, esto es lo que se entiende por "integridad": la posibilidad de detectar manipulación no autorizada / no intencionada de datos, no la posibilidad de prevenirla o corregirla.
En general, aún querría un RAID1 junto con copias de seguridad (posiblemente implementado con instantáneas ZFS o similares, no estoy familiarizado con la semántica de ZFS en las instantáneas RAID1 +), por varias razones:
si un disco falla fatalmente, necesita un RAID1 (o una copia de seguridad reciente) para restaurar sus datos; ninguna corrección de errores puede corregir la falla de un disco completo, a menos que tenga una copia completa de los datos (RAID1). Para un breve tiempo de inactividad, esencialmente debe tener RAID1.
Si elimina accidentalmente partes o todo el repositorio, necesita una copia de seguridad (RAID1 no lo protege, ya que refleja inmediatamente el cambio en todos los dispositivos)
Sin embargo, RAID1 de nivel de bloque (por ejemplo, a través de LVM o similar) con solo dos discos en sí mismo no lo protegerá contra la descomposición silenciosa de datos: el controlador RAID no puede saber cuál de los dos discos contiene los datos correctos. Necesita información adicional para eso, como una suma de verificación sobre los archivos. Aquí es donde las sumas de comprobación zsf y btrfs vienen en: pueden ser utilizados (lo cual no quiere decir que se utilizan en estos casos, no sé cómo ZFS o btrfs manejan cosas allí) para distinguir cuál de los dos discos tiene Los datos correctos.
fuente
No, no lo hace, de ninguna manera. No hay redundancia similar a RAID introducida por git. Si los archivos en su
.git
directorio sufren una descomposición de bits, perderá cosas como de costumbre.Yyyy ... no No ayuda contra la ocurrencia de pudrición de bits, pero ayudará a detectar la pudrición de bits. Pero en ningún momento durante el uso normal lo hace por su propia cuenta (bueno, obviamente lo hace cuando revisa algunos objetos, etc., pero no para su historial). Tendría que crear trabajos cron para volver a calcular los hash del contenido y compararlos con los hash reales. Es bastante trivial hacerlo, ya que los
git
hashes son literalmente simplemente hashes de contenido, es trivial recalcularlos y logit fsck
hace por usted. Pero cuando detecta la descomposición de bits, no hay nada en particular que pueda hacer en su contra. Específicamente, como los fragmentos más grandes se comprimen automáticamente, es probable que incurra en una pérdida total de fragmentos si se voltea un bit en un objeto más grande.fuente