Вопрос или проблема
Как редактировать файлы в /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
.
Вот как вы можете это сделать:
-
Создайте скрипт для конфигурации 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
Сохраните файл и выйдите из редактора.
-
Сделайте скрипт исполняемым:
Выполните следующую команду, чтобы добавить права на выполнение:
sudo chmod +x /usr/local/bin/ksm_setup.sh
-
Создайте файл службы 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
Сохраните файл и выйдите из редактора.
-
Активируйте службу:
Теперь вам нужно включить созданную службу, чтобы она запускалась при загрузке:
sudo systemctl enable ksm_setup.service
-
Запустите службу:
Вы можете немедленно запустить службу, чтобы применить изменения без перезагрузки:
sudo systemctl start ksm_setup.service
Теперь ваши настройки KSM будут применены автоматически при каждом запуске системы. Вы можете проверить статусы параметров, выполнив команду:
cat /sys/kernel/mm/ksm/run
cat /sys/kernel/mm/ksm/sleep_millisecs
Таким образом, вы обеспечите выполнение всех необходимых настроек для KSM после перезагрузки вашего сервера.