Обнаружил на местном сервере (не у провайдера, но у него с ним пиринг, поэтому. вроде бы, бесплатно) образы DVD Lenny. Решил скачать.
Вечером закинул их список wget'у. Думал, за ночь скачается пара дисков -- может быть получится иксы на работе на Geode LX поставить.
Но wget скачал 300 МБ (318707458 байт) первого диска и застрял. Через какое-то время прервал попытку по тайм-ауту и начал вторую. Опять тайм-аут. Через 15 минут предпринял 3-ю попытку, но она и следующие 17 быстро закончились с сообщением:
Код: Выделить всё
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 4698322944 (4,4G) [application/octet-stream]
debian-500-i386-DVD-1.iso вырвался в действительность.
Повтор.
И начал скачиваться образ 2-го диска. С ним повторилась аналогичная ситуация, но уже после скачивания 3604872506 байтов, т.е. около 3.5 ГБ. Что будет с образом 3-го диска, пока не знаю.
Пытался отдельно продолжить 1-й диск командой wget -c http://...-1.iso. Не хочет.
Команда wget http://...-1.iso начинает запускается сразу -- в файл [b]debian-500-i386-DVD-1.iso.1. А wget -c ... -- не хочет.
Запустил wget -c ... в другом каталоге -- запустился. Прервал, запустил опять -- продолжил.
Попытки продолжить "застрявший" файл заканчиваютсся тайм-аутом.
Из того, что файл с начала качается (и продолжается) впечатление, что причина может быть не у меня, а на сервере, Но какая?
И что может означать сообщение "вырвался в действительность"?
Спрашивал у google и у ya.ru -- нашёл только сслылки на предмет анекдота перевода. В том числе и на этом форуме 2 года назад. С рекомендацией "пльзоваться оригинальной версией". Не очень серьёзной, потому, что это сообщение не в самом wget'е, а в файле /usr/share/locale/ru/LC_MESSAGES/wget.mo
Решил поискать оригинальное сообщение и где и по какой причине оно выдаётся.
В исходниках wget'а, в файле src/http.c (и src/ftp.c) нашёл:
Код:
/* Open the local file. */
if (!output_stream)
{
mkalldirs (hs->local_file);
if (opt.backups)
rotate_backups (hs->local_file);
if (hs->restval)
fp = fopen (hs->local_file, "ab");
else if (ALLOW_CLOBBER)
fp = fopen (hs->local_file, "wb");
else
{
fp = fopen_excl (hs->local_file, true);
if (!fp && errno == EEXIST)
{
/* We cannot just invent a new name and use it (which is
what functions like unique_create typically do)
because we told the user we'd use this name.
Instead, return and retry the download. */
logprintf (LOG_NOTQUIET,
_("%s has sprung into existence.\n"),
hs->local_file);
CLOSE_INVALIDATE (sock);
return FOPEN_EXCL_ERR;
}
}
if (!fp)
{
logprintf (LOG_NOTQUIET, "%s: %s\n", hs->local_file, strerror (errno));
CLOSE_INVALIDATE (sock);
return FOPENERR;
}
}
else
fp = output_stream;
От текста has sprung into existence понятней не стало.
Посмотрев код, я пришёл к выводу, что это сообщение возникает, когда wget пытается открыть файл по open и с флагами
O_WRONLY | O_CREAT | O_EXCL
а файл уже существует. Таким образом, причинм может быть всё-таки не в сервере.
Но почему такое может быть у именно этой программы?
P.S. Ситуация возникла второй раз. Первый раз файл в (примерно) 80 МБ застрял после скачивания 60 с небольшим МБ. Причём, wget с нуля его качал, а продолжать не хотел. На следующий день я на работе с того же сервера докачал этот же файл.