영구 및 비영구적으로 커널 런타임 매개변수 변경하는 방법

제 13부는 이 LFCS (Linux Foundation Certified Sysadmin) 시리즈에서 지속적인 부팅 프로세스에 대한 커널 옵션을 전달하여 시스템의 동작을 수정하는 방법을 설명했습니다.마찬가지로, 실행 중인 Linux 시스템에서 명령줄을 사용하여 특정 런타임 커널 매개변수를 일시적으로 수정하거나 구성 파일을 편집하여 영구적으로 수정할 수 있습니다.

따라서 시스템이 예상된 대로 작동하도록 필요한 변경으로 인해 필요할 때 커널 매개변수를 쉽게 활성화 또는 비활성화할 수 있습니다.

/proc 파일 시스템 소개

최신 파일 시스템 계층 표준의 사양에 따르면 /proc은 프로세스 및 시스템 정보 및 기타 커널 및 메모리 정보를 처리하는 기본 방법을 나타냅니다. 특히, /proc/sys에는 디바이스, 드라이버 및 일부 커널 기능에 대한 모든 정보가 포함되어 있습니다.

내부 /proc/sys 구조는 사용 중인 커널에 크게 의존하지만, 일반적으로 다음과 같은 디렉터리를 찾을 수 있습니다. 차례로 각각의 디렉터리는 각 매개변수 범주에 대한 값이 유지되는 다른 하위 디렉터리를 포함합니다:

  1. dev: 기계에 연결된 특정 장치에 대한 매개변수.
  2. fs: 파일 시스템 구성 (예: 할당량 및 inode).
  3. kernel: 커널 특정 구성.
  4. net: 네트워크 구성.
  5. vm: 커널 가상 메모리 사용.

커널 런타임 매개변수를 수정하려면 sysctl 명령을 사용합니다. 수정할 수 있는 정확한 매개변수 수는 다음과 같이 볼 수 있습니다:

# sysctl -a | wc -l

커널 매개변수의 전체 목록을 보려면 다음을 수행하십시오:

# sysctl -a 

위 명령의 출력은 많은 줄로 구성되어 있으므로, 더 주의 깊게 검사하기 위해 파이프라인 뒤에 less를 사용할 수 있습니다:

# sysctl -a | less

첫 몇 줄을 살펴보겠습니다. 각 줄의 첫 문자가 /proc/sys 내의 디렉토리 이름과 일치한다는 점에 유의하십시오:

Understand Linux /proc Filesystem

예를 들어, 강조된 줄:

dev.cdrom.info = drive name:        	sr0

sr0가 광학 드라이브의 별칭임을 나타냅니다. 다시 말해, 그것이 커널이 그 드라이브를 “보는” 방식이며 그 이름을 참조하는 데 사용하는 방법입니다.

다음 섹션에서는 Linux에서 다른 “더 중요한” 커널 런타임 매개변수를 변경하는 방법을 설명하겠습니다.

Linux 커널 런타임 매개변수 변경 방법

지금까지 설명한 바에 따르면, 매개변수의 이름이 /proc/sys 내에서 찾을 수 있는 디렉토리 구조와 일치한다는 것을 쉽게 알 수 있습니다.

예를 들어:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Linux 커널 매개변수 확인

특정 Linux 커널 매개변수의 값을 확인할 수 있습니다. 두 가지 방법이 있습니다. 하나는 sysctl을 사용하여 매개변수 이름을 입력하는 것이고, 다른 하나는 연관된 파일을 읽는 것입니다.

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

Linux 커널 매개변수 설정 또는 수정

커널 매개변수의 값을 설정하는 데에는 sysctl을 사용할 수도 있습니다. 다만, 이 경우 -w 옵션을 사용하여 매개변수 이름, 등호, 그리고 원하는 값을 입력해야 합니다.

