Назад | Перейти на главную страницу

Есть ли для Linux универсальный инструмент контрольной суммы файловой системы?

РЕДАКТИРОВАТЬ: прояснить контекст

У меня есть несколько слабо синхронизированных файловых систем на разных машинах. (часть контента избыточна, часть нет, пользователи перемещают вещи вручную). Это большие наборы научных данных (многие десятки терабайт); Они перемещаются по кластерам в зависимости от того, какую работу мы с ними выполняем. У них нет стандартного соглашения об именах (файлы иногда переименовываются в ходе различных экспериментов или когда подмножества файлов выбираются или объединяются).

Я хотел бы найти инструмент, который позволил бы мне эффективно находить избыточность в удаленных файловых системах, чтобы мы могли удалять избыточные данные и копировать неизбыточные данные при декомпозиции блоков хранения. (Боковое примечание: распределенные файловые системы, такие как Ceph, обещают справиться с этими случаями; это будет будущий путь, но теперь мы должны иметь дело с существующей системой как есть)

поскольку многие объекты были перемещены и переименованы вручную, я не могу полагаться на их имена файлов для сравнения с помощью diff или rsync. Я бы предпочел использовать криптографическую контрольную сумму, такую ​​как sha256, для идентификации моих файлов данных.

Я также не хочу проверять контрольную сумму всего набора данных каждый раз, когда запускаю сравнение. После создания файлы вряд ли будут часто меняться, поэтому контрольные суммы следует кэшировать.

Есть ли существующий инструмент для этого? Может быть, что-то, что хранит контрольную сумму в расширенном атрибуте Posix (используя временную метку для проверки актуальности контрольной суммы), и инструмент, который может извлекать эту информацию для эффективного сравнения содержимого файловых систем, не заботясь о именах файлов?

Так как я не нашел инструмента, который делал бы то, что мне нужно, я начал накатывать свой собственный:

http://bitbucket.org/maugier/shatag

--РЕДАКТИРОВАТЬ--

После разработки этого инструмента я узнал о git-приложение это отличается от того, к чему я стремился, но, тем не менее, является идеальным решением.

Я не знаю о контрольной сумме на уровне файловой системы; вы можете написать сценарий (или создать вручную) с помощью md5sum и сохранить его в текстовом файле для сравнения, и есть порты md5sum для нескольких платформ.

Если это большие файлы, вы можете подумать о настройке системы, которая позволяет пользователям дублировать данные с помощью BitTorrent; он имеет встроенный способ контрольной суммы данных, и если у вас есть несколько мест, где хранятся файлы, вы получаете дополнительные преимущества, не загружая одну или две системы передачей данных.

Возможно, вы захотите изменить политику в отношении того, как данные дублируются или перемещаются, если вы управляете системами или данными; это, вероятно, приведет к тому, что вы потеряете меньше волос, если что-то пойдет не так, и ваши пользователи могут поблагодарить вас, если что-то произойдет, и «на этот раз» данные не были поддержаны Бобом в коридоре. Вам не нужно делать ничего слишком сложного, если вы работаете в существующей инфраструктуре; даже пара серверов, на которых периодически запускается rsync по сети (что также было бы относительно быстро, поскольку при передаче по сети он передает только изменения в больших файлах, а не так много, если он считает, что это локальный файл), создаст синхронизированные файлы.

Я бы предупредил, что дублирование подобных файлов и использование контрольных сумм технически не является резервной копией; это дубликат. Резервное копирование означает, что, когда ваш главный файл поврежден, вы можете «откатиться» к предыдущей версии (хотите настроить что-то похожее на CVS для проверки ваших больших файлов данных? ...) при дублировании, даже с контрольными суммами, означает, что если ваш оригинал поврежден (случайное удаление, поврежденный сектор на диске и т. д.), это повреждение будет скопировано с контрольной суммой и всем прочим в ваши дубликаты, что сделает их бесполезными. Вы захотите спланировать этот сценарий.

Возможно, вы можете использовать rsync с параметром --dry-run (-n). Он попытается скопировать (но ничего не сделает), и вы увидите различия. Существует множество вариантов фильтрации (отметки времени, владелец и многое другое), чтобы точно определить, что вы хотите.

Кто-то уже упоминал "rsync".

Если вы можете смонтировать вторую файловую систему на 1-й машине, вы можете попробовать запустить «diff -r / localfs / remotefs» и увидеть различия.

Вы также можете попробовать что-то вроде tripwire или AIDE, чтобы сделать снимок одного дерева и сравнить его с другим.

В зависимости от размера рассматриваемого набора данных вы можете рассмотреть возможность использования git или другой эффективной программы управления версиями для периодического создания «моментальных снимков» (автоматических, автоматических добавлений и фиксации) для отслеживания изменений. Вы даже можете синхронизировать определенные изменения с одного компьютера на другой, используя этот метод, если вы правильно его настроили.

Для дедупликации хорошо работает программа "fdupes".