sysctl 기본값을 찾으십니까? (재부팅하지 않고)


10

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

재부팅하면 net.core.rmem_max기본값으로 되돌아 가지만 (에서 재정의되지 않았기 때문에 /etc/sysctl.conf) 재부팅하지 않고이 값을 알 수 있습니까?

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

답변:


4

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

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

대부분의 설정은 커널 소스 kernel/sysctl.c및 기타 파일을 확인할 수 있습니다. 당신은 같은 정의를 볼 수 있습니다

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

(에서 net/core/sysctl_net_core.c), 당신은 초기화 추적 할 수있는 sysctl_rmem_max변수를 . 이것은 상수에서 초기화되지만 확장하려면 C 코드를 읽는 데 약간의 시간이 걸립니다.


0

내 OpenBSD 컴퓨터에서 /etc/sysctl.conf는 많은 기본 sysctl 값을 나열하지만이 목록은 완전한 것은 아닙니다.

아마도 가장 좋은 방법은 sysctl 코드를 읽거나 같은 OS를 실행하는 친구에게 값을 요청하는 것입니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.