Я часто передаю образы виртуальных машин с гипервизоров на архивный сервер для длительного хранения.
Я перевожу с помощью netcat, так как он быстрее, чем scp, rsync и т. Д.
hypervisor$ cat foo.box | nc <archive IP> 1234
archive$ nc -l -p 1234 > foo.box
Когда файл завершил передачу, я проверяю, что не было никакого повреждения, запустив md5sum
и на цели и на источнике.
К сожалению, запуск md5sum для большого файла может занять очень много времени. Как можно быстрее сравнить целостность двух больших файлов?
Обновить:
- Моя передача редко прерывается, поэтому перезапуск не является проблемой.
- Обычно для передачи через NC требуется 3-4 часа, а затем для получения md5sum - 40 минут.
- Безопасность хеша не является проблемой в этом случае.
Ответы:
Вы можете использовать tee для суммирования на лету с чем-то вроде этого (адаптируйте команды netcat для своих нужд):
Сервер:
Клиент:
источник
md5deep
есть режим "chunk" ( md5deep.sourceforge.net/md5deep.html ), который может быть полезен для этого.Ответ Nerdwaller об использовании
tee
одновременной передачи и вычисления контрольной суммы является хорошим подходом, если вы в первую очередь беспокоитесь о коррупции в сети. Однако он не защитит вас от повреждения на пути к диску и т. Д., Поскольку он принимает контрольную сумму перед тем, как попасть на диск.Но я бы хотел кое-что добавить:
1 ТиБ / 40 минут ≈ 437 МБ / с 1 .
Это довольно быстро, на самом деле. Помните, что если у вас нет много оперативной памяти, это должно вернуться из хранилища. Поэтому первое, что нужно проверить, это посмотреть,
iostat -kx 10
как вы запускаете свои контрольные суммы; в частности вы хотите обратить внимание на%util
колонку. Если вы привязываете диски (около 100%), то ответ заключается в том, чтобы купить более быстрое хранилище.В противном случае, как упоминалось в других постерах, вы можете попробовать разные алгоритмы контрольной суммы. MD4, MD5 и SHA-1 спроектированы как криптографические хеши (хотя ни один из них больше не должен использоваться для этой цели; все они считаются слишком слабыми). Скорость мудрая, вы можете сравнить их с
openssl speed md4 md5 sha1 sha256
. Я добавил в SHA256 хотя бы один достаточно сильный хеш.Из вышесказанного видно, что MD4 самый быстрый, а SHA256 самый медленный. По крайней мере, этот результат типичен для ПК-подобного оборудования.
Если вы хотите еще большей производительности (за счет тривиального вмешательства, а также с меньшей вероятностью обнаружения коррупции), вам нужно взглянуть на хэш CRC или Adler. Адлер, как правило, быстрее, но слабее. К сожалению, я не знаю каких-либо действительно быстрых реализаций командной строки; все программы в моей системе работают медленнее, чем md4 в OpenSSL.
Таким образом, ваша лучшая ставка по скорости
openssl md4 -r
(-r
это выглядит как вывод md5sum).Если вы хотите выполнить некоторую компиляцию и / или минимальное программирование, посмотрите код Марка Адлера в Stack Overflow, а также xxhash . Если у вас SSE 4.2, вы не сможете побить скорость аппаратной инструкции CRC.
11 TiB = 1024 байта; 1 МиБ = 1024² байт. Достигается до ≈417 МБ / с при энергопотреблении 1000 единиц.
источник
shasum
вместо этого?Команда
openssl
поддерживает несколько дайджестов сообщений. Из тех, которые я смог попробовать,md4
кажется, работает примерно в 65% времениmd5
и примерно в 54% времениsha1
(для одного файла, с которым я тестировал).Там также есть
md2
в документации, но, похоже, дает те же результаты, что иmd5
.Грубо говоря, скорость, похоже, обратно связана с качеством, но, поскольку вы (вероятно) не обеспокоены тем, что противник создает преднамеренное столкновение, это не должно быть большой проблемой.
Вы могли бы посмотреть на старые и более простые дайджесты сообщений (был ли
md1
, например)?Незначительный момент: у вас бесполезное использование
cat
. Скорее, чем:вы можете использовать:
или даже:
Это экономит процесс, но, вероятно, не окажет существенного влияния на производительность.
источник
cat
», следовательно, не обязательно плохо. Если вы не избежите выигрыша в производительности, лучше пойти с тем, что вам удобнее, если вы будете поддерживать этот код.Два варианта:
использование
sha1sum
В некоторых случаях sha1sum быстрее .
использование
rsync
Передача займет больше времени, но rsync проверяет, что файл прибыл без изменений.
Со страницы руководства rsync
источник
Наука прогрессирует. Похоже, что новая хеш-функция BLAKE2 работает быстрее, чем MD5 (и криптографически намного сильнее для загрузки).
Ссылка: https://leastauthority.com/blog/BLAKE2-harder-better-faster-stronger-than-MD5.html
Из слайдов Зуко:
источник
Вы, вероятно, не можете сделать ничего лучше, чем хороший хэш. Возможно, вы захотите проверить другие функции хэш / контрольной суммы, чтобы увидеть, являются ли какие-либо значительно быстрее, чем
md5sum
. Обратите внимание, что вам может не понадобиться что-то столь же сильное, как MD5. MD5 (и такие вещи, как SHA1) предназначены для криптографической защиты, поэтому злоумышленнику / самозванцу невозможно создать новый файл, который имеет такое же значение хеш-функции, что и существующее значение (т. Е. Усложнить подделку со знаком e -почта и другие документы). Если вас не беспокоит атака на ваши коммуникации, а только обычная ошибка связи, может быть достаточно что-то вроде проверки циклическим избыточным кодом (CRC). (Но я не знаю, будет ли это быстрее.)Другой подход - попытаться сделать хеш параллельно с передачей. Это может сократить общее время и определенно уменьшить фактор раздражения, связанный с необходимостью ждать окончания передачи, а затем снова ждать завершения MD5. Я не проверял это, но должно быть возможно сделать что-то вроде этого:
На исходном компьютере:
На машине назначения:
Конечно, проверка размеров файлов - это хороший и быстрый способ определить, были ли сброшены какие-либо байты.
источник
Отправка огромных файлов - это боль. Почему бы не попробовать разбить файлы на части, генерирующие хеш для каждого чанка, а затем отправить его в место назначения, а затем проверить хеш и объединить чанки.
Вы также можете настроить персональную сеть BitTorrent. Это гарантировало бы, что все это безопасно.
источник