MD5
Moderators: Korney San, Qwertiy, marcipan, igelizm
-
- Гуру
- Posts: 175
- Joined: 16 Jun 2007, 8:56 Sat
... у вас имеется 4 сервера, 5 программистов (у меня такие сведения или догадки) и популярный менеджер закачек в некоторой географической зоне. MD5 сегодня не отдаёт ни один из серверов, по крайней мере я о таких не слышал и не знаю, но не хотели бы вы исправить это, осуществив это для ваших серверов и DM`а, для этого необходимо написать скрипт или програмку, которая по запросу DM`а будет модсчитывать MD5-хэш, заданного ссылкой, файла на вашем сервере и возвращать его DM`у, т.о пользователь сможет заранее узнать контрольную сумму интересующего его файла, без его предварительного полного скачивания. После того как данная возможность будет разрекламирована (за вас это запросто сделают пользователи DM`а, главное чтобы они о ней знали), ч.з некоторое время появятся и др. сервера с такой возможностью - это станет нормой, а вы первооткрывателями данной возможности.
-
- Гуру
- Posts: 175
- Joined: 16 Jun 2007, 8:56 Sat
Я в Linux'е с помощью rsync востановил битые файлы (которые DM повредил в процесе скачивания), быстро и с минимальной потерей трафика!
rsync — это программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
rsync — это программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
Кстати есть программы, например Orbit Downloader, который может просматривать содержимое ZIP-файла до его скачивания! Если учесть что архиватором можно открывать "iso" образы, то можно заставить просматривать архивы и образы дисков тоже! А если можно просматривать файлы не скачивая их, можно посмотреть размер кажного файла в архиве и увидеть где именно нарушена структура файла!
Про rsync я ничего не знаю, но насколько я понимаю по вашему описанию это не совсем "то". Узнать содержимое файла имея только его размер и контрольную сумму - нельзя. Для того, чтобы воссановить битый файл с минимизацией нагрузки на трафик, нужно иметь целый файл, и делать это например так:
1) сравнить размеры файлов и при несовпадении размеров у битого файла восстановить правильный размер;
2) условно поделить файл на кусочки заданного размера (чем меньше кусочки тем меньше полезная нагрузка на трафик и больше служебная нагрузка и наоборот);
3) подсчитать контрольные суммы каждого кусочка в отдельности (обоих файлов);
4) передать набор контрольных сумм на сервер (на нём хранится целый файл);
5) сервер сравнивает 2 набора контрольных сумм и выявляет не совпадающие пары сумм (участки файлов);
6) сервер начинает отправку тех участков файла, контрольная сумма которых не совпала, а клиентский компьютер, естественно, эти участки файлов принимает и записывает в резервную копию битого файла;
7) после окончания передачи восстановленных участков файла резервная копия должна стать целой, т.е рабочей с восстановленным содержимым.
От сюда видно, что для этого нужны компьютерные мощности, которых у разнаботчиков нет. К тому же эта процедура, как и процедура, описанная мной в 3-м посте будет поддерживаться только серверами, пренадлежащими разработчикам DM`а, по крайней мере по началу (имею ввиду Win-серверы, поскольку вы говорите, что в *nix это уже есть).
1) сравнить размеры файлов и при несовпадении размеров у битого файла восстановить правильный размер;
2) условно поделить файл на кусочки заданного размера (чем меньше кусочки тем меньше полезная нагрузка на трафик и больше служебная нагрузка и наоборот);
3) подсчитать контрольные суммы каждого кусочка в отдельности (обоих файлов);
4) передать набор контрольных сумм на сервер (на нём хранится целый файл);
5) сервер сравнивает 2 набора контрольных сумм и выявляет не совпадающие пары сумм (участки файлов);
6) сервер начинает отправку тех участков файла, контрольная сумма которых не совпала, а клиентский компьютер, естественно, эти участки файлов принимает и записывает в резервную копию битого файла;
7) после окончания передачи восстановленных участков файла резервная копия должна стать целой, т.е рабочей с восстановленным содержимым.
От сюда видно, что для этого нужны компьютерные мощности, которых у разнаботчиков нет. К тому же эта процедура, как и процедура, описанная мной в 3-м посте будет поддерживаться только серверами, пренадлежащими разработчикам DM`а, по крайней мере по началу (имею ввиду Win-серверы, поскольку вы говорите, что в *nix это уже есть).
Last edited by x2088 on 02 Feb 2008, 13:12 Sat, edited 1 time in total.
И DM то же это делать умеет. А для всего остального можно на сервере поставить архиватор, который по запросу DM`а открывал бы заданный файл, считывал его содержимое и передавал запрашиваемому содержимое данного архива. Для экономии ресурсов после первого открытия архива производить индексацию содержимого архива. Для этого так же нужны компьютерные мощности.VLAD.V wrote:Кстати есть программы, например Orbit Downloader, который может просматривать содержимое ZIP-файла до его скачивания! Если учесть что архиватором можно открывать "iso" образы, то можно заставить просматривать архивы и образы дисков тоже! А если можно просматривать файлы не скачивая их, можно посмотреть размер кажного файла в архиве и увидеть где именно нарушена структура файла!
Утилита rsync использует алгоритм, разработанный австралийским программистом Andrew Tridgell, для эффективной передачи структур (например файлов) по коммуникационным соединениям в том случае, когда принимающий компьютер уже имеет отличающуюся версию этой структуры.x2088 wrote:Про rsync я ничего не знаю, ...
... что в *nix это уже есть).
Принимающий компьютер разделяет свою копию файла на неперекрывающиеся куски фиксированного размера S, и вычисляет контрольную сумму для каждого куска: MD4 хэш и более слабый 'rolling checksum', и отправляет их серверу, с которым синхронизируется.
Сервер, с которым синхронизируются, вычисляет контрольные суммы для каждого кусочка размера S в своей версии файла, в том числе перекрывающиеся куски. Это может быть эффективно подсчитано ввиду особого свойства rolling checksum: если rolling checksum байт от n до n+S-1 равняется R, то rolling checksum байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала. Таким образом, если уже подсчитана rolling checksum байт 1-25, то для подсчета rolling checksum байт 2-26 используется предыдущая контрольная сумма и байты 1 и 26
http://manual.sidux.com/ru/sys-admin-rsync-ru.htm
http://www.opennet.ru/tips/info/977.shtml