Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Зеркала Arch: медленные, рассинхрон, где взять быстрые

Медленные зеркала лечатся за десять минут: поставь первым в /etc/pacman.d/mirrorlist зеркало geo.mirror.pkgbuild.com, добавь пару запасных строк и обнови базы командой pacman -Syy. Хочешь автоматики — reflector сам найдёт самые быстрые зеркала и запишет их в список. Ниже разберу, как pacman выбирает сервер, почему загрузка ползёт на 50 КБ/с и как проверить зеркало перед большим обновлением.

Как pacman выбирает зеркало?

Pacman читает файл /etc/pacman.d/mirrorlist и идёт по строкам Server сверху вниз. Первое зеркало, которое отвечает на запрос, получает весь трафик транзакции. Если оно падает — таймаут, отказ соединения, 404 — pacman переходит к следующей строке.

Каждая строка выглядит так:

Server = https://mirror.yandex.ru/archlinux/$repo/os/$arch

Переменные $repo и $arch pacman подставляет сам: core, extra, multilib и архитектуру системы. Поэтому порядок строк решает всё. Первое рабочее зеркало в списке — твоё основное, остальные — страховка.

Отсюда главное правило: никогда не оставляй в mirrorlist одно зеркало. Если оно ляжет, pacman упадёт с ошибкой, хотя остальные зеркала работают. Минимум два-три сервера, и первым — самое быстрое.

Современный pacman (6.x) умеет переключаться на следующее зеркало прямо посреди транзакции, если текущее перестало отвечать. Но это аварийный путь: основную работу всё равно делает первое рабочее зеркало из списка.

Если pacman падает с ошибкой failed to retrieve some files — это почти всегда зеркало, а не сеть. Смотри, какая строка в mirrorlist первая, и меняй её.

Как понять, что зеркало медленное?

Симптом знакомый: обновление ползёт на 50 КБ/с, хотя канал тянет сотню мегабит. Почти всегда виновато зеркало, а не pacman и не интернет. Плохой маршрут до сервера (peering) — обычное дело, особенно у зарубежных зеркал.

Быстрая проверка — принудительное обновление баз:

pacman -Syy

Флаг -Syy заставляет pacman обновить все базы, даже если они свежие, и показывает скорость загрузки каждой. Ползёт — зеркало медленное. Заодно -Syy полезен после ручной правки mirrorlist: pacman перечитает список и обновит базы уже с нового зеркала.

Точечная проверка конкретного зеркала — HEAD-запрос к базе:

curl -I https://geo.mirror.pkgbuild.com/core/os/x86_64/core.db

Смотри время ответа. Если хочешь реальную скорость — скачай базу целиком:

curl -o /dev/null https://geo.mirror.pkgbuild.com/core/os/x86_64/core.db

curl покажет скорость в конце вывода. Сравни пару зеркал — разница бывает в разы.

Для замера с понятным выводом добавь флаги -w и -o:

curl -o /dev/null -w "Скорость: %{speed_download} байт/с, время: %{time_total} с\n" https://geo.mirror.pkgbuild.com/core/os/x86_64/core.db

-o /dev/null выбрасывает файл, -w печатает скорость и время. Так удобно сравнивать зеркала в цикле:

for m in "geo.mirror.pkgbuild.com" "mirror.yandex.ru/archlinux"; do
  curl -o /dev/null -w "$m: %{speed_download} байт/с\n" "https://$m/core/os/x86_64/core.db"
done

Цикл прогонит оба зеркала и покажет, кто быстрее. Обрати внимание: у geo.mirror.pkgbuild.com путь без /archlinux, у mirror.yandex.ru — с ним.

Запомни: задержка и скорость — разные вещи. Зеркало может отвечать мгновенно, но качать медленно. Поэтому проверяй именно скорость загрузки, а не только время ответа.

Заодно посмотри, откуда pacman качает прямо сейчас: адрес сервера печатается в выводе pacman -Syy. Если это зеркало за тысячи километров от тебя — задержка и низкая скорость почти гарантированы.

Почему зеркала тормозят и отстают?

Зеркало — обычный сервер с копией репозиториев. Скорость зависит от трёх вещей: расстояния до тебя, загрузки сервера и качества маршрута.

Расстояние решает больше всего. Пакет летит через десятки роутеров, каждый добавляет задержку. Зеркало в Европе для России часто медленнее российского, даже если у него канал шире. А плохой peering между провайдерами превращает быстрый сервер в тормоз: трафик идёт в обход, через чужие сети.

Загрузка сервера тоже важна. После выхода крупного обновления популярные зеркала захлёбываются от запросов. В такие дни даже хорошее зеркало отдаёт пакеты медленно.

