Назад | Перейти на главную страницу

Учитывая исходную и резервную файловую систему, как я могу узнать, отсутствуют ли какие-либо файлы?

Я нашел из это сообщение в Stackoverflow, если вы просто хотите получить список соответствующих файлов, содержимое которых отличается, вы можете выполнить:

diff  --brief --recursive dir1/ dir2/

... и, попробовав это сам, получился небольшой список файлов, содержимое которых отличается.

Но если я сделал резервную копию исходной файловой системы (предположим, что файловая система БОЛЬШОЙ, например, 2 ТБ), и я хотел проверить, совпадает ли резервная копия с оригиналом (например, я хочу проверить, успешно ли выполнено резервное копирование), что я должен бежать, если меня интересует только то, какие файлы НЕ доступны с обеих сторон? Я хочу что-то, что проверяет деревья каталогов БЫСТРО (без проверки содержимого).

Хотя сравнение размера файла не дает абсолютного указания на то, является ли файл резервной копии другим, сравнение этих и других метаданных, не относящихся к файлу, во время команды сравнения может помочь.

(Приношу свои извинения за повторную публикацию очень похожего вопроса, но я заметил, что пользователь утверждал, что вопрос, возможно, не по теме, поэтому этот вопрос определенно будет в stackoverflow.)

Есть опыт по этому поводу?

Вы не говорите нам, какое решение для резервного копирования вы используете, но почти все настоящие программы резервного копирования имеют режим «проверки». («Настоящим» инструментом резервного копирования в данном контексте является что-то вроде Bacula, программное обеспечение, специально разработанное для резервного копирования и восстановления).
При прочих равных я бы предложил использовать реальное программное обеспечение для резервного копирования и его встроенные инструменты проверки.


При прочих равных условиях, rsync -nav --delete <backup> <original> было бы моим предложением.
это делает проверьте содержимое и сообщит вам о дополнительных файлах, различных файлах и недостающих файлах. Это не так глубоко (медленно), как diff, а -n означает, что он фактически не коснется файловой системы.

Решение без поддержки rsync, которое проверяет время модификации и размер файла:

diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'

Пример вывода:

> bar Sat Sep 14 11:52:33.0544384394 2013 91
< foo Fri Sep 13 17:58:21.0213671425 2013 445
> foo Sun Sep  8 23:01:02.0355432619 2013 347

Показывает, что foo был изменен в dir1 и bar существует только в dir2.

В результате ответов, приведенных выше, я придумал следующий небольшой сценарий, которым хотел поделиться:

# vi /bin/checkbackup

#!/bin/bash
echo "1/5: Checking source files..."
find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp
echo "2/5: Comparing destination files..."
find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp
echo "3/5: Checking source directories..."
find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp
echo "4/5: Comparing destination directories..."
find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp
echo "5/5: Cleaning up"
rm -f ~/.checkbackup_files.tmp
rm -f ~/.checkbackup_dirs.tmp

# chmod 755 /bin/checkbackup

Использование:

$ checkbackup /path/to/dir1 /path/to/dir2

Отсутствие отчетов означает, что структура и имена папок совпадают, а файлы имеют одинаковый размер и одинаковые имена, без каких-либо пропусков.

Протестировано на деревьях каталогов 1,5 ТБ на дисках SATA2 5400 об / мин, время завершения составляет примерно 5 минут.

Этот сценарий никоим образом не закончен, несомненно, есть другие, более качественные, быстрые и более подробные инструменты с большим количеством проверочных инструментов. Но я думал, что все равно поделюсь им.