웹사이트 검색

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


이 LFCS(Linux Foundation Certified Sysadmin) 시리즈의 13부에서는 진행 중인 부팅 프로세스를 위해 커널에 옵션을 전달하여 GRUB를 사용하여 시스템 동작을 수정하는 방법을 설명했습니다.

마찬가지로 실행 중인 Linux 시스템에서 명령줄을 사용하여 특정 런타임 커널 매개 변수를 일회성 수정으로 변경하거나 구성 파일을 편집하여 영구적으로 변경할 수 있습니다.

따라서 시스템 작동 방식에 필요한 변경으로 인해 필요할 때 큰 어려움 없이 즉시 커널 매개변수를 활성화하거나 비활성화할 수 있습니다.

/proc 파일 시스템 소개

Filesystem Hierarchy Standard의 최신 사양에 따르면 /proc는 프로세스 및 시스템 정보는 물론 기타 커널 및 메모리 정보를 처리하기 위한 기본 방법을 나타냅니다. 특히 /proc/sys에서는 장치, 드라이버 및 일부 커널 기능에 대한 모든 정보를 찾을 수 있습니다.

/proc/sys의 실제 내부 구조는 사용되는 커널에 따라 크게 다르지만 내부에서 다음 디렉터리를 찾을 수 있습니다. 그러면 각각에는 각 매개변수 범주의 값이 유지되는 다른 하위 디렉터리가 포함됩니다.

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

커널 런타임 매개변수를 수정하려면 sysctl 명령을 사용합니다. 수정할 수 있는 매개변수의 정확한 수는 다음을 통해 확인할 수 있습니다.

sysctl -a | wc -l

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

sysctl -a 

위 명령의 출력은 많은 줄로 구성되므로 파이프라인과 less를 사용하여 더 주의 깊게 검사할 수 있습니다.

sysctl -a | less

처음 몇 줄을 살펴보겠습니다. 각 줄의 첫 번째 문자는 /proc/sys 내부 디렉터리 이름과 일치합니다.

예를 들어 강조 표시된 줄은 다음과 같습니다.

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 커널 매개변수 확인

즉, sysctl 뒤에 매개변수 이름을 사용하거나 관련 파일을 읽어 특정 Linux 커널 매개변수의 값을 볼 수 있습니다.

sysctl dev.cdrom.autoclose
cat /proc/sys/dev/cdrom/autoclose
sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward

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+key 조합을 따르고 sysrq.c에 나열된 작업을 수행함을 나타냅니다. kernel.org에 있는 문서입니다(여기서 key는 b-z 범위의 한 문자입니다). 예를 들어 Alt+SysRq+b는 시스템을 강제로 재부팅합니다(서버가 응답하지 않는 경우 최후의 수단으로 사용).

경고! 호스트 시스템이 강제로 재부팅될 수 있으므로 가상 머신에서 이 키 조합을 누르지 마십시오!

1로 설정하면 net.ipv4.icmp_echo_ignore_all은 ping 요청을 무시하고 커널 수준에서 삭제합니다. 이는 아래 이미지에 나와 있습니다. 이 커널 매개변수를 설정한 후 ping 요청이 어떻게 손실되는지 참고하세요.

개별 런타임 매개변수를 설정하는 더 좋고 쉬운 방법은 /etc/sysctl.d 내의 .conf 파일을 사용하여 카테고리별로 그룹화하는 것입니다.

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

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을 통해 설정할 수 있는 매개변수에 대한 가장 완전한 문서 소스를 나타냅니다.

이 기사가 도움이 되었나요? 우리는 당신이 그랬기를 바랍니다. 궁금한 점이나 개선할 제안 사항이 있으면 주저하지 말고 알려주시기 바랍니다.