И третье — синхронизация. Зеркала копируют репозитории по расписанию: кто-то каждый час, кто-то раз в сутки. Пока идёт копирование, база и файлы пакетов живут в разных состояниях. Отсюда 404 на свежие пакеты и «рассинхрон», о котором ниже.

Где взять быстрые зеркала?

Лучший вариант по умолчанию — geo.mirror.pkgbuild.com. Это глобальный CDN: он сам маршрутизирует запрос на ближайший узел, всегда свежий и не требует ручного выбора. Именно с него синхронизируются остальные зеркала, поэтому рассинхрона тут не бывает. Ставь его первой строкой.

Для России подойдут:

  • mirror.yandex.ru — быстрое российское зеркало.
  • mirror.timeweb.ru — ещё один вариант в РФ.

Полный список зеркал ищи на странице Mirrors в ArchWiki — ссылка в конце статьи. Отстающие от источника зеркала лучше не брать. Перед тем как вписать новое зеркало в список, проверь его скорость curl’ом — так ты не узнаешь о проблеме уже во время обновления.

Как настроить mirrorlist вручную?

Сначала сделай копию текущего списка — пригодится для отката и для rankmirrors:

cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup

Теперь открой файл:

sudo nano /etc/pacman.d/mirrorlist

И приведи его к такому виду:

Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch
Server = https://mirror.yandex.ru/archlinux/$repo/os/$arch
Server = https://mirror.timeweb.ru/archlinux/$repo/os/$arch

Три строки — оптимум. Первая — основное зеркало, остальные — запасные. После правки обнови базы:

sudo pacman -Syy

Проверь, что скорость устраивает. Если нет — поменяй порядок или замени зеркало. Если в списке останется одно нерабочее зеркало, pacman не сможет обновиться вовсе — поэтому запасные строки обязательны. Подробнее про базовую настройку списка — в статье «Настройка mirrorlist в Arch Linux».

Если ты правил mirrorlist руками, при обновлении пакета pacman-mirrorlist pacman не тронет твой файл. Вместо этого рядом появится /etc/pacman.d/mirrorlist.pacnew — свежий список по умолчанию. Загляни в него: вдруг там появились новые зеркала. Вернуть дефолтный список можно так:

cp /etc/pacman.d/mirrorlist.pacnew /etc/pacman.d/mirrorlist

Только после этого снова поставь geo первым и обнови базы.

Как выбрать самое быстрое зеркало автоматически?

Ручной перебор утомляет. Для этого есть два инструмента.

Reflector

Ставится из репозитория:

sudo pacman -S reflector

Запуск, который сам найдёт быстрые зеркала:

sudo reflector --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

Что происходит: reflector опрашивает статус-сервер Arch, берёт десять самых свежих зеркал, замеряет скорость загрузки и записывает отсортированный список в mirrorlist. Флаг --latest 10 ограничивает выборку свежими зеркалами, --protocol https отсекает http, --sort rate сортирует по скорости.

Можно сузить выборку по стране: --country Russia оставит только российские зеркала. А --fastest 5 запишет в файл лишь пять самых быстрых из отобранных:

sudo reflector --country Russia --latest 10 --protocol https --sort rate --fastest 5 --save /etc/pacman.d/mirrorlist

Комбинируй флаги как удобно, главное — не забывай про --save.

Важный нюанс: reflector перезаписывает весь файл. После запуска открой mirrorlist и верни geo.mirror.pkgbuild.com первой строкой вручную. Иначе потеряешь самый надёжный вариант.

Rankmirrors

Инструмент из пакета pacman-contrib, работает офлайн. Он не опрашивает статус-сервер, а просто замеряет задержку зеркал из файла:

sudo pacman -S pacman-contrib
rankmirrors -n 5 /etc/pacman.d/mirrorlist.backup

-n 5 — вывести пять самых быстрых. Результат можно перенаправить прямо в mirrorlist:

rankmirrors -n 5 /etc/pacman.d/mirrorlist.backup | sudo tee /etc/pacman.d/mirrorlist

Разница простая: reflector нужен интернет и он опирается на статус-API, rankmirrors просто пингует строки из твоего файла. Для разовой проверки хватает rankmirrors, для полной автоматизации — reflector.

Как настроить reflector на автоматический запуск?

Reflector умеет обновлять mirrorlist сам, по расписанию. За это отвечает systemd-таймер reflector.timer. Включи его:

sudo systemctl enable --now reflector.timer
systemctl status reflector.timer

Таймер запускается раз в неделю и прогоняет reflector с настройками из файла /etc/xdg/reflector/reflector.conf. Посмотри, что там:

