Проверка большого каталога после копирования с одного жесткого диска на другой

У меня есть файловый сервер, на котором я использую Ubuntu.

Недавно один из моих дисков заполнился, поэтому я получил еще один и бросил его туда.

У меня очень большая папка, размер каталога составляет около 1,7 Т и содержит приличное количество файлов.

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

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

Как конкретно я могу это сделать?

Я просто использовал команду diff :

 diff -rq --no-dereference /path/to/old/drive/ /path/to/new/drive/ 

Это считывает и сравнивает каждый файл в деревьях каталогов и сообщает о любых различиях. Флаг -r сравнивает каталоги рекурсивно, а флаг -q просто печатает сообщение для отображения, когда файлы отличаются – в отличие от печати фактических различий (как и для текстовых файлов). Флаг --no-dereference может быть полезен, если существуют символические ссылки, которые различаются, например, в одном каталоге, символической ссылке и в соответствующем каталоге – копия файла, к которому была привязана.

Если команда diff не выводит результат , это означает, что деревья каталогов действительно идентичны; вы можете запустить echo $? чтобы убедиться, что его статус выхода равен 0 , что указывает на то, что оба набора файлов одинаковы.

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

rsync часто используется для копирования файлов вместо gcp , но его также можно использовать для проверки копии, однако она была сделана. Просто сделайте

 rsync -niaHc /origfolder/ /copyfolder 

Будьте осторожны, чтобы закончить первое имя папки (источник) с помощью / . Возможные варианты:

  • -n не копировать (не вносить никаких изменений)
  • -i рассказать о различиях
  • -a сохранить (т. е. сравнивать, поскольку мы имеем -n ) разрешения, владельцы, символические ссылки и т. д. и рекурсивные каталоги
  • -H сохранить жесткие ссылки
  • -c сравнить контрольные суммы

На выходе показан код с подробным описанием различий для каждого файла или каталога, который отличается. Нет выхода, если они одинаковы. Код имеет столбцы YXcstpoguax где каждый символ является точкой . если этот аспект сравнения в порядке или буква:

 Y is type of update: < sent (not appropriate in this case) > need to copy c missing file or directory h is hard link . no update * and rest of line is a message, eg *deleting X file type: f file d dir L symlink D device S special file c checksum differs. + new item " " same s size differs t timestamp differs p permissions differ o owner differ g group differ u (not used) a acl differ x extended attributes differ 

Например,

 .d..t...... a/b/ directory timestamp differs cL+++++++++ a/b/d -> /nosuch2 symbolic link missing cS+++++++++ a/b/f special file missing (a/b/f is a fifo) >f..t...... a/b/ff file timestamp differs hf a/b/xx1 => a/b/xx files should be a hard linked cLc.t...... a/b/z -> /tmp/hi2 symbolic link to different name cd+++++++++ a/c/ directory missing >f+++++++++ a/c/i.10 missing file needs to be copied 

См. man rsync разделе --itemize-changes для получения более подробной информации. Если у вас есть различия в столбцах 3-го или 4-го, у вас есть серьезное повреждение данных. Другие флаги, такие как разные разрешения, владелец или временные метки, могут быть менее важны для вас. Если все файлы отмечены как «отсутствующие», вы, вероятно, не указали правильные каталоги для сравнения. Если вы уверены, запуск rsync без флага -n «исправит» различия.