Как проверить контрольную сумму и проверить все файлы в файловой системе
Я хотел бы запускать 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(дамп)