시스템 매개변수 설정에서 modprobe와 sysctl -w의 차이점은 무엇입니까?

시스템 매개변수 설정에서 modprobe와 sysctl -w의 차이점은 무엇입니까?

우리는 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.domainnameat /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/

관련 정보