Как редактировать файлы в /sys/kernel/mm/ksm/, чтобы изменения сохранялись после перезагрузки?

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

Как редактировать файлы в /sys/kernel/mm/ksm/, чтобы изменения сохранялись после перезагрузки?

Я настраиваю Netdata на VPS с Debian 12 в Hetzner Cloud. Часть предварительных шагов заключается в том, чтобы убедиться, что два файла в /sys/kernel/mm/ksm/ установлены на необходимые значения:

  • /sys/kernel/mm/ksm/run должен быть равен 1; в настоящее время он равен 0.
  • /sys/kernel/mm/ksm/sleep_millisecs должен быть равен 1000; в настоящее время он равен 20.

Мой процесс rm -> echo + tee -> chown -> chmod не удался на первом шаге, поскольку у меня нет разрешения на rm -f ни на один из файлов:

$ sudo rm -f /sys/kernel/mm/ksm/run
rm: невозможно удалить '/sys/kernel/mm/ksm/run': Операция не разрешена

Использование sed на месте также заканчивается неудачей с ошибкой Permission denied.

Какой самый безопасный/разумный способ внести постоянные изменения в /sys/kernel/mm/ksm/?

Вы не можете сделать это таким образом. Вся файловая система /sys воссоздается при загрузке и не используется для управления системой. Вместо этого используйте /proc, смотрите https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/ и прочитайте man proc. Вам нужно будет добавить соответствующие команды sysctl в автозагрузку вашей системы. См. раздел systemd на https://www.baeldung.com/linux/run-script-on-startup.

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

К сожалению, вы не можете редактировать файлы в каталоге /sys, так как эта файловая система создается заново при загрузке системы и не предназначена для постоянного хранения конфигураций. Вместо этого вам нужно применить соответствующие команды для настройки параметров в виртуальной файловой системе /proc или использовать другие подходы для их автоматической настройки при загрузке системы.

Для достижения желаемого результата вам нужно будет указать команды, которые будут выполняться при запуске системы. Один из наиболее распространенных способов сделать это – создать скрипт для системного менеджера systemd.

Вот как вы можете это сделать:

  1. Создайте скрипт для конфигурации KSM:

    Откройте текстовый редактор и создайте файл, например ksm_setup.sh:

    sudo nano /usr/local/bin/ksm_setup.sh

    Вставьте в него следующие строки:

    #!/bin/bash
    
    echo 1 > /sys/kernel/mm/ksm/run
    echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs

    Сохраните файл и выйдите из редактора.

  2. Сделайте скрипт исполняемым:

    Выполните следующую команду, чтобы добавить права на выполнение:

    sudo chmod +x /usr/local/bin/ksm_setup.sh
  3. Создайте файл службы systemd:

    Создайте новый файл службы, используя текстовый редактор:

    sudo nano /etc/systemd/system/ksm_setup.service

    Вставьте в него следующий содержимое:

    [Unit]
    Description=KSM Setup Service
    After=local-fs.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/ksm_setup.sh
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target

    Сохраните файл и выйдите из редактора.

  4. Активируйте службу:

    Теперь вам нужно включить созданную службу, чтобы она запускалась при загрузке:

    sudo systemctl enable ksm_setup.service
  5. Запустите службу:

    Вы можете немедленно запустить службу, чтобы применить изменения без перезагрузки:

    sudo systemctl start ksm_setup.service

Теперь ваши настройки KSM будут применены автоматически при каждом запуске системы. Вы можете проверить статусы параметров, выполнив команду:

cat /sys/kernel/mm/ksm/run
cat /sys/kernel/mm/ksm/sleep_millisecs

Таким образом, вы обеспечите выполнение всех необходимых настроек для KSM после перезагрузки вашего сервера.

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

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