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

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

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

diff  --brief --recursive dir1/ dir2/

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

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

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

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

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

решение1

Решение без 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.

решение2

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


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

решение3

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

# 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 минут.

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

Связанный контент