Sabemos que o comando sysctl pode alterar os parâmetros do kernel com:
# sysctl -w kernel.domainname="example.com"
ou editando diretamente o arquivo no /proc/sys
diretório. E para alterações persistentes, os parâmetros devem ser gravados em /etc/sysctl.d/<moduleName>.conf
arquivos como:
# echo kernel.domainname="example.com" > /etc/sysctl.d/domainname.conf
No entanto, também podemos alterar os parâmetros do kernel usando o comando modprobe:
# modprobe kernel domainname="example.com"
E há o arquivo modprobe.conf nos /etc/modprobe.d
diretórios, que está presente em vários locais: /etc/modprobe.d
e /usr/lib/modprobe.d
. Ele contém vários .conf
arquivos e as opções podem ser fornecidas no arquivo conf apropriado para o módulo como:
options kernel domainname="example.com"
Então, qual é a diferença entre cada um desses métodos? Qual método deve ser usado em quais circunstâncias específicas?
Tanto quanto eu sei, você pode usar
modprobe
para ajustar os parâmetros somente quando o recurso em questão foi compilado como um módulo - e você está carregando o módulo em primeiro lugar. Para definir os parâmetros do módulo persistentemente, você terá o/etc/modprobe.d
diretório. (Geralmente você deve deixar/usr/lib/modprobe.d
para as configurações padrão da distribuição - quaisquer arquivos lá podem ser substituídos por atualizações de pacotes.)Se o módulo em questão foi criado no kernel principal, você deve usar a
<module_name>.<parameter_name>=<value>
sintaxe, geralmente como uma opção de inicialização. Se o parâmetro em questão estiver disponível comosysctl
configuração, você também pode usar osysctl -w
comando para ajustá-lo.Todos os parâmetros sysctl disponíveis são apresentados em
/proc/sys
: por exemplo,kernel.domainname
is at/proc/sys/kernel/domainname
. Nem todos os parâmetros do módulo estão disponíveis como sysctls, mas alguns podem estar.Se um módulo carregável já foi carregado e você deseja alterar seus parâmetros imediatamente sem descarregá-lo, pode gravar o novo valor em
/sys/module/<module_name>/parameters/<parameter_name>
. Se o módulo não puder aceitar reconfiguração dinâmica para aquele parâmetro, o arquivo será somente leitura.Pelo menos no meu sistema,
kernel.domainname
é um parâmetro sysctl para o kernel principal, e tentar alterá-lomodprobe
não funcionará:Resumindo: Se você não tiver certeza, primeiro olhe para
/proc/sys
ou a saída desysctl -a
: se o parâmetro que você está procurando não estiver lá, não é um parâmetro sysctl e provavelmente é um parâmetro de módulo (ou o módulo que forneceria o sysctl não está carregado no momento, caso em que é melhor definir o valor como um parâmetro de módulo de qualquer maneira - tentar definir um sysctl pertencente a um módulo que não está carregado no momento apenas produzirá um erro).Em seguida, descubra a qual módulo o parâmetro pertence. Se o módulo estiver embutido no kernel, você provavelmente terá que usar uma opção de boot; se for carregável com
modprobe
(ou seja, o respectivo<module>.ko
arquivo existe em algum lugar na/lib/modules/<kernel version>/
árvore de diretórios), você pode usarmodprobe
e/ou/etc/modprobe.d/
.