sysctl 기본값을 알아내시겠습니까? (재부팅 필요 없음)

sysctl 기본값을 알아내시겠습니까? (재부팅 필요 없음)

net.core.rmem_maxwith의 값을 수정했으며 sysctl이제 이를 기본값으로 다시 설정하고 싶습니다.

재부팅하면 net.core.rmem_max기본값으로 돌아가는데(에서 덮어쓰지 않았기 때문에 /etc/sysctl.conf) 재부팅하지 않고도 이 값을 알 수 있나요?

이상적으로는 값을 수정하기 전에 실행하여 값을 읽어야 하는데 sysctl net.core.rmem_max잊어버렸습니다...

답변1

이는 일반적으로 불가능합니다. 커널은 원래 값을 유지하지 않습니다(적어도 Linux에서는 그렇지 않으며 아마도 다른 UNIX 변형에서도 마찬가지입니다). 설정 값은 변수에 저장됩니다. 설정을 변경하면 해당 변수가 포함된 메모리가 되돌릴 수 없게 업데이트됩니다.

대부분의 설정에서 변수의 초기 값은 컴파일 타임에 결정되어 커널 바이너리에 저장되는 상수입니다. 따라서 원칙적으로 커널 바이너리를 확인하여 기본값을 찾을 수 있습니다. 관심 있는 설정에 해당하는 기호를 찾고 커널 바이너리에서 해당 기호의 주소를 추적해야 합니다. 가상 머신에서 커널을 시작하면 작업 부하가 줄어듭니다.

대부분의 설정에서는 커널 소스 코드를 볼 수 있습니다.kernel/sysctl.c및 기타 문서. 다음과 같은 정의가 표시됩니다.

    {
            .procname       = "rmem_max",
            .data           = &sysctl_rmem_max,
    },

(존재하다net/core/sysctl_net_core.c), 여기에서 초기화를 추적할 수 있습니다.sysctl_rmem_max바꾸다. 이는 상수에서 초기화되지만 확장하려면 C 코드를 많이 읽어야 합니다.

답변2

내 OpenBSD 시스템에서 /etc/sysctl.conf에는 여러 기본 sysctl 값이 나열되어 있지만 이 목록이 전부는 아닙니다.

아마도 가장 좋은 방법은 sysctl 코드를 읽거나 동일한 OS를 실행하는 친구에게 그의 값을 물어보는 것입니다 :)

관련 정보