Контроль целостности файлов на жестком диске

Аватар пользователя Mimino

Возникла идея как-то контролировать целостность файловых архивов на жестком диске.
Бывает, они лежат годами и портятся, а когда понадобятся - все, бобик сдох.

В Windows есть готовые утилиты - Adinf от Диалог-Наука и чей-то не помню Inspector. Обе платные и не развиваются.

В линуксе тоже есть свои достижения, например, Tripwire, которая большей частью используется на серверах.
Для домашнего компьютера основную функцию контроля можно реализовать гораздо проще, для этого не обязательно писать программу - например, достаточно всего несколько строк на bash.

Идея базируется на формировании контрольной суммы md5 для контролируемых файлов и материализовалась в 2-х вариантах благодаря господам Константину ака ks и Анонима:

By ks:

#!/bin/sh
cd "$1"
PathName=$(basename $(pwd))
cd ..
find "$PathName" -type f -print0 | xargs -0 md5sum > "$PathName".m

By Аноним:

bn="$(basename \"$1\")"
find "$bn" -type f -print0 | xargs -0 md5sum > "$bn.md5"

Эти скрипты создают файл с именем Текущий_каталог.md5 и его нужно запустить один раз либо при существенных изменениях в файловый архивах.

В дальнейшем достаточно будет эпизодически (например, раз в неделю) запускать команду:

md5sum -c --status Текущий_каталог.md5
В случае расхождений в контрольных суммах будет выведено соответствующее сообщение.

Что кто может к ним добавить, усовершенствовать?


PS. 1. Разумеется, обнаружение повреждения файла еще не означает, что он будет исправлен - придется искать его оригинал. Но это все же лучше, чем не знать о состоянии файловых архивов вообще ничего.

2. Есть технология SMART, которая контролирует состояние жесткого диска на аппаратном уровне и даже прогнозирует время выхода его из строя. Есть еще технологии RAID и традиционный Backup в различных вариантах.
Здесь же мы рассматриваем только пример создания скрипта, реализующий проверку файлов.

3. Также существует мнение, что подобное сканирование файлов вызывает ну очень жуткий износ жесткого диска и его скорый выход из строя. Лично я с этим не могу согласиться - последствия слишком преувеличены, imho. В любой многопользовательской системе привод, подвесная система головок всегда находится в активной работе, и если при использовании программ еще каждый раз оглядываться - а что там думает по этому поводу жесткий диск? - то лучше сразу его снять и положить подальше на полку.

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

5. В идеале - исправление изменившихся файлов с помощью корректирующего кода.

Аватар пользователя ks

Re: Контроль целостности файлов на жестком диске

Добавим проверку существования файла контрольных сумм

#!/bin/sh

if [ $# -ne 2]; then
   echo Usage: $(basename "$0") directory file.md5 >&2
   exit 1
fi

if [ -e "$2" ]; then
    echo 'file exists: ' "$2" >&2
    exit 1
fi
cd "$1"
PathName=$(basename $(pwd))
cd ..
find "$PathName" -type f -print0 | xargs -0 md5sum > "$2"

Вызов:
script каталог файл_контрольный_сумм

RSS-материал