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

РЕДАКТИРОВАТЬ: уточнить контекст

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

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

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

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

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

4 ответа

Решение

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

http://bitbucket.org/maugier/shatag

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам