Перевірте правильність скопійованих файлів


14

Після того, як я скопіюю скажімо 50+ ГБ (30 000 файлів, включаючи різні формати) файлів з внутрішнього жорсткого диска на зовнішній диск, чи є спосіб виявити, чи все скопійовано правильно? Крім того, якщо я зупинюся між ними, скасувавши операцію і пізніше скажу об'єднатись, коли продовжувати операцію, правильність спричинить удар?

Я можу використовувати такі програми, як back-in-timeя, але я дуже вибагливий при копіюванні файлів, і наступного разу я маю намір використовувати copyоперацію і сказати mergeзамість цього replace. Чи доцільно при копіюванні великої кількості файлів?


2
Ви можете знайти відповідь тут .
Таккат

Відповіді:


17

Я використовую hashdeep для перевірки резервного копіювання / відновлення та періодично для перевірки наявності файлової системи в RAID.

Швидкість залежить від того, які хеш-функції ви використовуєте (деякі інтенсивніше процесора, ніж інші), а також швидкості читання ваших дисків. У моїй системі hashdeepможна обробити або перевірити близько 1 ТБ / годину зі швидкістю читання md5 і 300 Мб / с.


Приклад обчислення контрольних сум і збереження їх у файлі:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

Параметри:

  • r - рекурсивний
  • l - використовувати відносні шляхи
  • c - вказати хеш-функцію
  • . - рекурсивний, починаючи з поточного каталогу
  • > - вихід переадресації у вказаний файл

Дивіться сторінку чоловіка .


Приклад перевірки контрольних сум та друку списку відмінностей:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

Параметри:

  • a - аудит (порівняйте зі списком відомих контрольних сум)
  • v- багатослівний (щоб отримати список невідповідностей, декілька vs означає більше дослідних)
  • k - файл відомих хешів

Зауважте, що станом на березень 2016 року, hashdeepздається, це покинуто .


14

Це виглядає як ідеальне завдання для rsync . Rsync порівнює, а копіювання відрізняється.

rsyncУтиліта першою прийшла мені в голову , коли я побачив ваше запитання. Виконання чогось подібного нижче може швидко показати, які файли знаходяться в каталозі, aа не в b:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Це хороший варіант, оскільки ви можете порівняти вміст файлів, щоб переконатися, що вони відповідають. rsyncалгоритм дельти оптимізований для цього типу використання. Тоді, якщо ви хочете, щоб вони bвідповідали вмісту a, ви можете просто видалити -nпараметр для виконання фактичної синхронізації.

Деякі пов'язані питання:


1
rsync - це, безумовно, інструмент для цієї роботи, але вона сама по собі не порівнює та не копіює. Він порівнює файли, використовуючи розміри та хеші.
Джастін Форс

@JustinForce Використовуючи розмір? Звичайно, різний розмір гарантує, що файл не зовсім однаковий, але rsync дуже універсальний, він може додатково довіряти метаданим (як час), щоб уникнути повторного читання всіх файлів. Під час копіювання через мережу він обчислює хеш-котинг для тонкого виявлення загальних частин, щоб уникнути їх передачі, але на локальному диску за замовчуванням хеші не грають цієї ролі (якщо вони взагалі використовуються). Ви можете навіть попросити його довіритися, що коротший пункт призначення вже має правильний вміст і його просто потрібно додати, хоча зупинимось на темі.
Стефан Гурішон


3

Ситуація, про яку ви говорите, занадто складна. Хоча ви можете написати сценарій, щоб обчислити MD5 всіх файлів, які ви хочете скопіювати, а потім порівняти їх із скопійованими файлами:

Якщо ви хочете чогось простого і швидкого (це не спрацює в дуже складних сценаріях), ви можете використовувати Meld

sudo apt-get install meld

0

У розділі "якщо все було скопійовано правильно", я використовую модифікований cp (або mv), який включає контрольну суму (необов'язково зберігається в xattr, отже, вона повинна бути обчислена лише один раз для джерела) http://sourceforge.net/projects / crcsum /


1
Хоча ваша відповідь на 100% правильна, початковому користувачеві це також практично неможливо реалізувати. Тому, будь ласка, відредагуйте свою відповідь та включіть у свою відповідь кроки щодо завантаження, компіляції, встановлення та видалення crccp! ;-) Ви завжди можете залишити посилання внизу вашої відповіді як джерело для свого матеріалу ...
Fabby
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.