Alpine Linux на Raspberry Pi не активирует раздел подкачки при загрузке.

Вопрос или проблема

Наверное, это очень наивный вопрос, но я не могу сделать это, используя методы, которые я нашел в существующей документации или в других решениях.

У меня установлена Alpine Linux на Raspberry Pi, SD-карта которого отформатирована для стандартного загрузочного раздела и ext4 для размещения /. Я добавил раздел подкачки, так как у моего Pi не так много ОЗУ. Проблема в том, что раздел подкачки не активируется при загрузке.

Насколько мне известно, традиционный метод настройки выделенного раздела подкачки заключается в его объявлении в файле /etc/fstab. Это не работает, поэтому мой другой подход заключался в попытке создания скрипта в папке /etc/init.d, чтобы заставить его активироваться. К моему удивлению, файл init.d, который делает именно это, уже существует в этой сборке — это /etc/init.d/swap, который выглядит следующим образом.

depend()
{
        after clock root
        before localmount
        keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
}

start()
{
        ebegin "Activating swap devices"
        case "$RC_UNAME" in
                NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
                *)              swapon -a >/dev/null;;
        esac
        eend 0 # Если swapon ничего не делает, он выдает ошибку, поэтому всегда возвращает 0
}

stop()
{
        ebegin "Deactivating swap devices"
        case "$RC_UNAME" in
                NetBSD|OpenBSD) swapctl -U -t noblk >/dev/null;;
                *)              swapoff -a >/dev/null;;
        esac
        eend 0
}

Почему-то это не работает правильно, как и /etc/init.d/swap.apk-new, который имеет точно такое же содержание, как и /etc/init.d/swap.

Я знаю, что /etc/fstab правильно настроен, так как запуск swapon -a >/dev/null активирует раздел подкачки так, как задумано! Однако Alpine отказывается делать это при загрузке, несмотря на то, что это уже объявлено…

Я что-то упускаю? Я знаю, что могу вручную активировать подкачку каждый раз при включении устройства, но я уверен, что система должна делать это автоматически при загрузке.

Если это окажется полезным, строка, которую я добавил в /etc/fstab, выглядит следующим образом.

UUID=<my partition UUID number> none swap defaults 0 0

И swapon -a распознает раздел. Эта сборка Alpine была выполнена с использованием установки sys, и ее характеристики следующие

OS:     Alpine Linux v3.18 aarch64
Host:   Raspberry Pi 3 Model B Rev 1.2
Kernel: 6.1.37-0-rpi

Заранее спасибо.

Делая что-то совершенно другое, я наткнулся на решение, и оно работает! Я чувствую себя крайне глупо, так как это было столь тривиально, как просто объявить это в терминале:

rc-update add swap boot

И теперь подкачка активируется, как задумано!

Я просто оставлю это на случай, если кто-то столкнется с подобной проблемой, думаю…

Команда swapon должна быть запущена помимо настройки в /etc/fstab. Инициализационная система Linux, такая как systemd (Debian/Ubuntu/Fedora/RHEL) или OpenRC (Gentoo/Alpine), отвечает за это.

В OpenRC скрипт в /etc/init.d/ определяет сервис, но не обязательно загружает его при загрузке.

Что вы упустили, так это необходимость вручную запустить сервис с помощью rc-service swap start или указать OpenRC запускать его при загрузке с rc-update add swap.

Дополнительные замечания:

  1. При использовании rc-update add вы можете добавить его либо в уровень выполнения default, либо в boot, который вызывается default в любом случае.
  2. Вам нужна строка подкачки в /etc/fstab, чтобы swapon -a в /etc/init.d/swap знал, как монтировать ваш раздел/файл подкачки.

Больше информации о подкачке можно найти в Alpine Wiki.

.

Ответ или решение

Введение в вопрос:

Процесс настройки операционной системы, особенно на устройствах с ограниченными ресурсами, таких как Raspberry Pi, может представлять определенные задачи, которые требуют внимания не только к аппаратным аспектам, но и к программным настройкам. Одной из таких задач является настроить схему управления памятью, в частности активацию раздела подкачки (swap) в системах, где доступная оперативная память ограничена. Alpine Linux в сочетании с Raspberry Pi представляет собой привлекательную комбинацию для легковесных и производительных решений, однако, как показано в проблеме, которая привела к возникновению трудностей с автоматическим запуском раздела подкачки при загрузке.

Теоретическая часть:

Alpine Linux значительно отличается от традиционных дистрибутивов Linux благодаря своему легковесному характеру и использованию OpenRC в качестве системы инициализации, в отличие от более распространенной systemd. Чтобы автоматизировать активацию swap, необходимо правильно сконфигурировать как /etc/fstab, так и систему управления службами, то есть OpenRC. В OpenRC службы определяются через сценарии в /etc/init.d/, но они не запускаются автоматически без явной их активации через rc-update.

Практический пример и решение:

Пользователь столкнулся с проблемой, что swap не активировался автоматически при загрузке, несмотря на правильную конфигурацию в файле /etc/fstab. Основной причиной этого оказалось отсутствие ссылки на службу swap в runlevel, используемом при запуске системы. В решении проблемы используются следующие шаги:

  1. Удостовериться, что строка в /etc/fstab корректно указывает на swap-раздел. Правильная запись должна иметь такой вид:

    UUID=<UUID вашего раздела> none swap defaults 0 0

    Эта строка информирует команды swapon и swapoff о том, какой именно раздел или файл использовать в качестве swap.

  2. Проверить, что служба swap действительно активна и может быть запущена вручную с помощью:

    rc-service swap start
  3. При автоматизации системы необходимо установить службу swap в runlevel, который используется при загрузке, например, boot или default:

    rc-update add swap boot

Этот шаг обеспечивает автоматическое включение swap-службы на этапе инициализации системы.

Применение и дополнительные рекомендации:

Случай, рассмотренный в вопросе, наглядно демонстрирует важность понимания различий между системами управления службами в различных дистрибутивах Linux. Пользователи должны не только настраивать конфигурационные файлы, но и понимать, как включать и отключать службы в системе инициализации, используемой их дистрибутивом.

Несколько рекомендаций для пользователей Alpine Linux и OpenRC:

  • Регулярно проверяйте состояние своих служб после установки или обновления программного обеспечения с помощью rc-status.
  • Изучите и используйте rc-update для более точного управления служебными скриптами и обеспечения корректного запуска всех необходимых вам служб.
  • Ознакомьтесь с документацией Alpine Linux и OpenRC, чтобы получить более глубокие знания о настройке и управлении вашей системой.

Эти шаги и рекомендации помогут избежать подобных проблем в будущем и обеспечат более стабильную и производительную работу вашей системы на базе Raspberry Pi.

Оцените материал
Добавить комментарий

Капча загружается...