![시스템 매개변수 설정에서 modprobe와 sysctl -w의 차이점은 무엇입니까?](https://linux55.com/image/123707/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%20%EC%84%A4%EC%A0%95%EC%97%90%EC%84%9C%20modprobe%EC%99%80%20sysctl%20-w%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
우리는 sysctl 명령이 다음과 같은 방법으로 커널 매개변수를 변경할 수 있다는 것을 알고 있습니다:
# sysctl -w kernel.domainname="example.com"
또는 디렉토리의 파일을 직접 편집하십시오 /proc/sys
. 지속적인 변경의 경우 매개변수를 /etc/sysctl.d/<moduleName>.conf
다음과 같이 파일에 기록해야 합니다.
# echo kernel.domainname="example.com" > /etc/sysctl.d/domainname.conf
그러나 modprobe 명령을 사용하여 커널 매개변수를 변경할 수도 있습니다.
# modprobe kernel domainname="example.com"
/etc/modprobe.d
그런 다음 여러 위치에 존재하는 디렉토리에 modprobe.conf 파일이 있습니다 : /etc/modprobe.d
및 /usr/lib/modprobe.d
. 여기에는 여러 .conf
파일이 포함되어 있으며 다음과 같이 모듈의 해당 conf 파일에 옵션이 제공될 수 있습니다.
options kernel domainname="example.com"
그렇다면 이러한 방법의 차이점은 무엇입니까? 어떤 특정 상황에서 어떤 방법을 사용해야 합니까?
답변1
내가 아는 한, modprobe
관련 기능이 모듈로 컴파일된 경우에만 튜닝 매개변수를 사용할 수 있으며 해당 모듈을 먼저 로드해야 합니다. 모듈 매개변수를 지속적으로 설정하려면 이 /etc/modprobe.d
디렉토리가 있어야 합니다. (일반적으로 /usr/lib/modprobe.d
배포판의 기본 설정을 그대로 두어야 합니다 . 패키지 업데이트로 인해 배포판의 모든 파일을 덮어쓸 수 있습니다.)
문제의 모듈이 메인 커널에 내장되어 있다면,~ 해야 하다<module_name>.<parameter_name>=<value>
일반적으로 시작 옵션으로 구문을 사용합니다 . 관련 매개변수를 sysctl
설정으로 사용할 수 있는 경우 이 sysctl -w
명령을 사용하여 조정할 수도 있습니다.
사용 가능한 모든 sysctl 매개변수는 다음과 같습니다 /proc/sys
. 예: kernel.domainname
at /proc/sys/kernel/domainname
. 모든 모듈 매개변수를 sysctls로 사용할 수 있는 것은 아니지만 일부는 사용할 수 있습니다.
로드 가능한 모듈이 이미 로드되어 있고 원하는 경우변화언로드하지 않고 즉시 매개변수를 변경하면 새 값을 쓸 수 있습니다 /sys/module/<module_name>/parameters/<parameter_name>
. 모듈이 매개변수의 동적 재구성을 허용할 수 없으면 파일은 읽기 전용이 됩니다.
적어도 내 시스템에서는 kernel.domainname
이는 기본 커널의 sysctl 매개변수이고 이를 변경하려고 해도 modprobe
작동하지 않습니다.
# sysctl kernel.domainname
kernel.domainname = (none)
# modprobe kernel domainname="example.com"
modprobe: FATAL: Module kernel not found in directory /lib/modules/<kernel_version>
# sysctl kernel.domainname
kernel.domainname = (none)
간단히 말해서, 확실하지 않은 경우 먼저 /proc/sys
다음 출력을 살펴보십시오 sysctl -a
. 찾고 있는 매개변수가 존재하지 않으면 이는 sysctl 매개변수가 아니며 모듈 매개변수(또는 sysctl을 제공하는 모듈)일 가능성이 있습니다. )이 현재 로드되지 않은 경우, 이 경우 값을 모듈 매개변수로 설정하는 것이 좋습니다. 현재 로드되지 않은 모듈에 속하는 sysctl을 설정하려고 하면 오류만 생성됩니다.
그런 다음 이 매개변수가 어떤 모듈에 속하는지 알아보세요. 모듈이 커널에 내장되어 있으면 부팅 옵션을 사용해야 할 수 있습니다. 모듈을 로드할 수 있으면 modprobe
(즉, 해당 파일이 디렉토리 트리 어딘가에 <module>.ko
존재하는 경우 ) 및/또는 를 사용할 수 있습니다 ./lib/modules/<kernel version>/
modprobe
/etc/modprobe.d/