Медленные зеркала лечатся за десять минут: поставь первым в /etc/pacman.d/mirrorlist зеркало geo.mirror.pkgbuild.com, добавь пару запасных строк и обнови базы командой pacman -Syy. Хочешь автоматики — reflector сам найдёт самые быстрые зеркала и запишет их в список. Ниже разберу, как pacman выбирает сервер, почему загрузка ползёт на 50 КБ/с и как проверить зеркало перед большим обновлением.
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’ом — так ты не узнаешь о проблеме уже во время обновления.
Сначала сделай копию текущего списка — пригодится для отката и для 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 первым и обнови базы.
Ручной перебор утомляет. Для этого есть два инструмента.
Ставится из репозитория:
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 первой строкой вручную. Иначе потеряешь самый надёжный вариант.
Инструмент из пакета 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 умеет обновлять 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 ругается на отдельные пакеты — не паникуй. Про то, как обновляться и ловить ошибки по ходу, — в статье «Обновление с отловом ошибок».
Почти всегда виновато зеркало: плохой маршрут до него. Проверь скорость через pacman -Syy или curl, потом смени зеркало на geo.mirror.pkgbuild.com или российское. Если скорость низкая на всех зеркалах — проблема в самом канале, ищи её отдельно.
Зеркало в процессе синхронизации. Обнови базы (pacman -Syy) и повтори. Если 404 повторяется — зеркало отстаёт, замени его в mirrorlist.
Открой /etc/pacman.d/mirrorlist и добавь строку Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch первой. Или сохрани geo отдельно и вставь после запуска reflector.
Два-три достаточно. Первое — самое быстрое, остальные — запасные на случай падения. Больше трёх смысла нет: pacman всё равно использует первое рабочее.
Нет. Достаточно настроить один раз. Reflector опрашивает статус-сервер и замеряет скорость — это лишние секунды при каждом обновлении. Запускай его только когда скорость снова упала или зеркало начало отставать.
Медленное зеркало — самая частая причина «тормозящего» pacman. Лечится за минуты: поставь geo.mirror.pkgbuild.com первым, добавь два запасных зеркала и обнови базы. Для автоматики используй reflector, для разовой проверки — rankmirrors. А если pacman ругается на 404 — зеркало просто не успело синхронизироваться, обнови базы и повтори.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии