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

1833
Waxhead

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

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

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

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

0
Как насчет ZFS? Он также доступен в Linux, как я слышал. Я имею в виду, я бы избегал ручных периодических сценариев. Это не очень надежно. Martin Sugioarto 7 лет назад 0
Как насчет `find -f / - exec md5sum {} \; > logfile.md5sum`? и использовать этот файл после? Hastur 7 лет назад 0
@Hastur: В Debian ваша команда не работает. Во всяком случае, это должно выглядеть так: 'find -type f / path / -exec md5sum {} \; > контрольные суммы 'и для проверки вы можете использовать' контрольные суммы md5sum -c | grep ": FAILED"> Сбой контрольной суммы ' Waxhead 7 лет назад 0

2 ответа на вопрос

1
juris

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

http://md5deep.sourceforge.net/

Hashdeep особенно полезен. Спасибо, что поделился! MariusMatutiae 7 лет назад 0
1
Nicola Mingotti

Или вы можете написать что-нибудь самостоятельно;) Я написал этот скрипт на 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 (дамп)  

Похожие вопросы