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

Почему я получаю разные контрольные суммы SHA-1 для tar одинаковых резервных копий mongodump?

Я пытаюсь создать резервную копию своей базы данных MongoDB и проверить наличие изменений с помощью контрольной суммы SHA-1. Проблема в том, что контрольная сумма не та.

$ mongodump --quiet --db backup --out .
$ tar -cf backup1.tar backup
$ rm -r backup
$ sha1sum backup1.tar
d9519a5183fb797639af583738e292527c667420  backup1.tar

$ mongodump --quiet --db backup --out .
$ tar -cf backup2.tar backup
$ rm -r backup
$ sha1sum backup2.tar
f5c9e3e99e857a88052e9121a9eca61c40909c07  backup2.tar

Я уверен, что база данных не обновлялась:

$ mongodump --quiet --db backup --out b1
$ mongodump --quiet --db backup --out b2
$ diff -r b1 b2

Эта проблема не относится к MongoDB. Как и большинство программ для архивирования файлов, tar формат магазинов метаданные об архивных файлах включая отметки времени. Если вы делаете резервную копию базы данных в два разных раза, содержимое резервной копии будет идентичным, а метаданные - нет.

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

 mongodump --quiet --db backup --out .
 sha1sum backup/* > backup/sha1.txt
 tar -cf backup.tar backup

Затем вы можете сравнить файлы контрольной суммы, чтобы определить, имеют ли две резервные копии одинаковые данные:

$ diff -q backup/sha1.txt backup2/sha1.txt
Files backup/sha1.txt and backup2/sha1.txt differ

С помощью индивидуальных контрольных сумм вы также можете увидеть, какие именно файлы были изменены:

$ diff backup/sha1.txt backup2/sha1.txt
3,4c3,4
< b8e37a70f4dd7a8265a9e030edec1251224957dc  backup/bacon.bson
< 9fabdb53acb5d3261fa973325c52abdd5cade6ff  backup/bacon.metadata.json
---
> 96d6e9de8885e3f24a98148f8b8630b843882c4e  backup/bacon.bson
> a3cd2cfe5b088c2033eb5e292fcbf8b39be65727  backup/bacon.metadata.json