Чи запобігає Git деградація даних


40

Я читав, що ZFS і Btrfs використовують контрольні суми для запобігання деградації даних, і я читаю, що Git має цілісність через хешування, по суті, все з кожним комітом.

Я збирався використовувати сервер Git на Linux NAS з Btrfs RAID 1 для зберігання, але якщо Git має цілісність, я думаю, це не буде необхідним (принаймні, не, якщо запобігання деградації даних - все, що я хочу).

Питання: Тож цілісність Git, хоча хеширование, по суті, все, що стосується кожного комітету, запобігає або допомагає проти біт-гнилі?



3
І остерігайтеся локальних клонів, git намагається використовувати жорсткі посилання, коли ви створюєте клон у тій же файловій системі. Це робить клонування неймовірним швидко, але якщо один предмет пошкоджується, обидва клони пошкоджуються.
алло

Зауважте, що якщо пошкодження трапляються лише для деяких старовинних об'єктів на даній машині, ці об'єкти, швидше за все, будуть присутні в інших клонах репо, тоді як (менша кількість) новіших файлів все ще може бути корисною. Я навіть не маю уявлення, як це інтегрується з файлами пакету.
o11c

Відповіді:


61

Хеширование Git відбувається лише тоді, коли створюються коміти, і звідти хеши використовуються для ідентифікації комітетів. Це жодним чином не забезпечує цілісність файлів. Репост Git може зіпсуватися та втратити дані. Насправді, у git є вбудована команда для виявлення подібних втрат, git fsck , але, як йдеться в документації, ви несете відповідальність за відновлення пошкоджених даних із резервних копій.


4
Чому fsckдля мене це завжди виглядає поганим словом ... Я гадаю, якщо виявляється позитивним, і у вас немає резервної копії, яка, можливо,
підійде

7
@ CAD97 Програмісти відомі цими відносно кульгавими каламбурами. Насправді це досить часто ... На моїй голові у вас є такі речі, як sh (оболонка), bsh (оболонка Bourne), а потім bash (Bourne again shell) ... останній - кульгавий каламбур ...
Нельсон

1
@Nelson не забудьте рибу
користувач253751

@ CAD97 Чорт, саме ім'я git можна вважати таким, як тоді, коли воно не працює для вас.
СГР

1
@ CAD97 - і це перед тим, як запустити його з прапорцями, як fvcctk, - тому що - якщо ви працюєте таким чином, ваші дані вже можуть бути "fvcctk" ed. ;)
Джо

16

Залежить від того, що ви маєте на увазі під «запобіганням».

(Перш за все, біт-гниль - це термін з декількома визначеннями. Це питання не стосується того, щоб код не вирішився через відсутність технічного обслуговування .)

Якщо ви маєте на увазі під "запобіганням", що це, ймовірно, виявить корупцію шляхом занепаду бітів, так, це спрацює. Це , однак , НЕ допоможе виправити цю корупцію: хеші тільки забезпечують помилки виявлення, а НЕ корекції .

Це, як правило, мається на увазі під "цілісністю": Можливість виявлення несанкціонованого / ненавмисного маніпулювання даними, а не можливість їх запобігання чи виправлення.

Як правило, ви все ще хочете мати RAID1 разом із резервними копіями (можливо, реалізовані з знімками ZFS або подібними, я не знайомий із семантикою ZFS на RAID1 + знімках) з кількох причин:

  • якщо диск виходить з ладу фатально, для відновлення даних вам потрібен або RAID1 (або нещодавнє резервне копіювання); жодне виправлення помилок не може виправити помилку цілого диска, якщо на ньому немає повної копії даних (RAID1). На короткий час простою ви, по суті, повинні мати RAID1.

  • якщо ви випадково видалили частини або все сховище, вам потрібна резервна копія (RAID1 не захищає вас, оскільки він негайно відображає зміни на всіх пристроях)

Блоковий рівень RAID1 (наприклад, через LVM або подібний) із лише двома дисками сам по собі не захистить вас від тихого розпаду даних, хоча контролер RAID не може знати, який з двох дисків містить правильні дані. Для цього вам потрібна додаткова інформація, як контрольна сума над файлами. Це де ZSF і Btrfs контрольні суми бувають: вони можуть бути використані (що не означає , що вони будуть використані в цих випадках, я не знаю , як ZFS або Btrfs обробляти речі там) , щоб визначити , який з двох дисків має правильні дані.


5
Не потрібно рухатися з дзеркальним відображенням, якщо ви цього не хочете. ZFS підтримує стриптиз з парністю 1, 2 або 3; і дзеркальне відображення з довільною кількістю накопичувачів (включаючи один привід = відсутність надмірності). Моє основне об'ємне сховище - це ZFS з шістьма накопичувачами в конфігурації RAIDZ2, який, в основному, є файловим системним рівнем RAID6 (смугастий з двома накопичувачами варто надмірності). Це може виявити та відновити втрату будь-якого з цих накопичувачів плюс непоправні помилки на ще одному; або втрата двох приводів і відсутність помилок в іншому місці під час перезавантаження; без втрати даних. Резервне копіювання все ж рекомендується.
CVn

1

запобігання біт-гнилі

Ні, це ні, ні в якому разі. Не існує RAID-подібної надмірності, введеної git. Якщо файли у вашому .gitкаталозі зазнають біт-гнилі, ви втратите речі так само, як зазвичай.

допомога проти біт-гнилі?

Yyyy ... ні. Це не допомагає проти виникнення біт-гнилі, але допоможе виявити біт-гниль. Але в жодному разі під час звичайного використання це не робиться за власний рахунок (очевидно, що це відбувається, коли ви перевіряєте деякі об'єкти тощо), але не для своєї історії). Вам доведеться створити завдання cron, щоб перерахувати хеші зі вмісту та порівняти їх із фактичними хешами. Це досить тривіально, тому що gitхеші - це буквально просто хеш-контент, тривіально перерахувати їх і зробити git fsckце для вас. Але коли він виявляє біт-гниль, то нічого, зокрема, не може зробити проти цього. Зокрема, оскільки більші шматки автоматично стискаються, ви, швидше за все, понесете загальні втрати, якщо біт у більшому об'єкті перевернеться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.