Зеркала 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 опрашивает статус-сервер и замеряет скорость, это лишние секунды при каждом обновлении. Запускай его только когда скорость снова упала или зеркало начало отставать.
Полезные ресурсы
- Mirrors (ArchWiki): список зеркал и настройка mirrorlist.
- Reflector (ArchWiki): документация по reflector.
- Команды pacman от А до Я: все команды пакетного менеджера.
Заключение
Медленное зеркало самая частая причина «тормозящего» pacman. Лечится за минуты: поставь geo.mirror.pkgbuild.com первым, добавь два запасных зеркала и обнови базы. Для автоматики используй reflector, для разовой проверки rankmirrors. А если pacman ругается на 404, зеркало просто не успело синхронизироваться, обнови базы и повтори.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии