Estou configurando o Netdata em um Debian 12 VPS na Hetzner Cloud. Parte do preflight é garantir que dois arquivos /sys/kernel/mm/ksm/
estejam definidos com os valores necessários:
/sys/kernel/mm/ksm/run
deveria ser1
; atualmente é0
./sys/kernel/mm/ksm/sleep_millisecs
deveria ser1000
; atualmente é20
.
Minha rota de rm
-> echo
+ tee
-> chown
-> chmod
está falhando na primeira etapa, pois não tenho permissão para rm -f
nenhum dos arquivos:
$ sudo rm -f /sys/kernel/mm/ksm/run
rm: cannot remove '/sys/kernel/mm/ksm/run': Operation not permitted
O uso sed
no local também falha com Permission denied
.
Qual é a maneira mais segura/sensata de fazer alterações persistentes em /sys/kernel/mm/ksm/
, por favor?
/sys
é um sistema de arquivos sintético que não está associado a nenhum armazenamento persistente no sistema. Em essência, é apenas um acesso falso, como um arquivo, a um monte de internos do kernel. Isso significa que nada escrito lá sobreviverá a uma reinicialização, e você precisa garantir que quaisquer alterações que queira fazer sejam aplicadas em cada reinicialização. O espaço do usuário intencionalmente não pode (diretamente) criar ou remover arquivos lá também; se você quiser um novo valor em um arquivo, apenas ecoe o novo valor para esse arquivo. Você também não deve modificar permissões em coisas lá arbitrariamente (isso provavelmente quebrará as coisas de maneiras inesperadas).Às vezes, é possível alterar valores padrões para alguns parâmetros na
/sys
linha de comando do kernel. Por exemplo,transparent_hugepage
pode ser usado para definir o valor inicial para/sys/kernel/mm/transparent_hugepage/enabled
. O KSM, no entanto, não tem nenhuma opção de linha de comando do kernel associada, até onde eu saiba.Em um mundo ideal, você escreveria um arquivo de serviço para o gerenciador de serviços do seu sistema que definiria os parâmetros necessários quando iniciado (e, em um mundo ainda mais ideal, os redefiniria para os padrões quando interrompido, porque isso facilita os testes).
No entanto, há uma abordagem mais fácil na maioria das distribuições Linux se você não quiser ir para a abordagem adequada baseada em serviço. Todos os sistemas baseados em systemd, e um punhado de sistemas não baseados em systemd, usam
systemd-tmpfiles
para gerenciar coisas como a criação de diretórios temporários necessários. E, bastante útil, uma das coisas que ele pode fazer é gravar dados arbitrários em arquivos arbitrários. Você pode criar um arquivo chamado algo comoksm.conf
em/etc/tmpfiles.d
com o seguinte conteúdo para ter os valores específicos que você está pedindo na pergunta original escritos toda vez que o sistema inicializa (e em teoria, também toda vezsystemd-tmpfiles
que é executado com a--create
opção):O primeiro caractere indica o que fazer (
f
significa criar ou atualizar um arquivo), o segundo campo é o caminho específico para criar/modificar, e os campos restantes são específicos para a operação. Paraf
, o terceiro, quarto e quinto campos indicam o modo, proprietário e grupo, e o restante da linha é o valor a ser escrito no arquivo.Detalhes completos sobre o formato podem ser encontrados em
man tmpfiles.d
.Você não pode fazer dessa forma. O
/sys
sistema de arquivos inteiro é recriado na inicialização e não é usado para controlar o sistema./proc
Em vez disso, consulte https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/ e leiaman proc
. Você terá que adicionar ossysctl
comandos apropriados à inicialização do seu sistema. Consulte asystemd
seção de https://www.baeldung.com/linux/run-script-on-startup