Как проверить контрольную сумму и проверить все файлы в файловой системе
Я хотел бы запускать sha1sum или md5sum для всех моих файлов рекурсивно, сохранять результаты в файл (или пару файлов), а затем снова иметь возможность сканировать файлы для проверки целостности файлов.
Такие инструменты, как sha1sum / md5sum, не допускают рекурсивный подход, и я также хотел бы распределить нагрузку, чтобы использовать более одного ядра процессора.
Я пока не чувствую себя в безопасности, помещая свои файлы в BTRFS, и, кроме того, BTRFS еще не работает должным образом на raid5/6, поэтому я ищу "быстрый" способ проверки всех моих файлов и проверки их в любое время. Таким образом, я бы, по крайней мере, знал, не мешало ли какое-либо из моих файлов молчаливое повреждение данных
Существуют ли какие-либо инструменты, предназначенные для этой цели (да, я знаю о SnapRAID)
2 ответа
Эти инструменты предназначены для более или менее этого варианта использования:
Или вы могли бы написать что-нибудь самостоятельно;) Я написал этот скрипт на 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(дамп)