Воссоздание каталогов с файлами по хеш-суммам
01.03.2021
|
velkin |
Вопрос к коллективному разуму, кто-нибудь видел проприетарщину, шароварку или опенсорс в виде программы, плагина к программе и так далее и тому подобное со следующим функционалом.
1) У приложения есть виртуальный каталог файлов с размерами и хеш-суммами. Программа проходится по диску и воссоздаёт этот каталог в случае нахождения содержимого.
2) Дополнительный пункт, принцип в первом пункте используется для синхронизации файлов между компьютерами.
1) У приложения есть виртуальный каталог файлов с размерами и хеш-суммами. Программа проходится по диску и воссоздаёт этот каталог в случае нахождения содержимого.
2) Дополнительный пункт, принцип в первом пункте используется для синхронизации файлов между компьютерами.
01.03.2021 13 комментариев |
V>1) У приложения есть виртуальный каталог файлов с размерами и хеш-суммами. Программа проходится по диску и воссоздаёт этот каталог в случае нахождения содержимого.
V>2) Дополнительный пункт, принцип в первом пункте используется для синхронизации файлов между компьютерами.
Напоминает битторрент, однако.
Pzz>Напоминает битторрент, однако.
Да, но он произвольно не ищет файлы по диску , и насколько я знаю хранит хеш-суммы кусочков, а не файлов. Есть ещё Direct Connect, но я не знаю может ли он искать виртуальные каталоги. То есть вопрос в том, видел ли кто-нибудь рабочее решение под заданные условия.
V>Здравствуйте, Pzz, Вы писали:
Pzz>>Напоминает битторрент, однако.
V>Да, но он произвольно не ищет файлы по диску , и насколько я знаю хранит хеш-суммы кусочков, а не файлов.
там merkle tree, дерево хэшей, на его основе можно сильно эффективнее решить твою задачу, вместо того, чтобы счиатать хэш от всего файла — считаешь хэш от первого блока и если совпадает — продолжаешь сравнивать дальше
CK>там merkle tree, дерево хэшей, на его основе можно сильно эффективнее решить твою задачу, вместо того, чтобы счиатать хэш от всего файла — считаешь хэш от первого блока и если совпадает — продолжаешь сравнивать дальше
Насколько понимаю в битторренте все данные каталога это один большой блок, то есть выделить какой-то конкретный файл хеш-суммой, если это торрент каталога, а не одного файла не получится. Но мысль, конечно, интересная, если применить это к каждому файлу. С другой стороны здесь всё же преимущество именно в передаче кусочков по сети, а не в поиске, потому что для поиска достаточно одного полного сканирования. Опять же это если всё это делать самому, но интересны готовые решения.
V>>1) У приложения есть виртуальный каталог файлов с размерами и хеш-суммами. Программа проходится по диску и воссоздаёт этот каталог в случае нахождения содержимого.
V>>2) Дополнительный пункт, принцип в первом пункте используется для синхронизации файлов между компьютерами.
Pzz>Напоминает битторрент, однако.
Согласен. .torrent-файл это по сути и есть описание каталога файлов с размерами и хеш-суммами (причём поблочно). Поиска на диске, правда, я не видел, но по сути любому клиенту можно указать нужный каталог и он там проверит, что все файлы соответствуют заданным хеш-суммам и докачает недостающее или несовпадающее.
C>git ?
Git хранит файлы внутри папки .git, а если их нет, если они валяются где-то в другом месте. Тогда нужен сценарий использования, как осуществить поиск и воссоздание каталога.
git умеет
--bare
V>>Git хранит файлы внутри папки .git, а если их нет, если они валяются где-то в другом месте. Тогда нужен сценарий использования, как осуществить поиск и воссоздание каталога.
C>git умеет
C>--bare
Насколько помню когда-то использовал --bare на собственном сервере git.
4.4 Git на сервере Настраиваем сервер
Пока что непонятно как это может помочь.
V>1) У приложения есть виртуальный каталог файлов с размерами и хеш-суммами. Программа проходится по диску и воссоздаёт этот каталог в случае нахождения содержимого.
А что такое "виртуальный каталог файлов с размерами и хеш-суммами"?
Делал похожее для себя, складывал размеры и хэши в БД — для дальнейшего анализа.
Б>А что такое "виртуальный каталог файлов с размерами и хеш-суммами"?
Это путь+размер+хеш-суммы(md5,sha1,...).
Например, сканируем каталог:
Чтобы потом можно его воссоздавать, даже если файлы были перемещены в произвольные места диска. Конечно, не хотелось бы совсем примитивный функционал, лучше что-то глобальное для управление на множестве компьютеров. Просто мне в голову ничего особо функционального не идёт или я не знаю правильного сценария использования.
В такой постановке задача полностью решена протоколом BitTorrent. Реальная сложность, это:
Синхронизация удаления всего файла: удалить везде или только на одной машине?
Синхронизация одновременных изменений в разных частях файла.
Синхронизация изменений на уровне файловой системы.
За адекватный, распределённый, не жрущий ресурсы сервис синхронизации я бы заплатил.
C>В такой постановке задача полностью решена протоколом BitTorrent.
В торренте нет поиска по диску, потому я храню данные вместе с торрент файлом в общем каталоге:
C>Реальная сложность, это:
C>Синхронизация удаления всего файла: удалить везде или только на одной машине?
C>Синхронизация одновременных изменений в разных частях файла.
C>Синхронизация изменений на уровне файловой системы.
Для синхронизации мне вспоминаются программы вроде rsync для односторонней синхронизации или syncthing для двусторонней. В комментариях ещё упоминали git, для больших файлов есть проект git-annex. Но всё вышеупомянутое срабатывает не так как нужно по крайне мере у меня.
Из каталогизаторов есть WhereIsIt и WinCatalog, но делают ли они заявленное без понятия. Вроде бы нет, хотя я особо и не смотрел. Если кто знает, пусть напишет.
Что ещё? Распределённые сети обмена данными BitTorrent, DirectConnect и так далее.
Или DropBox как пример файлового хостинга, но его возможности кроме простой закачки и скачки мне неизвестны.
Может ли какой-то файловый менеджер достичь нужной функциональности за счёт плагинов тоже без понятия.
C>За адекватный, распределённый, не жрущий ресурсы сервис синхронизации я бы заплатил.
Мне это представляется таким образом. На каждый компьютер ставится агент, обычно так называют приложение или службу. И он в частности может выглядеть как файловый менеджер. Но в отличие от него имеет базу данных с виртуальными каталогами, термин взят из каталогизаторов файлов упомянутых выше.
Именно эта база данных и синхронизируется между агентами. Сами же файлы при перестроении каталогов берутся с более приоритетных ресурсов, таких как диски и только потом интернет. Опознаются с помощью размеров, хеш-сум. Конечно, хотелось бы ещё иметь контроль повреждений, восстановление и прочее.
Вот такого функционала я и не вижу, потому и задал вопрос.