cat /etc/xdg/reflector/reflector.conf

По умолчанию там --latest 5 --protocol https --sort rate --save /etc/pacman.d/mirrorlist. Отредактируй файл под себя — например, добавь --country Russia:

sudo nano /etc/xdg/reflector/reflector.conf

После правки перезапусти таймер:

sudo systemctl restart reflector.timer

И помни про главный нюанс: reflector перезаписывает mirrorlist целиком. Если хочешь гарантированно держать geo в списке, добавь в конфиг --include geo.mirror.pkgbuild.com.

Что делать, если зеркало рассинхронизировано?

Зеркала обновляются не одновременно. Новый пакет появляется на крупных зеркалах примерно через 30–60 минут после публикации в источнике. Отставание каждого зеркала видно на mirrorstatus.archlinux.org: там показано, какое зеркало отстаёт на часы, а какое синхронизировано минуту назад. Выбирай из свежих.

Симптом рассинхрона: pacman отдаёт 404 на пакет, хотя базы только что обновились. Механика такая: база пакетов на зеркале обновляется раньше, чем сами файлы пакетов. Синхронизация идёт по частям, и в момент, когда база уже новая, а файл ещё не скопировался, pacman получает 404. Это нормальное состояние, оно проходит за несколько минут. Лечение простое: обнови базы ещё раз и повтори установку:

sudo pacman -Syy
sudo pacman -S <пакет>

Если 404 повторяется — зеркало отстаёт надолго, замени его. И не пытайся обновить только один пакет в обход остальных: частичные обновления ломают систему. Подробнее — в статье «Частичное обновление и IgnorePkg». Связанная ситуация, когда локальный пакет новее, чем в репозитории, разобрана в статье «Локальный пакет новее, чем в репозитории». А про то, где pacman хранит базы — в статье «Базы pacman: где лежат».

Перед большим обновлением полезно проверить зеркало заранее: скачай базу и посмотри скорость. Если она низкая — поменяй зеркало до того, как запустишь pacman -Syu, а не во время.

Как проверить зеркало перед большим обновлением?

Перед pacman -Syu потрать минуту и убедись, что зеркало живо и свежее. Три проверки.

Сначала скорость. Скачай базу и посмотри цифру:

curl -o /dev/null -w "%{speed_download} байт/с\n" https://geo.mirror.pkgbuild.com/core/os/x86_64/core.db

Если скорость в разы ниже обычной — зеркало перегружено, возьми другое.

Потом свежесть. Открой страницу статуса зеркал и найди своё зеркало в списке. Колонка Last Sync покажет, когда оно синхронизировалось в последний раз. Отставание на часы — повод выбрать другое зеркало.

И наконец, сам апдейт. Запусти обновление и следи за выводом. Если pacman ругается на отдельные пакеты — не паникуй. Про то, как обновляться и ловить ошибки по ходу, — в статье «Обновление с отловом ошибок».

Частые вопросы

Почему загрузка ползёт на 50 КБ/с при быстром интернете?

Почти всегда виновато зеркало: плохой маршрут до него. Проверь скорость через pacman -Syy или curl, потом смени зеркало на geo.mirror.pkgbuild.com или российское. Если скорость низкая на всех зеркалах — проблема в самом канале, ищи её отдельно.

Зеркало отдаёт 404 на пакет — что делать?

Зеркало в процессе синхронизации. Обнови базы (pacman -Syy) и повтори. Если 404 повторяется — зеркало отстаёт, замени его в mirrorlist.

Reflector перезаписал весь mirrorlist — как вернуть geo?

Открой /etc/pacman.d/mirrorlist и добавь строку Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch первой. Или сохрани geo отдельно и вставь после запуска reflector.

Сколько зеркал нужно в mirrorlist?

Два-три достаточно. Первое — самое быстрое, остальные — запасные на случай падения. Больше трёх смысла нет: pacman всё равно использует первое рабочее.

Нужно ли запускать reflector при каждом обновлении?

Нет. Достаточно настроить один раз. Reflector опрашивает статус-сервер и замеряет скорость — это лишние секунды при каждом обновлении. Запускай его только когда скорость снова упала или зеркало начало отставать.

Полезные ресурсы

Заключение

Медленное зеркало — самая частая причина «тормозящего» pacman. Лечится за минуты: поставь geo.mirror.pkgbuild.com первым, добавь два запасных зеркала и обнови базы. Для автоматики используй reflector, для разовой проверки — rankmirrors. А если pacman ругается на 404 — зеркало просто не успело синхронизироваться, обнови базы и повтори.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max