다른 방법은 echo를 사용하여 해당 매개변수에 연관된 파일을 덮어쓰는 것입니다. 다시 말해, 다음 방법들은 시스템에서 패킷 포워딩 기능을 비활성화하는 것과 동등합니다 (참고로, 이것은 시스템이 네트워크 간 트래픽을 전달하지 않아야 할 때 기본값이어야 합니다):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

sysctl을 사용하여 설정된 커널 매개변수는 현재 세션 동안만 적용되며 시스템을 다시 부팅하면 사라집니다.

이러한 값을 영구적으로 설정하려면 원하는 값으로 /etc/sysctl.conf 파일을 편집하십시오. 예를 들어, /etc/sysctl.conf에서 패킷 포워딩을 비활성화하려면 파일에 다음 라인이 나타나도록 하십시오:

net.ipv4.ip_forward=0

그런 다음 다음 명령을 실행하여 변경 사항을 실행 중인 구성에 적용하십시오.

# sysctl -p

중요한 커널 실행 중 매개변수의 다른 예시는 다음과 같습니다:

fs.file-max는 시스템에 대해 커널이 할당할 수 있는 파일 핸들의 최대 개수를 지정합니다. 시스템의 의도된 사용에 따라 (웹 / 데이터베이스 / 파일 서버 등) 이 값을 변경하여 시스템의 요구 사항을 충족시킬 수 있습니다.

파일을 너무 많이 열었습니다

만약 무심코 이런 상황에 처하게 된다면, 제 13부 – Linux Grub 부트 로더 구성 및 문제 해결에서 설명된 대로 싱글 사용자 모드로 부팅하고 이전에 안내된 대로 /etc/sysctl.conf를 편집하십시오. 사용자별로 동일한 제한을 설정하려면, 이 시리즈의 제 14부 – Linux 프로세스 제한 사용 모니터링을 참조하십시오.

kernel.sysrq는 키보드의 SysRq 키(인쇄 화면 키로도 알려짐)를 활성화하는 데 사용되어 시스템이 응답하지 않을 때 특정 키 조합을 사용하여 비상 조치를 취할 수 있도록 합니다.

기본값 (16)은 시스템이 Alt+SysRq+키 조합을 존중하고 sysrq.c 문서에 나열된 조치를 수행할 것임을 나타냅니다. 여기서 키는 b-z 범위의 한 글자입니다. 예를 들어, Alt+SysRq+b는 시스템을 강제로 다시 부팅합니다(서버가 응답하지 않을 때 마지막 수단으로 사용하십시오).

경고! 가상 머신에서 이 키 조합을 누르지 마십시오. 호스트 시스템을 다시 부팅하게 할 수 있습니다!

1로 설정하면, net.ipv4.icmp_echo_ignore_all은 핑 요청을 무시하고 커널 수준에서 삭제합니다. 아래 이미지에서 이 커널 매개변수를 설정한 후 핑 요청이 손실되는 것을 확인할 수 있습니다:

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

예를 들어, net.ipv4.ip_forward=0net.ipv4.icmp_echo_ignore_all=1/etc/sysctl.conf에 설정하는 대신, net.conf라는 새 파일을 /etc/sysctl.d 내에 만들 수 있습니다:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

이 방법을 선택하면, /etc/sysctl.conf에서 동일한 줄을 제거하는 것을 잊지 마십시오.

요약

이 문서에서는 sysctl, /etc/sysctl.conf, 및 /etc/sysctl.d 내의 파일을 사용하여 커널 런타임 매개변수를 수정하는 방법을 설명했습니다.

sysctl 문서에서 더 많은 변수의 의미에 대한 정보를 찾을 수 있습니다. 이러한 파일들은 sysctl을 통해 설정할 수 있는 매개변수에 대한 문서화의 가장 완전한 소스를 나타냅니다.

이 문서가 유용했습니까? 우리는 여러분이 그렇게 생각하기를 진심으로 바랍니다. 질문이나 개선 제안이 있으면 언제든지 알려주십시오.

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/