Как проверить контрольную сумму и проверить все файлы в файловой системе

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

Такие инструменты, как sha1sum / md5sum, не допускают рекурсивный подход, и я также хотел бы распределить нагрузку, чтобы использовать более одного ядра процессора.

Я пока не чувствую себя в безопасности, помещая свои файлы в BTRFS, и, кроме того, BTRFS еще не работает должным образом на raid5/6, поэтому я ищу "быстрый" способ проверки всех моих файлов и проверки их в любое время. Таким образом, я бы, по крайней мере, знал, не мешало ли какое-либо из моих файлов молчаливое повреждение данных

Существуют ли какие-либо инструменты, предназначенные для этой цели (да, я знаю о SnapRAID)

2 ответа

Эти инструменты предназначены для более или менее этого варианта использования:

http://md5deep.sourceforge.net/

Или вы могли бы написать что-нибудь самостоятельно;) Я написал этот скрипт на Python, объединяя фрагменты других людей из Интернета. Это может быть отправной точкой.

#! / USR / бен / питон

импорт ОС
импорт хешлиб
из joblib импорт параллельный, отложенный
импорт JSON

BASE_DIR = "/ home / p / music"
NUM_PROC = 2
OUT_FILE = "hashes.json"

# список файлов для обработки
file_list = []
для root,dir, файлы в os.walk(BASE_DIR):
    для имени в файлах:
        file_list.append (os.path.join (root, name))


# - вычисление md5sum для одного файла 
def hashOne(f):
    BLOCKSIZE = 65536
    hasher = hashlib.md5()
    с открытым (f, 'rb') как afile:
        печать F
        buf = afile.read(BLOCKSIZE)
        пока len(buf) > 0:
            hasher.update(BUF)
            buf = afile.read(BLOCKSIZE)
    return hasher.hexdigest ()

# параллельное вычисление md5sum    
md5 = Parallel(n_jobs=NUM_PROC)(отложено (hashOne)(f) для f в file_list) 

# создать хэш file_names -> md5sum
out_hash = {}
для меня в диапазоне (len (file_list)):
    out_hash [file_list [i]] = md5 [i]

# записать хеш "имя файла -> md5sum" на диск на будущее 
dump = json.dumps(out_hash)
с открытым (OUT_FILE, "wb") в качестве файла:
    file.write(дамп)

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