Существует резервная программа bup
(https://github.com/bup/bup) на основе некоторых идей и некоторых функций от системы управления версиями git
для компактного хранения изображений виртуальной машины.Как сделать резервное копирование изображений на основе байт (на основе git) вычисляет хэши хранящихся объектов
В bup
есть bup ls
субкоманды, который может показать некоторые SHA1-как хэш (тот же длиной гекса) объектов, хранящихся в резервной копии, когда передается -s
варианта (в man bup-ls
есть только "-s, --hash : показать хэш для каждого файла/каталога. "). Но sha1-подобный хеш не равен sha1sum
вывода исходного файла.
Оригинал git
вычисляет SHA1 хэш данных предваряя данные с `сгустка NNN \ 0' строка, где NNN является размер объекта в байтах, записывается в виде десятичной дроби, в соответствии с How does git compute file hashes? и https://stackoverflow.com/a/28881708/
я тестировал префикс` блоба NNN \ 0 'и все еще не такая же сумма sha1.
Что такое метод вычисления хэш-суммы для файлов, используется в bup? Это линейный sha1 или какой-то древовидный вариант, например, деревья Меркле? Что такое хэш каталога?
Источник команды ls
команды bup: https://github.com/bup/bup/blob/master/lib/bup/ls.py, а хеш просто напечатан в шестнадцатеричном формате, но где был создан хеш?
def node_info(n, name,
''' ....
if show_hash:
result += "%s " % n.hash.encode('hex')
Это хэш генерируется на создание резервной копии БУП (когда файл помещается внутрь архива, bup index
+ bup save
команд) и просто распечатать на bup ls
; или он пересчитывается на каждые bup ls
и может использоваться как проверка целостности резервной копии bup?
https://github.com/bup/bup/blob/master/DESIGN – torek
Торека, уже проверил, нет точной информации о хэше вычисление (есть тип sha1, но * не равно sha1sum *) – osgx
bup разделяет файлы-данные на множество файлов, используя описанную там технику. Таким образом, «bup hash» файла не является хэш-файлом git, потому что нет единственного git blob, соответствующего файлу или каталогу, который является bup-save-d. Итак, см. Строки 556-560. Здесь * есть * один объект git * tree * для такого файла и, вероятно, это хэш-код bup. В любом случае целостность всей резервной копии (или даже одного элемента группы в ней) явно не проверяется, не проверяя все базовые объекты git, что требует запуска 'git fsck' или эквивалентного. – torek