Могу ли я проверить большой файл загрузки по HTTP
Я загружаю большой файл поверх http
с помощью wget
1,2 ТБ. Загрузка занимает около недели и теперь содержит ошибки дважды (не пройдена проверка md5, для запуска которой требуются дни).
Есть ли хороший способ проверить файл по частям через http с помощью скажем curl
? Или разбить его на отдельные блоки, чтобы я мог определить конкретный неисправный блок и перезагружать только этот раздел?
Файл является tar
архив, поэтому я считаю, что повреждения на блок могут быть идентифицированы последовательно во время распаковки.
3 ответа
На стороне сервера вы можете использовать dd
а также md5sum
контрольную сумму каждого куска файла:
#!/bin/bash
FILENAME="$1"
FILESIZE=`stat --printf="%s" $FILENAME`
CHUNKSIZE=536870912 # 512MB
CHUNKNUM=0
while ! grep -q 'cannot skip' hash.log 2> /dev/null ; do
dd if=$FILENAME bs=$CHUNKSIZE skip=$CHUNKNUM count=1 2> hash.log | md5sum >> $FILENAME.md5
CHUNKNUM=$(( CHUNKNUM + 1 ))
done
rm hash.log
Вы останетесь с одним $FILENAME.md5
файл со всеми хэшами чанков.
Теперь вы можете скачать этот большой файл и контрольные суммы, запустить этот скрипт для файла и сравнить хэши. Если какой-либо фрагмент получает несоответствующий хеш, вы можете использовать curl для загрузки только части файла (если сервер поддерживает RANGE) и исправить файл с помощью dd.
Например, если блок 2 получает несоответствие хеша:
curl -s -r 536870912-1073741824 | dd of=somelargetarfile.tar seek=536870912 conv=notrunc
Это загрузит чанк 2 и исправит большой tar-файл вместе с ним.
Ответ ThoriumBR хороший, но я хотел бы добавить несколько дополнительных советов на случай, если вы не сможете получить доступ к удаленному серверу.
У вас уже есть одна (или несколько) неудачных загрузок локально.
Используя трюк разделения, данный ThoriumBR, вы можете разделить эти файлы локально и использовать хорошие части.
Сравните каждый из этих кусков с тем же самым кусочком, загруженным с помощью curl (согласно последней инструкции ThoriumBR). Если у вас есть 2 одинаковых блока (двоичный дифференциал, нет необходимости в медленном md5), вы можете быть относительно уверены, что это хороший блок. Так что сохраните его где-нибудь еще и повторите со следующим фрагментом.
Итак: Для каждого чанка: сравните свои локальные копии (если у вас их больше 1), добавьте только что загруженные копии и сравните, пока не найдете 2 одинаковых чанка: это тот, который нужно сохранить.
Это немало ручной работы, но выполнимо. Вы можете даже написать сценарий всего процесса, но выполнение этого (и отладка сценария) может не стоить усилий.
На исходном сервере создайте BitTorrent .torrent и добавьте существующее местоположение в качестве начального URL-адреса. BitTorrent проверит куски. Любой клиент, которому удастся загрузить копию, может при желании ее запустить.
Это требует хорошей копии файла для создания.torrent. Очень похоже на решение ThoriumBR с различными инструментами.
Если у вас все еще есть сбойные файлы и / или контрольные суммы, сравните каждую и контрольную сумму. Один и тот же результат каждый раз может указывать, что ваша передача верна, но удаленный файл не соответствует известной контрольной сумме.