커널 관리, 모니터링 및 업데이트
Red Hat Enterprise Linux 8에서 Linux 커널을 관리하는 가이드
초록
Red Hat 문서에 관한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
문서 개선을 위한 의견에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.
Jira를 통해 피드백 제출 (계정 필요)
- Jira 웹 사이트에 로그인합니다.
- 상단 탐색 모음에서 생성 을 클릭합니다.
- 요약 필드에 설명 제목을 입력합니다.
- 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
- 대화 상자 하단에서 생성 을 클릭합니다.
1장. Linux 커널 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat(Red Hat 커널)에서 제공하고 유지 관리하는 Linux 커널 및 Linux 커널 RPM 패키지에 대해 알아보십시오. 운영 체제에 모든 최신 버그 수정, 성능 개선 및 패치가 있고 새 하드웨어와 호환되는 Red Hat 커널을 계속 업데이트하십시오.
1.1. 커널의 정의 링크 복사링크가 클립보드에 복사되었습니다!
커널은 시스템 리소스를 관리하고 하드웨어와 소프트웨어 애플리케이션 간의 인터페이스를 제공하는 Linux 운영 체제의 핵심 요소입니다.
Red Hat 커널은 Red Hat 엔지니어가 최신 기술 및 하드웨어와의 안정성 및 호환성에 중점을 두고 있는 업스트림 Linux 메인라인 커널을 기반으로 하는 사용자 정의 빌드 커널입니다.
Red Hat이 새 커널 버전을 릴리스하기 전에 커널은 엄격한 품질 보증 테스트 세트를 통과해야 합니다.
Red Hat 커널은 YUM 패키지 관리자가 쉽게 업그레이드하고 확인할 수 있도록 RPM 형식으로 패키지됩니다.
Red Hat에서 컴파일하지 않은 커널은 Red Hat에서 지원하지 않습니다.
1.2. RPM 패키지 링크 복사링크가 클립보드에 복사되었습니다!
RPM 패키지는 이러한 파일을 설치 및 삭제하는 데 사용되는 파일 및 메타데이터의 아카이브로 구성됩니다. 특히 RPM 패키지에는 다음 부분이 포함되어 있습니다.
- GPG 서명
- GPG 서명은 패키지의 무결성을 확인하는 데 사용됩니다.
- 헤더(패키지 메타데이터)
- RPM 패키지 관리자는 이 메타데이터를 사용하여 패키지 종속성, 파일 설치 위치 및 기타 정보를 확인합니다.
- 페이로드
-
페이로드는 시스템에 설치할 파일이 포함된
cpio아카이브입니다.
RPM 패키지에는 다음 두 가지 유형이 있습니다. 두 유형 모두 파일 형식과 툴링을 공유하지만 콘텐츠가 다르며 다른 용도로 사용됩니다.
소스 RPM(SRPM)
SRPM에는 소스 코드와
사양파일이 포함되어 있으며, 바이너리 RPM에 소스 코드를 빌드하는 방법을 설명합니다. 선택적으로 SRPM은 소스 코드에 대한 패치를 포함할 수 있습니다.바이너리 RPM
바이너리 RPM에는 소스 및 패치에서 빌드된 바이너리가 포함되어 있습니다.
1.3. Linux 커널 RPM 패키지 개요 링크 복사링크가 클립보드에 복사되었습니다!
커널 RPM은 파일이 포함되지 않은 meta 패키지이지만 다음과 같은 필수 하위 패키지가 올바르게 설치되었는지 확인합니다.
kernel-core-
커널의 바이너리 이미지, 시스템을 부트스트랩하기 위한 모든
initramfs- 관련 오브젝트, 핵심 기능을 보장하기 위한 최소 커널 모듈 수를 제공합니다. 이 하위 패키지 자체는 가상화 및 클라우드 환경에서만 사용하여 Red Hat Enterprise Linux 8 커널에 빠른 부팅 시간과 작은 디스크 크기 공간을 제공할 수 있습니다. kernel-modules-
kernel-core에 없는 나머지 커널 모듈을 제공합니다.
위의 작은 커널 하위 패키지 세트는 특히 가상화 및 클라우드 환경에서 시스템 관리자에게 유지 관리 면적을 줄이는 것을 목표로 합니다.
선택적 커널 패키지는 다음과 같습니다.
kernel-modules-extra- 드문 하드웨어에 대한 커널 모듈을 제공합니다. 모듈 로드는 기본적으로 비활성화되어 있습니다.
kernel-debug- 성능 저하를 통해 커널 진단을 위해 사용할 수 있는 많은 디버깅 옵션을 커널에 제공합니다.
kernel-tools- Linux 커널 및 지원 문서를 조작하는 툴을 제공합니다.
kernel-devel-
커널 패키지에 대해 모듈을 빌드하는 데 충분한
커널헤더 및 makefiles를 제공합니다. kernel-abi-stablelists-
외부 Linux 커널 모듈에 필요한 커널 기호 목록과 시행을 지원하는
yum플러그인 등 RHEL 커널 ABI 관련 정보를 제공합니다. kernel-headers- Linux 커널과 사용자 공간 라이브러리 및 프로그램 간의 인터페이스를 지정하는 C 헤더 파일이 포함되어 있습니다. 헤더 파일은 대부분의 표준 프로그램을 빌드하는 데 필요한 구조와 상수를 정의합니다.
1.4. 커널 패키지의 콘텐츠 표시 링크 복사링크가 클립보드에 복사되었습니다!
리포지토리를 쿼리하면 커널 패키지가 모듈과 같은 특정 파일을 제공하는지 확인할 수 있습니다. 파일 목록을 표시하기 위해 패키지를 다운로드하거나 설치할 필요는 없습니다.
dnf 유틸리티를 사용하여 kernel-core,kernel-modules-core 또는 kernel-modules 패키지의 파일 목록을 쿼리합니다. 커널 패키지는 파일이 포함되어 있지 않은 메타 패키지입니다.
프로세스
사용 가능한 패키지 버전을 나열합니다.
yum repoquery <package_name>
$ yum repoquery <package_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지에 있는 파일 목록을 표시합니다.
yum repoquery -l <package_name>
$ yum repoquery -l <package_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. 특정 커널 버전 설치 링크 복사링크가 클립보드에 복사되었습니다!
yum 패키지 관리자를 사용하여 새 커널을 설치합니다.
프로세스
특정 커널 버전을 설치하려면 다음 명령을 입력합니다.
yum install kernel-5.14.0
# yum install kernel-5.14.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. 커널 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
yum 패키지 관리자를 사용하여 커널을 업데이트합니다.
프로세스
커널을 업데이트하려면 다음 명령을 입력합니다.
yum update kernel
# yum update kernelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 모든 종속 항목과 함께 커널을 사용 가능한 최신 버전으로 업데이트합니다.
- 변경 사항을 적용하려면 시스템을 재부팅합니다.
RHEL 7에서 RHEL 8로 업그레이드할 때 RHEL 7에서 RHEL 8로 업그레이드 섹션의 관련 섹션을 따르십시오.
1.7. 커널을 기본값으로 설정 링크 복사링크가 클립보드에 복사되었습니다!
grubby 명령줄 툴과 GRUB을 사용하여 특정 커널을 기본값으로 설정합니다.
프로세스
grubby툴을 사용하여 커널을 기본값으로 설정합니다.grubby툴을 사용하여 커널을 기본값으로 설정하려면 다음 명령을 입력합니다.grubby --set-default $kernel_path
# grubby --set-default $kernel_pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은
.conf접미사가 없는 머신 ID를 인수로 사용합니다.참고시스템 ID는
/boot/loader/entries/디렉터리에 있습니다.
id인수를 사용하여 커널을 기본값으로 설정합니다.id인수를 사용하여 부팅 항목을 나열한 다음 의도한 커널을 기본값으로 설정합니다.grubby --info ALL | grep id grubby --set-default /boot/vmlinuz-<version>.<architecture>
# grubby --info ALL | grep id # grubby --set-default /boot/vmlinuz-<version>.<architecture>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고title인수를 사용하여 부팅 항목을 나열하려면# grubby --info=ALL | grep title명령을 실행합니다.
다음 부팅에 대해서만 기본 커널을 설정합니다.
다음 명령을 실행하여
grub2-reboot명령을 사용하여 다음 재부팅에만 기본 커널을 설정합니다.grub2-reboot <index|title|id>
# grub2-reboot <index|title|id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주의신중하게 다음 부팅에 대해서만 기본 커널을 설정합니다. 새 커널 RPM을 설치하고 자체 빌드 커널을 설치하고
/boot/loader/entries/디렉터리에 항목을 수동으로 추가하면 인덱스 값이 변경될 수 있습니다.
2장. 커널 모듈 관리 링크 복사링크가 클립보드에 복사되었습니다!
커널 모듈, 정보 표시 방법, 커널 모듈을 사용하여 기본 관리 작업을 수행하는 방법에 대해 알아보십시오.
2.1. 커널 모듈 소개 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 커널은 시스템을 재부팅하지 않고도 선택적 추가 기능을 제공하는 커널 모듈을 사용하여 확장할 수 있습니다. RHEL 8에서 커널 모듈은 압축된 < KERNEL_MODULE_NAME>.ko.xz 오브젝트 파일에 빌드된 추가 커널 코드입니다.
커널 모듈에서 활성화하는 가장 일반적인 기능은 다음과 같습니다.
- 새 하드웨어에 대한 지원을 추가하는 장치 드라이버
- polkit2 또는 NFS와 같은 파일 시스템 지원
- 시스템 호출
최신 시스템에서는 필요한 경우 커널 모듈이 자동으로 로드됩니다. 그러나 경우에 따라 모듈을 수동으로 로드하거나 언로드해야 합니다.
커널과 마찬가지로 모듈은 동작을 사용자 지정하는 매개 변수를 허용합니다.
커널 툴을 사용하여 모듈에서 다음 작업을 수행할 수 있습니다.
- 현재 실행 중인 모듈을 검사합니다.
- 커널에 로드할 수 있는 모듈을 검사합니다.
- 모듈에서 허용하는 매개변수를 검사합니다.
- 커널 모듈을 실행 중인 커널에 로드 및 언로드하는 메커니즘을 활성화합니다.
2.2. 커널 모듈 종속 항목 링크 복사링크가 클립보드에 복사되었습니다!
특정 커널 모듈은 하나 이상의 다른 커널 모듈에 종속되는 경우가 있습니다. /lib/modules/<KERNEL_VERSION>/modules.dep 파일에는 해당 커널 버전에 대한 전체 커널 모듈 종속 항목 목록이 포함되어 있습니다.
depmod
종속성 파일은 kmod 패키지에 포함된 depmod 프로그램에 의해 생성됩니다. kmod 에서 제공하는 많은 유틸리티는 작업을 수행할 때 모듈 종속성을 고려합니다. 따라서 수동 종속성 추적이 거의 필요하지 않습니다.
커널 모듈 코드는 무제한 모드의 커널 공간에서 실행됩니다. 어떤 모듈을 로드하고 있는지에 유의하십시오.
weak-modules
Red Hat Enterprise Linux는 depmod 외에도 kmod 패키지의 일부인 weak-modules 스크립트를 제공합니다. weak-modules 는 설치된 커널과 호환되는 kABI와 호환되는 모듈을 결정합니다. 모듈 커널 호환성을 확인하는 동안 약한 모듈은 빌드된 커널의 상위 릴리스에서 더 낮은 종속성을 나타냅니다. 커널 릴리스와 독립적으로 각 모듈을 처리합니다.
2.3. 설치된 커널 모듈 나열 링크 복사링크가 클립보드에 복사되었습니다!
grubby --info=ALL 명령은 !BLS 및 BLS 설치에 설치된 커널의 인덱싱된 목록을 표시합니다.
프로세스
다음 명령을 사용하여 설치된 커널을 나열합니다.
grubby --info=ALL | grep title
# grubby --info=ALL | grep titleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 설치된 모든 커널 목록은 다음과 같이 표시됩니다.
title=Red Hat Enterprise Linux (4.18.0-20.el8.x86_64) 8.0 (Ootpa) title=Red Hat Enterprise Linux (4.18.0-19.el8.x86_64) 8.0 (Ootpa) title=Red Hat Enterprise Linux (4.18.0-12.el8.x86_64) 8.0 (Ootpa) title=Red Hat Enterprise Linux (4.18.0) 8.0 (Ootpa) title=Red Hat Enterprise Linux (0-rescue-2fb13ddde2e24fde9e6a246a942caed1) 8.0 (Ootpa)
title=Red Hat Enterprise Linux (4.18.0-20.el8.x86_64) 8.0 (Ootpa) title=Red Hat Enterprise Linux (4.18.0-19.el8.x86_64) 8.0 (Ootpa) title=Red Hat Enterprise Linux (4.18.0-12.el8.x86_64) 8.0 (Ootpa) title=Red Hat Enterprise Linux (4.18.0) 8.0 (Ootpa) title=Red Hat Enterprise Linux (0-rescue-2fb13ddde2e24fde9e6a246a942caed1) 8.0 (Ootpa)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
GRUB 메뉴에서 설치된 grubby-8.40-17 커널 목록입니다.
2.4. 현재 로드된 커널 모듈 나열 링크 복사링크가 클립보드에 복사되었습니다!
현재 로드된 커널 모듈을 확인합니다.
사전 요구 사항
-
kmod패키지가 설치되어 있습니다.
프로세스
현재 로드된 모든 커널 모듈을 나열하려면 다음을 입력합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 예에서는 다음을 수행합니다.
-
Module열은 현재 로드된 모듈의 이름을 제공합니다. -
Size열에는 모듈당 메모리 양이 킬로바이트로 표시됩니다. -
Used by열에는 특정 모듈에 종속되 는 모듈의 이름과 숫자(선택 사항)가 표시됩니다.
-
2.5. 설치된 모든 커널 나열 링크 복사링크가 클립보드에 복사되었습니다!
grubby 유틸리티를 사용하여 시스템에 설치된 모든 커널을 나열합니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
설치된 모든 커널을 나열하려면 다음을 입력합니다.
grubby --info=ALL | grep ^kernel kernel="/boot/vmlinuz-4.18.0-305.10.2.el8_4.x86_64" kernel="/boot/vmlinuz-4.18.0-240.el8.x86_64" kernel="/boot/vmlinuz-0-rescue-41eb2e172d7244698abda79a51778f1b"
# grubby --info=ALL | grep ^kernel kernel="/boot/vmlinuz-4.18.0-305.10.2.el8_4.x86_64" kernel="/boot/vmlinuz-4.18.0-240.el8.x86_64" kernel="/boot/vmlinuz-0-rescue-41eb2e172d7244698abda79a51778f1b"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
출력에는 설치된 모든 커널의 경로와 버전이 표시됩니다.
2.6. 커널 모듈에 대한 정보 표시 링크 복사링크가 클립보드에 복사되었습니다!
modinfo 명령을 사용하여 지정된 커널 모듈에 대한 몇 가지 세부 정보를 표시합니다.
사전 요구 사항
-
kmod패키지가 설치되어 있습니다.
프로세스
커널 모듈에 대한 정보를 표시하려면 다음을 입력합니다.
modinfo <KERNEL_MODULE_NAME>
$ modinfo <KERNEL_MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로드 여부에 관계없이 사용 가능한 모든 모듈에 대한 정보를 쿼리할 수 있습니다.
parm항목은 사용자가 모듈에 설정할 수 있는 매개 변수와 필요한 값 유형을 표시합니다.참고커널 모듈의 이름을 입력할 때 이름 끝에
.ko.xz확장을 추가하지 마십시오. 커널 모듈 이름에는 확장이 없습니다. 해당 파일은 해당 파일입니다.
2.7. 시스템 런타임 시 커널 모듈 로드 링크 복사링크가 클립보드에 복사되었습니다!
Linux 커널의 기능을 확장하는 최적의 방법은 커널 모듈을 로드하는 것입니다. modprobe 명령을 사용하여 커널 모듈을 찾고 현재 실행 중인 커널에 로드합니다.
이 절차에 설명된 변경 사항은 시스템을 재부팅한 후 유지되지 않습니다. 시스템 재부팅 시 지속 되도록 커널 모듈을 로드하는 방법에 대한 자세한 내용은 시스템 부팅 시 커널 모듈 로드 를 참조하십시오.
사전 요구 사항
- 루트 권한
-
kmod패키지가 설치되어 있습니다. - 해당 커널 모듈이 로드되지 않습니다. 이 경우 현재 로드된 커널 모듈을 나열하십시오.
프로세스
로드할 커널 모듈을 선택합니다.
모듈은
/lib/modules/$(uname -r)/kernel/<SUBSYSTEM>/디렉터리에 있습니다.관련 커널 모듈을 로드합니다.
modprobe <MODULE_NAME>
# modprobe <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고커널 모듈의 이름을 입력할 때 이름 끝에
.ko.xz확장을 추가하지 마십시오. 커널 모듈 이름에는 확장이 없습니다. 해당 파일은 해당 파일입니다.
검증
선택적으로 관련 모듈이 로드되었는지 확인합니다.
lsmod | grep <MODULE_NAME>
$ lsmod | grep <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈이 올바르게 로드된 경우 이 명령은 관련 커널 모듈을 표시합니다. 예를 들면 다음과 같습니다.
lsmod | grep serio_raw serio_raw 16384 0
$ lsmod | grep serio_raw serio_raw 16384 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8. 시스템 런타임 시 커널 모듈 언로드 링크 복사링크가 클립보드에 복사되었습니다!
실행 중인 커널에서 특정 커널 모듈을 언로드하려면 modprobe 명령을 사용하여 현재 로드된 커널에서 시스템 런타임에 커널 모듈을 찾아서 언로드합니다.
불안정하거나 작동하지 않는 시스템으로 이어질 수 있으므로 실행 중인 시스템에서 사용하는 커널 모듈을 언로드해서는 안 됩니다.
비활성 커널 모듈의 언로드를 완료한 후 부팅 시 자동으로 로드되도록 정의된 모듈은 시스템을 재부팅한 후 언로드되지 않습니다. 이 결과를 방지하는 방법에 대한 자세한 내용은 시스템 부팅 시 커널 모듈이 자동으로 로드되지 않도록 를 참조하십시오.
사전 요구 사항
- root 권한이 있습니다.
-
kmod패키지가 설치되어 있습니다.
프로세스
로드된 모든 커널 모듈을 나열합니다.
lsmod
# lsmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow 언로드할 커널 모듈을 선택합니다.
커널 모듈에 종속 항목이 있는 경우 커널 모듈을 언로드하기 전에 해당 모듈을 언로드합니다. 종속 항목이 있는 모듈 식별에 대한 자세한 내용은 현재 로드된 커널 모듈 및 커널 모듈 종속성 목록을 참조하십시오.
관련 커널 모듈을 언로드합니다.
modprobe -r <MODULE_NAME>
# modprobe -r <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈의 이름을 입력할 때 이름 끝에
.ko.xz확장을 추가하지 마십시오. 커널 모듈 이름에는 확장이 없습니다. 해당 파일은 해당 파일입니다.
검증
선택적으로 관련 모듈이 언로드되었는지 확인합니다.
lsmod | grep <MODULE_NAME>
$ lsmod | grep <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈이 성공적으로 언로드되면 이 명령은 출력을 표시하지 않습니다.
2.9. 부팅 프로세스의 초기 단계에서 커널 모듈 언로드 링크 복사링크가 클립보드에 복사되었습니다!
예를 들어, 특정 상황에서는 커널 모듈에 시스템이 응답하지 않게 하는 코드가 있고 사용자가 악성 커널 모듈을 영구적으로 비활성화하기 위해 단계에 도달할 수 없는 경우 부팅 프로세스 초기에 커널 모듈을 언로드해야 할 수 있습니다. 커널 모듈의 로드를 일시적으로 차단하려면 부트 로더를 사용할 수 있습니다.
관련 부트 로더 항목을 편집하여 부팅 시퀀스를 계속하기 전에 필요한 커널 모듈을 언로드할 수 있습니다.
이 절차에 설명된 변경 사항은 다음 재부팅 후에도 유지되지 않습니다. 부팅 프로세스 중에 자동으로 로드되지 않도록 커널 모듈을 거부 목록에 추가하는 방법에 대한 자세한 내용은 시스템 부팅 시 커널 모듈이 자동으로 로드되지 않도록 를 참조하십시오.
사전 요구 사항
- 어떤 이유로 로드되지 않도록하려는 로드 가능한 커널 모듈이 있습니다.
프로세스
- 시스템을 부트 로더로 부팅합니다.
- 커서 키를 사용하여 관련 부트 로더 항목을 강조 표시합니다.
e 키를 눌러 항목을 편집합니다.
- 커서 키를 사용하여 linux 로 시작하는 행으로 이동합니다.
행 끝에
modprobe.blacklist=module_name을 추가합니다.그림 2.2. 커널 부팅 항목
serio_raw커널 모듈은 부팅 프로세스 초기에 언로드되는 악의적인 모듈을 보여줍니다.- Ctrl+X 눌러 수정된 구성을 사용하여 부팅합니다.
검증
시스템이 부팅된 후 관련 커널 모듈이 로드되지 않았는지 확인합니다.
lsmod | grep serio_raw
# lsmod | grep serio_rawCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10. 시스템 부팅 시 커널 모듈 자동 로드 링크 복사링크가 클립보드에 복사되었습니다!
부팅 프로세스 중에 자동으로 로드되도록 커널 모듈을 구성합니다.
사전 요구 사항
- 루트 권한
-
kmod패키지가 설치되어 있습니다.
프로세스
부팅 프로세스 중에 로드할 커널 모듈을 선택합니다.
모듈은
/lib/modules/$(uname -r)/kernel/<SUBSYSTEM>/디렉터리에 있습니다.모듈에 대한 구성 파일을 생성합니다.
echo <MODULE_NAME> > /etc/modules-load.d/<MODULE_NAME>.conf
# echo <MODULE_NAME> > /etc/modules-load.d/<MODULE_NAME>.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고커널 모듈의 이름을 입력할 때 이름 끝에
.ko.xz확장을 추가하지 마십시오. 커널 모듈 이름에는 확장이 없습니다. 해당 파일은 해당 파일입니다.
검증
재부팅 후 관련 모듈이 로드되었는지 확인합니다.
lsmod | grep <MODULE_NAME>
$ lsmod | grep <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
이 절차에 설명된 변경 사항은 시스템을 재부팅한 후 지속됩니다.
2.11. 시스템 부팅 시 커널 모듈이 자동으로 로드되지 않음 링크 복사링크가 클립보드에 복사되었습니다!
modprobe 구성 파일에 해당 명령을 사용하여 모듈을 나열하여 부팅 프로세스 중에 시스템이 커널 모듈을 자동으로 로드하지 못하도록 할 수 있습니다.
사전 요구 사항
-
이 절차의 명령에는 root 권한이 필요합니다.
su -를 사용하여 root 사용자로 전환하거나sudo를 사용하여 명령 앞에 추가합니다. -
kmod패키지가 설치되어 있습니다. - 현재 시스템 구성에 거부하려는 커널 모듈이 필요하지 않은지 확인합니다.
프로세스
lsmod명령을 사용하여 현재 실행 중인 커널에 로드된 모듈을 나열합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에서 로드되지 않도록 할 모듈을 식별합니다.
또는
/lib/modules/ <KERNEL-VERSION> /kernel/ <SUBSYSTEM> / 디렉터리에 잠재적으로 로드되지 않도록하려는 언로드된 커널모듈을 식별합니다. 예를 들면 다음과 같습니다.ls /lib/modules/4.18.0-477.20.1.el8_8.x86_64/kernel/crypto/ ansi_cprng.ko.xz chacha20poly1305.ko.xz md4.ko.xz serpent_generic.ko.xz anubis.ko.xz cmac.ko.xz…
$ ls /lib/modules/4.18.0-477.20.1.el8_8.x86_64/kernel/crypto/ ansi_cprng.ko.xz chacha20poly1305.ko.xz md4.ko.xz serpent_generic.ko.xz anubis.ko.xz cmac.ko.xz…Copy to Clipboard Copied! Toggle word wrap Toggle overflow
거부 목록 역할을 하는 구성 파일을 생성합니다.
touch /etc/modprobe.d/denylist.conf
# touch /etc/modprobe.d/denylist.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택한 텍스트 편집기에서
blacklist설정 명령과 함께 커널 자동 로드에서 제외할 모듈 이름을 결합합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow blacklist명령은 모듈이 거부 목록에 없는 다른 커널 모듈의 종속성으로 로드되지 않도록 하려면설치행도 정의해야 합니다. 이 경우 시스템은 모듈을 설치하는 대신/bin/false를 실행합니다. 해시 기호로 시작하는 행은 파일을 더 읽기 쉽게 만드는 데 사용할 수 있는 주석입니다.참고커널 모듈의 이름을 입력할 때 이름 끝에
.ko.xz확장을 추가하지 마십시오. 커널 모듈 이름에는 확장이 없습니다. 해당 파일은 해당 파일입니다.다시 빌드하기 전에 현재 초기 RAM 디스크 이미지의 백업 사본을 생성합니다.
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 커널 모듈이 자동 로드되지 않도록하려는 커널 버전에 해당하는 초기 RAM 디스크 이미지의 백업 사본을 생성합니다.
cp /boot/initramfs-<VERSION>.img /boot/initramfs-<VERSION>.img.bak.$(date +%m-%d-%H%M%S)
# cp /boot/initramfs-<VERSION>.img /boot/initramfs-<VERSION>.img.bak.$(date +%m-%d-%H%M%S)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
새 초기 RAM 디스크 이미지를 생성하여 변경 사항을 적용합니다.
dracut -f -v
# dracut -f -vCopy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 시스템과 다른 커널 버전의 초기 RAM 디스크 이미지를 빌드하는 경우 target
initramfs및 커널 버전을 모두 지정합니다.dracut -f -v /boot/initramfs-<TARGET-VERSION>.img <CORRESPONDING-TARGET-KERNEL-VERSION>
# dracut -f -v /boot/initramfs-<TARGET-VERSION>.img <CORRESPONDING-TARGET-KERNEL-VERSION>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
시스템을 다시 시작하십시오.
reboot
$ rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
이 절차에 설명된 변경 사항은 시스템을 재부팅한 후 적용되고 지속됩니다. 거부 목록에 키 커널 모듈을 잘못 나열하는 경우 시스템을 불안정하거나 작동하지 않는 상태로 전환할 수 있습니다.
2.12. 사용자 정의 커널 모듈 컴파일 링크 복사링크가 클립보드에 복사되었습니다!
하드웨어 및 소프트웨어 수준에서 다양한 구성에서 요청한 대로 샘플링 커널 모듈을 빌드할 수 있습니다.
사전 요구 사항
kernel-devel,gcc및elfutils-libelf-devel패키지를 설치했습니다.dnf install kernel-devel-$(uname -r) gcc elfutils-libelf-devel
# dnf install kernel-devel-$(uname -r) gcc elfutils-libelf-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 권한이 있습니다.
-
사용자 지정 커널 모듈을 컴파일하는
/root/testmodule/디렉터리를 생성하셨습니다.
프로세스
다음 콘텐츠를 사용하여
/root/testmodule/test.c파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow test.c파일은 커널 모듈에 주요 기능을 제공하는 소스 파일입니다. 파일은 조직을 위해 전용/root/testmodule/디렉터리에 생성되었습니다. 모듈 컴파일 후/root/testmodule/디렉터리에 여러 파일이 포함됩니다.test.c파일에는 시스템 라이브러리에서 포함됩니다.-
예제 코드에서
printk()함수에linux/kernel.h헤더 파일이 필요합니다. -
linux/module.h헤더 파일에는 여러 C 소스 파일에서 공유하는 함수 선언 및 매크로 정의가 포함되어 있습니다.
-
예제 코드에서
-
init_module()및cleanup_module()함수를 따라 텍스트를 출력하는 커널 로깅 함수printk()를 시작하고 종료합니다. 다음 콘텐츠를 사용하여
/root/testmodule/Makefile파일을 만듭니다.obj-m := test.o
obj-m := test.oCopy to Clipboard Copied! Toggle word wrap Toggle overflow Makefile에는 컴파일러가
test.o라는 오브젝트 파일을 생성하기 위한 지침이 포함되어 있습니다.obj-m지시문은 결과test.ko파일이 로드 가능한 커널 모듈로 컴파일되도록 지정합니다. 또는obj-y지시문은test.ko를 기본 제공 커널 모듈로 빌드하도록 지시할 수 있습니다.커널 모듈을 컴파일합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컴파일러는 최종 커널 모듈 (
test.ko)에 함께 연결하기 전에 각 소스 파일 (test.c)에 대한 오브젝트 파일 (test.o)을 중간 단계로 생성합니다.성공적으로 컴파일한 후
/root/testmodule/에는 컴파일된 사용자 지정 커널 모듈과 관련된 추가 파일이 포함되어 있습니다. 컴파일된 모듈 자체는test.ko파일로 표시됩니다.
검증
선택 사항:
/root/testmodule/디렉터리의 내용을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을
/lib/modules/$(uname -r)/디렉터리에 복사합니다.cp /root/testmodule/test.ko /lib/modules/$(uname -r)/
# cp /root/testmodule/test.ko /lib/modules/$(uname -r)/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈식 종속성 목록을 업데이트합니다.
depmod -a
# depmod -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을 로드합니다.
modprobe -v test insmod /lib/modules/4.18.0-305.el8.x86_64/test.ko
# modprobe -v test insmod /lib/modules/4.18.0-305.el8.x86_64/test.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈이 성공적으로 로드되었는지 확인합니다.
lsmod | grep test test 16384 0
# lsmod | grep test test 16384 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 링 버퍼에서 최신 메시지를 읽습니다.
dmesg [74422.545004] Hello World This is a test# dmesg [74422.545004] Hello World This is a testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3장. Secure Boot의 커널 및 모듈에 서명 링크 복사링크가 클립보드에 복사되었습니다!
서명된 커널 및 서명된 커널 모듈을 사용하여 시스템의 보안을 강화할 수 있습니다. Secure Boot가 활성화된 UEFI 기반 빌드 시스템에서는 개인 빌드 커널 또는 커널 모듈을 자체 서명할 수 있습니다. 또한 커널 또는 커널 모듈을 배포하려는 대상 시스템으로 공개 키를 가져올 수 있습니다.
Secure Boot가 활성화된 경우 다음 구성 요소를 모두 개인 키로 서명하고 해당 공개 키로 인증해야 합니다.
- UEFI 운영 체제 부트 로더
- Red Hat Enterprise Linux 커널
- 모든 커널 모듈
이러한 구성 요소 중 하나라도 서명 및 인증되지 않은 경우 시스템에서 부팅 프로세스를 완료할 수 없습니다.
RHEL 8에는 다음이 포함됩니다.
- 서명된 부트 로더
- 서명된 커널
- 서명된 커널 모듈
또한 서명된 첫 번째 단계 부트 로더 및 서명된 커널에는 Red Hat 공개 키가 포함되어 있습니다. 이러한 서명된 실행 바이너리 및 임베디드 키를 사용하면 RHEL 8에서 Microsoft UEFI Secure Boot Certification Authority 키를 사용하여 설치, 부팅 및 실행할 수 있습니다. 이러한 키는 UEFI Secure Boot를 지원하는 시스템의 UEFI 펌웨어에서 제공합니다.
- 일부 UEFI 기반 시스템에서 Secure Boot에 대한 지원이 포함된 것은 아닙니다.
- 커널 모듈을 빌드하고 서명하는 빌드 시스템은 UEFI Secure Boot를 활성화할 필요가 없으며 UEFI 기반 시스템일 필요도 없습니다.
3.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
외부 빌드 커널 모듈에 서명하려면 다음 패키지에서 유틸리티를 설치합니다.
yum install pesign openssl kernel-devel mokutil keyutils
# yum install pesign openssl kernel-devel mokutil keyutilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 표 3.1. 필수 유틸리티 유틸리티 패키지에서 제공 사용 위치 목적 efikeygenpesign빌드 시스템
공개 및 개인 X.509 키 쌍 생성
OpenSSLOpenSSL빌드 시스템
암호화되지 않은 개인 키 내보내기
sign-filekernel-devel빌드 시스템
개인 키로 커널 모듈에 서명하는 데 사용되는 실행 파일
mokutilmokutil대상 시스템
공개 키를 수동으로 등록하는 데 사용되는 선택적 유틸리티
keyctlkeyutils대상 시스템
시스템 인증 키에 공개 키를 표시하는 데 사용되는 선택적 유틸리티
3.2. UEFI Secure Boot 링크 복사링크가 클립보드에 복사되었습니다!
UEFI( Unified Extensible Firmware Interface ) Secure Boot 기술을 사용하면 신뢰할 수 있는 키로 서명되지 않은 커널 공간 코드의 실행을 방지할 수 있습니다. 시스템 부트 로더는 암호화 키를 사용하여 서명됩니다. 펌웨어의 공개 키 데이터베이스에는 키에 서명하는 프로세스가 권한이 부여됩니다. 나중에 다음 단계 부트 로더 및 커널에서 서명을 확인할 수 있습니다.
UEFI Secure Boot는 다음과 같이 펌웨어에서 서명된 드라이버 및 커널 모듈에 대한 신뢰 체인을 설정합니다.
-
UEFI 개인 키 서명과 공개 키는
shim첫 번째 단계 부트 로더를 인증합니다. CA( 인증 기관 )는 공개 키에 서명합니다. CA는 펌웨어 데이터베이스에 저장됩니다. -
shim파일에는 GRUB 부트 로더 및 커널을 인증하는 Red Hat 공개 키 Red Hat Secure Boot (CA 키 1) 가 포함되어 있습니다. - 커널에는 드라이버 및 모듈을 인증하는 공개 키가 포함되어 있습니다.
Secure Boot는 UEFI 사양의 부팅 경로 검증 구성 요소입니다. 사양은 다음을 정의합니다.
- 비휘발성 스토리지에서 암호로 보호되는 UEFI 변수를 위한 프로그래밍 인터페이스입니다.
- UEFI 변수에 신뢰할 수 있는 X.509 루트 인증서를 저장합니다.
- 부트 로더 및 드라이버와 같은 UEFI 애플리케이션 검증.
- 알려진-bad 인증서 및 애플리케이션 해시를 취소하는 절차입니다.
UEFI Secure Boot는 무단 변경 사항을 감지하는 데 도움이 되지만 다음과 같은 것은 아닙니다.
- 두 번째 단계 부트 로더의 설치 또는 제거를 방지합니다.
- 이러한 변경에 대한 명확한 사용자 확인이 필요합니다.
- 부팅 경로 조작을 중지합니다. 서명은 부팅 중에 확인되지만 부트 로더가 설치 또는 업데이트되는 경우는 아닙니다.
부트 로더 또는 커널을 신뢰할 수 있는 시스템에서 서명하지 않은 경우 Secure Boot는 시작할 수 없습니다.
3.3. UEFI Secure Boot 지원 링크 복사링크가 클립보드에 복사되었습니다!
커널과 로드된 모든 드라이버가 신뢰할 수 있는 키로 서명된 경우 UEFI Secure Boot가 활성화된 시스템에서 RHEL 8을 설치하고 실행할 수 있습니다. Red Hat은 관련 Red Hat 키로 서명 및 인증된 커널 및 드라이버를 제공합니다.
외부에서 빌드된 커널 또는 드라이버를 로드하려면 서명해야 합니다.
UEFI Secure Boot에서 지정한 제한 사항
- 이 시스템은 서명이 올바르게 인증된 후에만 커널 모드 코드를 실행합니다.
- GRUB 모듈 서명 및 확인에 대한 인프라가 없기 때문에 GRUB 모듈 로드가 비활성화됩니다. 모듈 로드를 허용하면 Secure Boot에서 정의한 보안 내에서 신뢰할 수 없는 코드가 실행됩니다.
- Red Hat은 RHEL 8에서 지원되는 모든 모듈이 포함된 서명된 GRUB 바이너리를 제공합니다.
3.4. X.509 키를 사용하여 커널 모듈을 인증하기 위한 요구사항 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8에서 커널 모듈이 로드되면 커널은 커널 시스템 인증 키(.builtin_trusted_keys) 및 커널 플랫폼 인증 키(.platform)에서 공개 X.509 키에 대해 모듈 서명을 확인합니다. .platform 키링은 타사 플랫폼 공급자 및 사용자 지정 공개 키의 키를 제공합니다. 커널 시스템 .blacklist 키링의 키는 확인에서 제외됩니다.
UEFI Secure Boot 기능이 활성화된 시스템에서 커널 모듈을 로드하려면 특정 조건을 충족해야 합니다.
UEFI Secure Boot가 활성화되어 있거나
module.sig_enforce커널 매개변수가 지정된 경우:-
서명이 시스템 인증 키(
.builtin_trusted_keys) 및 플랫폼 인증 키(.platform)의 키에 대해 인증된 서명된 커널 모듈만 로드할 수 있습니다. -
공개 키는 시스템에서 취소된 키 인증 키링(
.blacklist)에 있으면 안 됩니다.
-
서명이 시스템 인증 키(
UEFI Secure Boot가 비활성화되고
module.sig_enforce커널 매개변수가 지정되지 않은 경우:- 공개 키 없이 서명되지 않은 커널 모듈과 서명된 커널 모듈을 로드할 수 있습니다.
시스템이 UEFI 기반이 아니거나 UEFI Secure Boot가 비활성화된 경우:
-
커널에 내장된 키만
.builtin_trusted_keys및.platform에 로드됩니다. - 커널을 다시 빌드하지 않고도 이러한 키 세트를 늘릴 수 없습니다.
-
커널에 내장된 키만
| 서명된 모듈 | 공개 키 확인 및 유효한 서명 | UEFI Secure Boot 상태 | sig_enforce | 모듈 로드 | 커널 테인트됨 |
|---|---|---|---|---|---|
| 서명되지 않음 | - | 활성화되지 않음 | 활성화되지 않음 | 성공 | 제공됨 |
| 활성화되지 않음 | 활성화됨 | 실패 | - | ||
| 활성화됨 | - | 실패 | - | ||
| 서명됨 | 없음 | 활성화되지 않음 | 활성화되지 않음 | 성공 | 제공됨 |
| 활성화되지 않음 | 활성화됨 | 실패 | - | ||
| 활성화됨 | - | 실패 | - | ||
| 서명됨 | 제공됨 | 활성화되지 않음 | 활성화되지 않음 | 성공 | 없음 |
| 활성화되지 않음 | 활성화됨 | 성공 | 없음 | ||
| 활성화됨 | - | 성공 | 없음 |
3.5. 공개 키 소스 링크 복사링크가 클립보드에 복사되었습니다!
부팅 중에 커널은 영구 키 저장소 집합의 X.509 키를 다음 인증 키로 로드합니다.
-
시스템 인증 키(
.builtin_trusted_keys) -
.platform키링 -
시스템
.blacklist키링
| X.509 키 소스 | 키 추가 가능 | UEFI Secure Boot 상태 | 부팅 중 로드된 키 |
|---|---|---|---|
| 커널에 내장됨 | 없음 | - |
|
|
UEFI | 제한됨 | 활성화되지 않음 | 없음 |
| 활성화됨 |
| ||
|
| 없음 | 활성화되지 않음 | 없음 |
| 활성화됨 |
| ||
| Machine Owner Key (MOK) 목록 | 제공됨 | 활성화되지 않음 | 없음 |
| 활성화됨 |
|
.builtin_trusted_keys- 부팅 시 빌드되는 인증 키입니다.
- 신뢰할 수 있는 공개 키를 제공합니다.
-
키를 보려면
root권한이 필요합니다.
.platform- 부팅 시 빌드되는 인증 키입니다.
- 타사 플랫폼 공급자 및 사용자 지정 공개 키의 키를 제공합니다.
-
키를 보려면
root권한이 필요합니다.
.blacklist- 취소된 X.509 키가 있는 인증 키입니다.
-
공개 키가
.builtin_trusted_keys인 경우에도.blacklist의 키로 서명된 모듈은 인증에 실패합니다.
- UEFI Secure Boot
db - 서명 데이터베이스입니다.
- UEFI 애플리케이션, UEFI 드라이버 및 부트 로더의 키(hashes)를 저장합니다.
- 키는 머신에 로드할 수 있습니다.
- UEFI Secure Boot
dbx - 취소된 서명 데이터베이스입니다.
- 키가 로드되지 않도록 합니다.
-
이 데이터베이스의 취소된 키는
.blacklist인증 키에 추가됩니다.
3.6. 공개 및 개인 키 쌍 생성 링크 복사링크가 클립보드에 복사되었습니다!
Secure Boot 지원 시스템에서 사용자 지정 커널 또는 사용자 지정 커널 모듈을 사용하려면 공개 및 개인 X.509 키 쌍을 생성해야 합니다. 생성된 개인 키를 사용하여 커널 또는 커널 모듈에 서명할 수 있습니다. Secure Boot의 MOK(Machine Owner Key)에 해당 공개 키를 추가하여 서명된 커널 또는 커널 모듈을 검증할 수도 있습니다.
강력한 보안 조치와 액세스 정책을 적용하여 개인 키의 콘텐츠를 보호합니다. 잘못된 핸드에서는 키를 사용하여 해당 공개 키로 인증된 시스템을 손상시킬 수 있습니다.
프로세스
X.509 공개 및 개인 키 쌍을 생성합니다.
사용자 정의 커널 모듈 만 서명하려는 경우 :
efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --module \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'# efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --module \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 정의 커널에 서명하려면 다음을 수행합니다.
efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --kernel \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'# efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --kernel \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 시스템이 FIPS 모드를 실행하는 경우:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고FIPS 모드에서는
efikeygen이 PKI 데이터베이스에서 기본 "NSS Certificate DB" 토큰을 찾도록--token옵션을 사용해야 합니다.이제 공개 및 개인 키가
/etc/pki/pesign/디렉터리에 저장됩니다.
서명 키의 유효 기간 내에 커널 및 커널 모듈에 서명하는 것이 좋습니다. 그러나 서명 파일 유틸리티는 경고하지 않으며 유효 날짜에 관계없이 RHEL 8에서 키를 사용할 수 있습니다.
3.7. 시스템 인증 키의 출력 예 링크 복사링크가 클립보드에 복사되었습니다!
keyutils 패키지에서 keyctl 유틸리티를 사용하여 시스템 인증 키의 키에 대한 정보를 표시할 수 있습니다.
사전 요구 사항
- root 권한이 있습니다.
-
keyutils패키지에서keyctl유틸리티를 설치했습니다.
예 3.1. 인증 키 출력
다음은 UEFI Secure Boot가 활성화된 RHEL 8 시스템의 .builtin_trusted_keys,.platform 및 .blacklist 키링의 단축된 예제 출력입니다.
예제의 .builtin_trusted_keys 인증 키는 shim 부트 로더에 포함된 UEFI Secure Boot db 키와 Red Hat Secure Boot (CA 키 1) 에서 두 개의 키를 추가하는 방법을 보여줍니다.
예 3.2. 커널 콘솔 출력
다음 예제에서는 커널 콘솔 출력을 보여줍니다. 메시지는 UEFI Secure Boot 관련 소스를 사용하여 키를 식별합니다. 여기에는 UEFI Secure Boot db, 포함된 shim 및 MOK 목록이 포함됩니다.
3.8. MOK 목록에 공개 키를 추가하여 대상 시스템에 공개 키 등록 링크 복사링크가 클립보드에 복사되었습니다!
커널 또는 커널 모듈 액세스를 위해 시스템에서 공개 키를 인증하고 대상 시스템의 플랫폼 인증 키링(.platform)에 등록해야 합니다. RHEL 8이 Secure Boot가 활성화된 UEFI 기반 시스템에서 부팅되면 커널은 db 키 데이터베이스에서 공개 키를 가져오고 dbx 데이터베이스에서 취소된 키를 제외합니다.
MOK(Machine Owner Key) 기능을 사용하면 UEFI Secure Boot 키 데이터베이스를 확장할 수 있습니다. Secure Boot가 활성화된 UEFI 지원 시스템에서 RHEL 8을 부팅할 때 MOK 목록의 키는 Secure Boot 데이터베이스의 키와 함께 플랫폼 인증 키링(.platform)에 추가됩니다. MOK 키 목록은 안전하고 영구적으로 저장되지만 Secure Boot 데이터베이스와 별도의 기능입니다.
MOK 기능은 shim,MokManager,GRUB 및 UEFI 기반 시스템에 대한 보안 키 관리 및 인증을 가능하게하는 mokutil 유틸리티에서 지원합니다.
시스템에서 커널 모듈의 인증 서비스를 얻으려면 시스템 공급 업체에서 공개 키를 팩토리 펌웨어 이미지의 UEFI Secure Boot 키 데이터베이스에 통합하도록 요청하는 것이 좋습니다.
사전 요구 사항
- 공개 및 개인 키 쌍을 생성하고 공개 키의 유효 날짜를 알고 있습니다. 자세한 내용은 공개 및 개인 키 쌍 생성을 참조하십시오.
프로세스
공개 키를
sb_cert.cer파일로 내보냅니다.certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cer# certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 공개 키를 MOK 목록으로 가져옵니다.
mokutil --import sb_cert.cer
# mokutil --import sb_cert.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 MOK 등록 요청에 대한 새 암호를 입력합니다.
시스템을 재부팅합니다.
shim부트 로더는 보류 중인 MOK 키 등록 요청을 확인하고MokManager.efi를 시작하여 UEFI 콘솔에서 등록을 완료할 수 있습니다.Enroll MOK를 선택하고, 메시지가 표시되면 이 요청과 이전에 연결된 암호를 입력한 다음 등록을 확인합니다.공개 키는 지속적 MOK 목록에 추가됩니다.
키가 MOK 목록에 있으면 UEFI Secure Boot가 활성화되면 자동으로 이 키링의
.platform인증 키와 후속 부팅으로 전파됩니다.
3.9. 개인 키를 사용하여 커널에 서명 링크 복사링크가 클립보드에 복사되었습니다!
UEFI Secure Boot 메커니즘이 활성화된 경우 서명된 커널을 로드하여 시스템에서 향상된 보안 이점을 얻을 수 있습니다.
사전 요구 사항
- 공개 및 개인 키 쌍을 생성하고 공개 키의 유효 날짜를 알고 있습니다. 자세한 내용은 공개 및 개인 키 쌍 생성을 참조하십시오.
- 대상 시스템에 공개 키를 등록했습니다. 자세한 내용은 MOK 목록에 공개 키를 추가하여 대상 시스템에서 공개 키 등록을 참조하십시오.
- ELF 형식의 커널 이미지가 서명에 사용할 수 있습니다.
프로세스
x64 아키텍처에서 다음을 수행합니다.
서명된 이미지를 생성합니다.
pesign --certificate 'Custom Secure Boot key' \ --in vmlinuz-version \ --sign \ --out vmlinuz-version.signed# pesign --certificate 'Custom Secure Boot key' \ --in vmlinuz-version \ --sign \ --out vmlinuz-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow version을vmlinuz파일의 버전 접미사로 바꾸고Custom Secure Boot 키를이전에 선택한 이름으로 교체합니다.선택 사항: 서명을 확인합니다.
pesign --show-signature \ --in vmlinuz-version.signed# pesign --show-signature \ --in vmlinuz-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명된 이미지로 서명되지 않은 이미지를 덮어씁니다.
mv vmlinuz-version.signed vmlinuz-version
# mv vmlinuz-version.signed vmlinuz-versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow
64비트 ARM 아키텍처에서 다음을 수행합니다.
vmlinuz파일의 압축을 풉니다.zcat vmlinuz-version > vmlinux-version
# zcat vmlinuz-version > vmlinux-versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명된 이미지를 생성합니다.
pesign --certificate 'Custom Secure Boot key' \ --in vmlinux-version \ --sign \ --out vmlinux-version.signed# pesign --certificate 'Custom Secure Boot key' \ --in vmlinux-version \ --sign \ --out vmlinux-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 서명을 확인합니다.
pesign --show-signature \ --in vmlinux-version.signed# pesign --show-signature \ --in vmlinux-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow vmlinux파일을 압축합니다.gzip --to-stdout vmlinux-version.signed > vmlinuz-version
# gzip --to-stdout vmlinux-version.signed > vmlinuz-versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 압축되지 않은
vmlinux파일을 제거합니다.rm vmlinux-version*
# rm vmlinux-version*Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.10. 개인 키를 사용하여 GRUB 빌드에 서명 링크 복사링크가 클립보드에 복사되었습니다!
UEFI Secure Boot 메커니즘이 활성화된 시스템에서 사용자 지정 기존 개인 키로 GRUB 빌드에 서명할 수 있습니다. 사용자 지정 GRUB 빌드를 사용하거나 시스템에서 Microsoft 신뢰 앵커를 제거한 경우 이 작업을 수행해야 합니다.
사전 요구 사항
- 공개 및 개인 키 쌍을 생성하고 공개 키의 유효 날짜를 알고 있습니다. 자세한 내용은 공개 및 개인 키 쌍 생성을 참조하십시오.
- 대상 시스템에 공개 키를 등록했습니다. 자세한 내용은 MOK 목록에 공개 키를 추가하여 대상 시스템에서 공개 키 등록을 참조하십시오.
- 서명에 사용할 수 있는 GRUB EFI 바이너리가 있습니다.
프로세스
x64 아키텍처에서 다음을 수행합니다.
서명된 GRUB EFI 바이너리를 생성합니다.
pesign --in /boot/efi/EFI/redhat/grubx64.efi \ --out /boot/efi/EFI/redhat/grubx64.efi.signed \ --certificate 'Custom Secure Boot key' \ --sign# pesign --in /boot/efi/EFI/redhat/grubx64.efi \ --out /boot/efi/EFI/redhat/grubx64.efi.signed \ --certificate 'Custom Secure Boot key' \ --signCopy to Clipboard Copied! Toggle word wrap Toggle overflow Custom Secure Boot 키를이전에 선택한 이름으로 교체합니다.선택 사항: 서명을 확인합니다.
pesign --in /boot/efi/EFI/redhat/grubx64.efi.signed \ --show-signature# pesign --in /boot/efi/EFI/redhat/grubx64.efi.signed \ --show-signatureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명된 바이너리로 서명되지 않은 바이너리를 덮어씁니다.
mv /boot/efi/EFI/redhat/grubx64.efi.signed \ /boot/efi/EFI/redhat/grubx64.efi# mv /boot/efi/EFI/redhat/grubx64.efi.signed \ /boot/efi/EFI/redhat/grubx64.efiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
64비트 ARM 아키텍처에서 다음을 수행합니다.
서명된 GRUB EFI 바이너리를 생성합니다.
pesign --in /boot/efi/EFI/redhat/grubaa64.efi \ --out /boot/efi/EFI/redhat/grubaa64.efi.signed \ --certificate 'Custom Secure Boot key' \ --sign# pesign --in /boot/efi/EFI/redhat/grubaa64.efi \ --out /boot/efi/EFI/redhat/grubaa64.efi.signed \ --certificate 'Custom Secure Boot key' \ --signCopy to Clipboard Copied! Toggle word wrap Toggle overflow Custom Secure Boot 키를이전에 선택한 이름으로 교체합니다.선택 사항: 서명을 확인합니다.
pesign --in /boot/efi/EFI/redhat/grubaa64.efi.signed \ --show-signature# pesign --in /boot/efi/EFI/redhat/grubaa64.efi.signed \ --show-signatureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명된 바이너리로 서명되지 않은 바이너리를 덮어씁니다.
mv /boot/efi/EFI/redhat/grubaa64.efi.signed \ /boot/efi/EFI/redhat/grubaa64.efi# mv /boot/efi/EFI/redhat/grubaa64.efi.signed \ /boot/efi/EFI/redhat/grubaa64.efiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.11. 개인 키를 사용하여 커널 모듈 서명 링크 복사링크가 클립보드에 복사되었습니다!
UEFI Secure Boot 메커니즘이 활성화된 경우 서명된 커널 모듈을 로드하여 시스템의 보안을 향상시킬 수 있습니다.
서명된 커널 모듈은 UEFI Secure Boot가 비활성화되거나 비UEFI 시스템에서도 로드할 수 있습니다. 따라서 서명된 커널 모듈 버전과 서명되지 않은 버전을 모두 제공할 필요가 없습니다.
사전 요구 사항
- 공개 및 개인 키 쌍을 생성하고 공개 키의 유효 날짜를 알고 있습니다. 자세한 내용은 공개 및 개인 키 쌍 생성을 참조하십시오.
- 대상 시스템에 공개 키를 등록했습니다. 자세한 내용은 MOK 목록에 공개 키를 추가하여 대상 시스템에서 공개 키 등록을 참조하십시오.
- ELF 이미지 형식의 커널 모듈이 서명에 사용할 수 있습니다.
프로세스
공개 키를
sb_cert.cer파일로 내보냅니다.certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cer# certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow NSS 데이터베이스에서 PKCS #12 파일로 키를 추출합니다.
pk12util -o sb_cert.p12 \ -n 'Custom Secure Boot key' \ -d /etc/pki/pesign# pk12util -o sb_cert.p12 \ -n 'Custom Secure Boot key' \ -d /etc/pki/pesignCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이전 명령에서 프롬프트가 표시되면 개인 키를 암호화하는 새 암호를 입력합니다.
암호화되지 않은 개인 키를 내보냅니다.
openssl pkcs12 \ -in sb_cert.p12 \ -out sb_cert.priv \ -nocerts \ -nodes# openssl pkcs12 \ -in sb_cert.p12 \ -out sb_cert.priv \ -nocerts \ -nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요암호화되지 않은 개인 키를 안전하게 유지합니다.
커널 모듈에 서명합니다. 다음 명령은 커널 모듈 파일의 ELF 이미지에 서명을 직접 추가합니다.
/usr/src/kernels/$(uname -r)/scripts/sign-file \ sha256 \ sb_cert.priv \ sb_cert.cer \ my_module.ko# /usr/src/kernels/$(uname -r)/scripts/sign-file \ sha256 \ sb_cert.priv \ sb_cert.cer \ my_module.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow
이제 커널 모듈을 로드할 준비가 되었습니다.
RHEL 8에서 키 쌍 관련 유효 날짜입니다. 키는 만료되지 않지만 서명 키의 유효 기간 내에 커널 모듈에 서명해야 합니다. 서명 파일 유틸리티는 이에 대해 경고하지 않습니다. 예를 들어 2019년에만 유효한 키를 사용하여 2019년에 서명된 커널 모듈을 해당 키로 인증하는 데 사용할 수 있습니다. 그러나 해당 키를 사용하여 2020년 커널 모듈에 서명할 수 없습니다.
검증
커널 모듈 서명에 대한 정보를 표시합니다.
modinfo my_module.ko | grep signer signer: Your Name Key
# modinfo my_module.ko | grep signer signer: Your Name KeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명에 생성 중 입력한 이름이 나열되어 있는지 확인합니다.
참고첨부된 서명은 ELF 이미지 섹션에 포함되지 않으며 ELF 이미지의 공식적인 부분이 아닙니다. 따라서
readelf와 같은 유틸리티는 커널 모듈에 서명을 표시할 수 없습니다.모듈을 로드합니다.
insmod my_module.ko
# insmod my_module.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈을 제거(load)합니다.
modprobe -r my_module.ko
# modprobe -r my_module.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.12. 서명된 커널 모듈 로드 링크 복사링크가 클립보드에 복사되었습니다!
공개 키를 시스템 키링(.builtin_trusted_keys) 및 MOK 목록에 등록하고 개인 키로 커널 모듈에 서명한 후 modprobe 명령을 사용하여 로드할 수 있습니다.
사전 요구 사항
- 공개 및 개인 키 쌍을 생성했습니다. 자세한 내용은 공개 및 개인 키 쌍 생성을 참조하십시오.
- 공개 키를 시스템 인증 키에 등록했습니다. 자세한 내용은 MOK 목록에 공개 키를 추가하여 대상 시스템에서 공개 키 등록을 참조하십시오.
- 개인 키를 사용하여 커널 모듈에 서명했습니다. 자세한 내용은 개인 키를 사용하여 커널 모듈 서명 을 참조하십시오.
/lib/modules/$(uname -r)/extra/디렉터리를 생성하는kernel-modules-extra패키지를 설치합니다.yum -y install kernel-modules-extra
# yum -y install kernel-modules-extraCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
공개 키가 시스템 인증 키에 있는지 확인합니다.
keyctl list %:.platform
# keyctl list %:.platformCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을 원하는 커널의
extra/디렉터리에 복사합니다.cp my_module.ko /lib/modules/$(uname -r)/extra/
# cp my_module.ko /lib/modules/$(uname -r)/extra/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈식 종속성 목록을 업데이트합니다.
depmod -a
# depmod -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을 로드합니다.
modprobe -v my_module
# modprobe -v my_moduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 부팅 시 모듈을 로드하려면
/etc/modules-loaded.d/my_module.conf파일에 추가합니다.echo "my_module" > /etc/modules-load.d/my_module.conf
# echo "my_module" > /etc/modules-load.d/my_module.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
모듈이 성공적으로 로드되었는지 확인합니다.
lsmod | grep my_module
# lsmod | grep my_moduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4장. 커널 명령줄 매개변수 구성 링크 복사링크가 클립보드에 복사되었습니다!
커널 명령줄 매개 변수를 사용하면 부팅 시 Red Hat Enterprise Linux 커널의 특정 측면의 동작을 변경할 수 있습니다. 시스템 관리자는 부팅 시 설정되는 옵션을 제어합니다. 특정 커널 동작은 부팅 시에만 설정할 수 있습니다.
커널 명령줄 매개 변수를 수정하여 시스템 동작을 변경하면 시스템에 부정적인 영향을 미칠 수 있습니다. 프로덕션에 배포하기 전에 항상 변경 사항을 테스트합니다. 자세한 내용은 Red Hat 지원에 문의하십시오.
4.1. 커널 명령줄 매개변수란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
커널 명령줄 매개 변수를 사용하면 기본값을 덮어쓰고 특정 하드웨어 설정을 설정할 수 있습니다. 부팅 시 다음 기능을 구성할 수 있습니다.
- Red Hat Enterprise Linux 커널
- 초기 RAM 디스크
- 사용자 공간 기능
기본적으로 GRUB 부트 로더를 사용하는 시스템의 커널 명령줄 매개 변수는 각 커널 부팅 항목에 대해 /boot/grub2/grubenv 파일의 kernelopts 변수에 정의됩니다.
IBM Z의 경우 zipl 부트 로더가 환경 변수를 지원하지 않기 때문에 커널 명령줄 매개변수는 부팅 항목 구성 파일에 저장됩니다. 따라서 kernelopts 환경 변수를 사용할 수 없습니다.
grubby 유틸리티를 사용하여 부트 로더 구성 파일을 조작할 수 있습니다. grubby 를 사용하면 다음 작업을 수행할 수 있습니다.
- 기본 부팅 항목을 변경합니다.
- GRUB 메뉴 항목에서 인수를 추가하거나 제거합니다.
4.2. 부팅 항목 이해 링크 복사링크가 클립보드에 복사되었습니다!
부팅 항목은 구성 파일에 저장되고 특정 커널 버전에 연결된 옵션 컬렉션입니다. 실제로 시스템에 커널을 설치한 만큼 많은 부팅 항목이 있습니다. 부팅 항목 구성 파일은 /boot/loader/entries/ 디렉터리에 있습니다.
6f9cc9cb7d7845d49698c9537337cedc-4.18.0-5.el8.x86_64.conf
6f9cc9cb7d7845d49698c9537337cedc-4.18.0-5.el8.x86_64.conf
위의 파일 이름은 /etc/machine-id 파일에 저장된 시스템 ID와 커널 버전으로 구성됩니다.
부팅 항목 구성 파일에는 커널 버전, 초기 램디스크 이미지 및 커널 명령줄 매개변수가 포함된 kernelopts 환경 변수에 대한 정보가 포함되어 있습니다. 구성 파일에는 다음 내용이 있을 수 있습니다.
kernelopts 환경 변수는 /boot/grub2/grubenv 파일에 정의됩니다.
4.3. 모든 부팅 항목에 대한 커널 명령줄 매개변수 변경 링크 복사링크가 클립보드에 복사되었습니다!
시스템의 모든 부팅 항목에 대해 커널 명령줄 매개 변수를 변경합니다.
사전 요구 사항
-
grubby유틸리티가 시스템에 설치되어 있습니다. -
zipl유틸리티는 IBM Z 시스템에 설치됩니다.
프로세스
매개변수를 추가하려면 다음을 수행합니다.
grubby --update-kernel=ALL --args="<NEW_PARAMETER>"
# grubby --update-kernel=ALL --args="<NEW_PARAMETER>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow GRUB 부트 로더를 사용하는 시스템의 경우 명령은 해당 파일의
kernelopts변수에 새 커널 매개 변수를 추가하여/boot/grub2/grubenv파일을 업데이트합니다.IBM Z에서 부팅 메뉴를 업데이트합니다.
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
매개변수를 제거하려면 다음을 수행합니다.
grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"
# grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IBM Z에서 부팅 메뉴를 업데이트합니다.
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
새로 설치된 커널은 이전에 구성된 커널의 커널 명령줄 매개 변수를 상속합니다.
4.4. 단일 부팅 항목에 대한 커널 명령줄 매개변수 변경 링크 복사링크가 클립보드에 복사되었습니다!
시스템의 단일 부팅 항목에 대한 커널 명령줄 매개 변수를 변경합니다.
사전 요구 사항
-
grubby및zipl유틸리티가 시스템에 설치됩니다.
프로세스
매개변수를 추가하려면 다음을 수행합니다.
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IBM Z에서 부팅 메뉴를 업데이트합니다.
grubby --args="<NEW_PARAMETER> --update-kernel=ALL --zipl
# grubby --args="<NEW_PARAMETER> --update-kernel=ALL --ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
매개변수를 제거하려면 다음을 수행합니다.
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IBM Z에서 부팅 메뉴를 업데이트합니다.
grubby --args="<PARAMETER_TO_REMOVE> --update-kernel=ALL --zipl
# grubby --args="<PARAMETER_TO_REMOVE> --update-kernel=ALL --ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
grub.cfg 파일을 사용하는 시스템에서는 기본적으로 kernelopts 변수로 설정된 각 커널 부팅 항목에 대한 options 매개 변수가 있습니다. 이 변수는 /boot/grub2/grubenv 구성 파일에 정의됩니다.
GRUB 시스템에서 다음을 수행합니다.
-
모든 부팅 항목에 대해 커널 명령줄 매개 변수가 수정되면
grubby유틸리티는/boot/grub2/grubenv파일에서kernelopts변수를 업데이트합니다. -
커널 명령줄 매개변수가 단일 부팅 항목에 대해 수정되면
kernelopts변수가 확장되고, 커널 매개변수가 수정되고 결과 값은 해당 부팅 항목의 /boot/loader/entries/<RELEVANT_KERNEL_ENTRY.conf> 파일에 저장됩니다.
zIPL 시스템에서:
-
grubby는 /boot/loader/entries/<ENTRY>.conf 파일에 개별 커널 부팅항목의 커널 명령줄 매개 변수를 수정하고 저장합니다.
4.5. 부팅 시 커널 명령줄 매개변수 변경 링크 복사링크가 클립보드에 복사되었습니다!
커널 매개 변수를 단일 부팅 프로세스 중에만 변경하여 커널 메뉴 항목을 임시로 변경합니다.
이 절차는 단일 부팅에만 적용되며 영구적으로 변경되지 않습니다.
프로세스
- GRUB 부팅 메뉴로 부팅합니다.
- 시작할 커널을 선택합니다.
- e 키를 눌러 커널 매개 변수를 편집합니다.
-
커서를 아래로 이동하여 커널 명령줄을 찾습니다. 커널 명령줄은 64 bit IBM Power Series 및 x86-64 BIOS 기반 시스템에서
linux또는 UEFI 시스템의linuxefi로 시작합니다. 커서를 줄의 끝으로 이동합니다.
참고Ctrl+a 눌러 행의 시작 부분으로 이동하고 Ctrl+e 눌러 줄 끝으로 이동합니다. 일부 시스템에서는 홈 및 종료 키도 작동할 수 있습니다.
필요에 따라 커널 매개변수를 편집합니다. 예를 들어 시스템을 긴급 모드에서 실행하려면
linux행 끝에emergency매개변수를 추가합니다.linux ($root)/vmlinuz-4.18.0-348.12.2.el8_5.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet emergency
linux ($root)/vmlinuz-4.18.0-348.12.2.el8_5.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet emergencyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템 메시지를 활성화하려면
rhgb및quiet매개변수를 제거합니다.- Ctrl+x 눌러 선택한 커널 및 수정된 명령줄 매개 변수를 사용하여 부팅합니다.
Esc 키를 눌러 명령줄 편집을 종료하면 사용자가 변경한 모든 내용이 삭제됩니다.
4.6. 직렬 콘솔 연결을 활성화하도록 GRUB 설정 구성 링크 복사링크가 클립보드에 복사되었습니다!
직렬 콘솔은 헤드리스 서버 또는 임베디드 시스템에 연결해야 하고 네트워크가 다운된 경우 유용합니다. 또는 보안 규칙을 방지하고 다른 시스템에서 로그인 액세스 권한을 얻을 필요가 있는 경우입니다.
직렬 콘솔 연결을 사용하려면 몇 가지 기본 GRUB 설정을 구성해야 합니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
/etc/default/grub파일에 다음 두 행을 추가합니다.GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"
GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 첫 번째 줄은 그래픽 터미널을 비활성화합니다.
및GRUB_TERMINAL_INPUTGRUB_TERMINAL_OUTPUT키의 값을 덮어씁니다.두 번째 줄은 기본 속도(
--speed), 패리티 및 기타 값을 조정하여 환경과 하드웨어에 맞게 조정합니다. 훨씬 높은 기본 속도(예: 115200)는 다음 로그 파일과 같은 작업에 더 적합합니다.GRUB 설정 파일을 업데이트합니다.
BIOS 기반 시스템에서 다음을 수행합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI 기반 시스템에서 다음을 수행합니다.
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 변경 사항을 적용하려면 시스템을 재부팅합니다.
5장. 런타임에 커널 매개변수 구성 링크 복사링크가 클립보드에 복사되었습니다!
시스템 관리자는 런타임 시 Red Hat Enterprise Linux 커널의 동작의 여러 측면을 수정할 수 있습니다. sysctl 명령을 사용하고 /etc/sysctl.d/ 및 /proc/sys/ 디렉터리의 구성 파일을 수정하여 런타임에 커널 매개 변수를 구성합니다.
프로덕션 시스템에서 커널 매개 변수를 구성하려면 신중하게 계획해야 합니다. 계획되지 않은 변경으로 인해 커널을 불안정하게 만들 수 있으므로 시스템을 재부팅해야 합니다. 커널 값을 변경하기 전에 유효한 옵션을 사용하고 있는지 확인합니다.
IBM DB2에서 커널 튜닝에 대한 자세한 내용은 IBM DB2 용 Red Hat Enterprise Linux 튜닝 을 참조하십시오.
5.1. 커널 매개변수란 링크 복사링크가 클립보드에 복사되었습니다!
커널 매개변수는 시스템이 실행되는 동안 조정할 수 있는 조정 가능한 값입니다. 변경 사항을 적용하려면 시스템을 재부팅하거나 커널을 다시 컴파일할 필요가 없습니다.
다음을 통해 커널 매개변수를 처리할 수 있습니다.
-
sysctl명령 -
/proc/sys/디렉터리에 마운트된 가상 파일 시스템 -
/etc/sysctl.d/디렉터리의 구성 파일
튜닝 가능 항목은 커널 하위 시스템에서 클래스로 나뉩니다. Red Hat Enterprise Linux에는 다음과 같은 튜닝 가능한 클래스가 있습니다.
| 튜닝 가능 클래스 | 하위 시스템 |
|---|---|
|
| 실행 도메인 및 특성 |
|
| 암호화 인터페이스 |
|
| 커널 디버깅 인터페이스 |
|
| 장치별 정보 |
|
| 글로벌 및 특정 파일 시스템 튜닝 가능 항목 |
|
| 글로벌 커널 튜닝 가능 항목 |
|
| 네트워크 튜닝 가능 항목 |
|
| Sun Remote Procedure Call (NFS) |
|
| 사용자 네임스페이스 제한 |
|
| 메모리, 버퍼 및 캐시 튜닝 및 관리 |
5.2. sysctl을 사용하여 커널 매개변수를 일시적으로 구성 링크 복사링크가 클립보드에 복사되었습니다!
sysctl 명령을 사용하여 런타임 시 커널 매개변수를 일시적으로 설정합니다. 명령은 튜닝 가능 항목을 나열하고 필터링하는 데도 유용합니다.
사전 요구 사항
- 루트 권한
프로세스
모든 매개변수 및 해당 값을 나열합니다.
sysctl -a
# sysctl -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고# sysctl -a명령은 런타임 시 및 부팅 시 조정할 수 있는 커널 매개 변수를 표시합니다.매개변수를 일시적으로 구성하려면 다음을 입력합니다.
sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
# sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 샘플 명령은 시스템이 실행되는 동안 매개 변수 값을 변경합니다. 변경 사항은 다시 시작할 필요 없이 즉시 적용됩니다.
참고변경 사항은 시스템을 재부팅한 후 기본값으로 돌아갑니다.
5.3. sysctl을 사용하여 커널 매개변수를 영구적으로 구성 링크 복사링크가 클립보드에 복사되었습니다!
sysctl 명령을 사용하여 커널 매개 변수를 영구적으로 설정합니다.
사전 요구 사항
- 루트 권한
프로세스
모든 매개변수를 나열합니다.
sysctl -a
# sysctl -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 런타임 시 구성할 수 있는 모든 커널 매개 변수를 표시합니다.
매개변수를 영구적으로 구성합니다.
sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.conf
# sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 샘플 명령은 튜닝 가능 항목 값을 변경하고
/etc/sysctl.conf파일에 작성하여 커널 매개변수의 기본값을 덮어씁니다. 변경 사항은 다시 시작할 필요 없이 즉시 영구적으로 적용됩니다.
커널 매개 변수를 영구적으로 수정하려면 /etc/sysctl.d/ 디렉터리의 구성 파일을 수동으로 변경할 수도 있습니다.
5.4. /etc/sysctl.d/에서 구성 파일을 사용하여 커널 매개변수 조정 링크 복사링크가 클립보드에 복사되었습니다!
커널 매개변수를 영구적으로 설정하려면 /etc/sysctl.d/ 디렉터리의 구성 파일을 수동으로 수정해야 합니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
/etc/sysctl.d/:에 새 구성 파일을 생성합니다.vim /etc/sysctl.d/<some_file.conf>
# vim /etc/sysctl.d/<some_file.conf>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 한 줄에 하나씩 커널 매개변수를 포함합니다.
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 구성 파일을 저장합니다.
변경 사항을 적용하려면 시스템을 재부팅합니다.
또는 재부팅하지 않고 변경 사항을 적용합니다.
sysctl -p /etc/sysctl.d/<some_file.conf>
# sysctl -p /etc/sysctl.d/<some_file.conf>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령을 사용하면 이전에 만든 구성 파일에서 값을 읽을 수 있습니다.
5.5. /proc/sys/를 통해 일시적으로 커널 매개변수 구성 링크 복사링크가 클립보드에 복사되었습니다!
/proc/sys/ 가상 파일 시스템 디렉터리의 파일을 통해 커널 매개 변수를 일시적으로 설정합니다.
사전 요구 사항
- 루트 권한
프로세스
구성할 커널 매개변수를 식별합니다.
ls -l /proc/sys/<TUNABLE_CLASS>/
# ls -l /proc/sys/<TUNABLE_CLASS>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령에서 반환된 쓰기 가능한 파일을 사용하여 커널을 구성할 수 있습니다. 읽기 전용 권한이 있는 파일은 현재 설정에 대한 피드백을 제공합니다.
커널 매개 변수에 대상 값을 할당합니다.
echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
# echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령을 사용하여 적용되는 구성 변경 사항은 영구적으로 적용되지 않으며 시스템을 다시 시작하면 사라집니다.
검증
새로 설정된 kernel 매개변수의 값을 확인합니다.
cat /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
# cat /proc/sys/<TUNABLE_CLASS>/<PARAMETER>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7장. GRUB 부트 로더를 영구적으로 변경 링크 복사링크가 클립보드에 복사되었습니다!
grubby 툴을 사용하여 GRUB를 영구적으로 변경합니다.
7.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
- 시스템에 RHEL을 성공적으로 설치했습니다.
- root 권한이 있습니다.
7.2. 기본 커널 나열 링크 복사링크가 클립보드에 복사되었습니다!
기본 커널을 나열하면 기본 커널의 파일 이름과 인덱스 번호를 확인하여 GRUB 부트 로더를 영구적으로 변경할 수 있습니다.
프로세스
- 기본 커널의 파일 이름을 가져오려면 다음을 입력합니다.
grubby --default-kernel /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
# grubby --default-kernel
/boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
- 기본 커널의 인덱스 번호를 가져오려면 다음을 입력합니다.
grubby --default-index 0
# grubby --default-index
0
7.4. 커널 인수 편집 링크 복사링크가 클립보드에 복사되었습니다!
기존 커널 인수에서 값을 변경할 수 있습니다. 예를 들어 가상 콘솔(스크린) 글꼴 및 크기를 변경할 수 있습니다.
프로세스
크기가
32인 가상 콘솔 글꼴을latarcyrheb-sun으로 변경합니다.grubby --args=vconsole.font=latarcyrheb-sun32 --update-kernel /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
# grubby --args=vconsole.font=latarcyrheb-sun32 --update-kernel /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6. 새 부팅 항목 추가 링크 복사링크가 클립보드에 복사되었습니다!
부트 로더 메뉴 항목에 새 부팅 항목을 추가할 수 있습니다.
프로세스
기본 커널의 모든 커널 인수를 이 새 커널 항목으로 복사합니다.
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --copy-default
# grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --copy-defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 사용 가능한 부팅 항목 목록을 가져옵니다.
ls -l /boot/loader/entries/* -rw-r--r--. 1 root root 408 May 27 06:18 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-0-rescue.conf -rw-r--r--. 1 root root 536 Jun 30 07:53 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-4.18.0-372.9.1.el8.x86_64.conf -rw-r--r-- 1 root root 336 Aug 15 15:12 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.conf
# ls -l /boot/loader/entries/* -rw-r--r--. 1 root root 408 May 27 06:18 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-0-rescue.conf -rw-r--r--. 1 root root 536 Jun 30 07:53 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-4.18.0-372.9.1.el8.x86_64.conf -rw-r--r-- 1 root root 336 Aug 15 15:12 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새 부팅 항목을 만듭니다. 예를 들어 4.18.0-193.el8.x86_64 커널의 경우 다음과 같이 명령을 실행합니다.
grubby --grub2 --add-kernel=/boot/vmlinuz-4.18.0-193.el8.x86_64 --title="Red Hat Enterprise 8 Test" --initrd=/boot/initramfs-4.18.0-193.el8.x86_64.img --copy-default
# grubby --grub2 --add-kernel=/boot/vmlinuz-4.18.0-193.el8.x86_64 --title="Red Hat Enterprise 8 Test" --initrd=/boot/initramfs-4.18.0-193.el8.x86_64.img --copy-defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
새로 추가된 부팅 항목이 사용 가능한 부팅 항목 사이에 나열되어 있는지 확인합니다.
ls -l /boot/loader/entries/* -rw-r--r--. 1 root root 408 May 27 06:18 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-0-rescue.conf -rw-r--r--. 1 root root 536 Jun 30 07:53 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-4.18.0-372.9.1.el8.x86_64.conf -rw-r--r-- 1 root root 287 Aug 16 15:17 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.0~custom.conf -rw-r--r-- 1 root root 287 Aug 16 15:29 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.conf
# ls -l /boot/loader/entries/* -rw-r--r--. 1 root root 408 May 27 06:18 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-0-rescue.conf -rw-r--r--. 1 root root 536 Jun 30 07:53 /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-4.18.0-372.9.1.el8.x86_64.conf -rw-r--r-- 1 root root 287 Aug 16 15:17 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.0~custom.conf -rw-r--r-- 1 root root 287 Aug 16 15:29 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7. grubby를 사용하여 기본 부팅 항목 변경 링크 복사링크가 클립보드에 복사되었습니다!
grubby 툴을 사용하면 기본 부팅 항목을 변경할 수 있습니다.
프로세스
- 기본 커널로 지정된 커널을 영구적으로 변경하려면 다음을 입력합니다.
grubby --set-default /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64 The default is /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-4.18.0-372.9.1.el8.x86_64.conf with index 0 and kernel /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
# grubby --set-default /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
The default is /boot/loader/entries/67db13ba8cdb420794ef3ee0a8313205-4.18.0-372.9.1.el8.x86_64.conf with index 0 and kernel /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
7.9. 현재 및 향후 커널의 기본 커널 옵션 변경 링크 복사링크가 클립보드에 복사되었습니다!
kernelopts 변수를 사용하면 현재 및 향후 커널 모두에 대한 기본 커널 옵션을 변경할 수 있습니다.
프로세스
kernelopts변수의 커널 매개변수를 나열합니다.grub2-editenv - list | grep kernelopts kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet
# grub2-editenv - list | grep kernelopts kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quietCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 명령줄 매개 변수를 변경합니다. 매개변수를 추가, 제거 또는 수정할 수 있습니다. 예를 들어
debug매개변수를 추가하려면 다음을 입력합니다.grub2-editenv - set "$(grub2-editenv - list | grep kernelopts) <debug>"
# grub2-editenv - set "$(grub2-editenv - list | grep kernelopts) <debug>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항:
kernelopts:에 새로 추가된 매개변수를 확인합니다.grub2-editenv - list | grep kernelopts kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet debug
# grub2-editenv - list | grep kernelopts kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet debugCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 변경 사항을 적용하려면 시스템을 재부팅합니다.
또는 grubby 명령을 사용하여 현재 및 향후 커널에 인수를 전달할 수 있습니다.
grubby --update-kernel ALL --args="<PARAMETER>"
# grubby --update-kernel ALL --args="<PARAMETER>"
9장. GRUB 다시 설치 링크 복사링크가 클립보드에 복사되었습니다!
GRUB 부트 로더를 다시 설치하여 일반적으로 GRUB 설치, 파일 누락 또는 손상된 시스템으로 인해 발생하는 특정 문제를 해결할 수 있습니다. 누락된 파일을 복원하고 부팅 정보를 업데이트하여 이러한 문제를 해결할 수 있습니다.
GRUB을 다시 설치하는 이유:
- GRUB 부트 로더 패키지 업그레이드.
- 다른 드라이브에 부팅 정보를 추가합니다.
- 사용자는 설치된 운영 체제를 제어하기 위해 GRUB 부트 로더가 필요합니다. 그러나 일부 운영 체제는 자체 부트 로더를 사용하여 설치하고 GRUB을 원하는 운영 체제에 제어 기능을 다시 설치합니다.
GRUB은 파일이 손상되지 않은 경우에만 파일을 복원합니다.
9.1. BIOS 기반 시스템에 GRUB 다시 설치 링크 복사링크가 클립보드에 복사되었습니다!
BIOS 기반 시스템에 GRUB 부트 로더를 다시 설치할 수 있습니다. GRUB 패키지를 업데이트한 후 항상 GRUB을 다시 설치하십시오.
기존 GRUB을 덮어쓰고 새 GRUB을 설치합니다. 설치 중에 시스템이 데이터 손상 또는 부팅 충돌을 유발하지 않는지 확인합니다.
프로세스
설치된 장치에 GRUB을 다시 설치합니다. 예를 들어
sda가 장치인 경우 다음을 수행합니다.grub2-install /dev/sda
# grub2-install /dev/sdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 적용하려면 시스템을 재부팅합니다.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2. UEFI 기반 시스템에 GRUB 다시 설치 링크 복사링크가 클립보드에 복사되었습니다!
UEFI 기반 시스템에 GRUB 부트 로더를 다시 설치할 수 있습니다.
설치 중에 시스템이 데이터 손상 또는 부팅 충돌을 유발하지 않는지 확인합니다.
프로세스
grub2-efi및shim부트 로더 파일을 다시 설치합니다.yum reinstall grub2-efi shim
# yum reinstall grub2-efi shimCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 적용하려면 시스템을 재부팅합니다.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. IBM Power 시스템에 GRUB 다시 설치 링크 복사링크가 클립보드에 복사되었습니다!
IBM Power 시스템의 PReP(Power PC Reference Platform) 부팅 파티션에 GRUB 부트 로더를 다시 설치할 수 있습니다. GRUB 패키지를 업데이트한 후 항상 GRUB을 다시 설치하십시오.
기존 GRUB을 덮어쓰고 새 GRUB을 설치합니다. 설치 중에 시스템이 데이터 손상 또는 부팅 충돌을 유발하지 않는지 확인합니다.
프로세스
GRUB를 저장하는 디스크 파티션을 확인합니다.
bootlist -m normal -o sda1
# bootlist -m normal -o sda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 디스크 파티션에 GRUB을 다시 설치합니다.
grub2-install partition
# grub2-install partitionCopy to Clipboard Copied! Toggle word wrap Toggle overflow partition을 식별된 GRUB 파티션(예:/dev/sda1)으로 바꿉니다.변경 사항을 적용하려면 시스템을 재부팅합니다.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.4. GRUB 재설정 링크 복사링크가 클립보드에 복사되었습니다!
GRUB을 재설정하면 모든 GRUB 설정 파일 및 시스템 설정이 완전히 제거되고 부트 로더를 다시 설치합니다. 모든 구성 설정을 기본값으로 재설정할 수 있으므로 손상된 파일과 잘못된 구성으로 인한 오류를 수정할 수 있습니다.
다음 절차에서는 사용자가 만든 모든 사용자 지정을 제거합니다.
프로세스
구성 파일을 제거합니다.
rm /etc/grub.d/* rm /etc/sysconfig/grub
# rm /etc/grub.d/* # rm /etc/sysconfig/grubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지를 다시 설치합니다.
BIOS 기반 시스템에서 다음을 수행합니다.
yum reinstall grub2-tools
# yum reinstall grub2-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI 기반 시스템에서 다음을 수행합니다.
yum reinstall grub2-efi shim grub2-tools grub2-common
# yum reinstall grub2-efi shim grub2-tools grub2-commonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
변경 사항을 적용하려면
grub.cfg파일을 다시 빌드합니다.BIOS 기반 시스템에서 다음을 수행합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI 기반 시스템에서 다음을 수행합니다.
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
GRUB 설치 절차에 따라
/boot/파티션에서 GRUB을 복원하십시오.
10장. 암호로 GRUB 보호 링크 복사링크가 클립보드에 복사되었습니다!
다음 두 가지 방법으로 암호로 GRUB을 보호할 수 있습니다.
- 메뉴 항목을 수정하는 데는 암호가 필요하지만 기존 메뉴 항목을 부팅하는 데는 암호가 필요합니다.
- 메뉴 항목을 수정하고 기존 메뉴 항목을 부팅하려면 암호가 필요합니다.
11장. 가상화 환경에서 커널 패닉 매개변수를 비활성화 상태로 유지 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8에서 가상 머신을 구성할 때 가상 머신은 스포일한 소프트 잠금으로 어려움을 겪을 수 있으므로 softlockup_panic 및 nmi_watchdog 커널 매개변수를 활성화하지 마십시오. 커널 패닉이 필요하지 않아야 합니다.
다음 섹션에서 이 조언 뒤에 있는 이유를 찾습니다.
11.1. 소프트 잠금이란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
소프트 잠금은 일반적으로 일정 조정 없이 CPU의 커널 공간에서 작업이 실행되는 경우 버그로 인해 발생합니다. 또한 이 작업에서는 특정 CPU에서 다른 작업을 실행할 수 없습니다. 결과적으로 시스템 콘솔을 통해 사용자에게 경고가 표시됩니다. 이 문제를 소프트 잠금 실행이라고도 합니다.
11.2. 커널 패닉을 제어하는 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
소프트 잠금이 감지되면 다음 커널 매개 변수를 설정하여 시스템의 동작을 제어할 수 있습니다.
softlockup_panic소프트 잠금이 감지될 때 커널이 패닉될지 여부를 제어합니다.
Expand 유형 현재의 효과 정수
0
커널은 소프트 잠금에 패닉이 발생하지 않습니다
정수
1
소프트 잠금에 커널 패닉
기본적으로 RHEL 8에서 이 값은 0입니다.
시스템은 먼저 패닉 상태가 되기 위해 하드 잠금을 감지해야 합니다. 탐지는
nmi_watchdog매개변수로 제어됩니다.nmi_watchdog워치독(워치독)이 활성 상태인지 여부를 제어합니다. 이 매개변수는 정수 유형입니다.Expand 현재의 효과 0
잠금 탐지기를 비활성화
1
잠금 탐지기 활성화
하드 잠금 탐지기는 인터럽트에 응답할 수 있도록 각 CPU를 모니터링합니다.
watchdog_thresh워치독
hrtimer, NMI 이벤트 및 소프트 또는 하드 잠금 임계값의 빈도를 제어합니다.Expand 기본 임계값 소프트 잠금 임계값 10초
2 *
watchdog_thresh이 매개변수를 0으로 설정하면 잠금 탐지가 완전히 비활성화됩니다.
11.3. 가상화된 환경에서 번거로운 소프트 잠금 링크 복사링크가 클립보드에 복사되었습니다!
물리적 호스트에서 실행되는 소프트 잠금 은 일반적으로 커널 또는 하드웨어 버그를 나타냅니다. 가상화된 환경의 게스트 운영 체제에서도 동일한 상황이 발생하면 잘못된 경고가 표시될 수 있습니다.
호스트의 워크로드가 크거나 메모리와 같은 특정 리소스에 대한 높은 경합으로 인해 호스트가 20초 이상 게스트 CPU를 예약할 수 있으므로 잘못된 소프트 잠금이 발생할 수 있습니다. 게스트 CPU가 다시 호스트에서 실행되도록 예약되면 만료 타이머를 트리거하는 시간 점프 가 발생합니다. 타이머에는 게스트 CPU에 소프트 잠금을 보고할 수 있는 hrtimer 워치도 포함됩니다.
가상화 환경의 소프트 잠금은 false일 수 있습니다. 소프트 잠금이 게스트 CPU에 보고될 때 시스템 패닉을 트리거하는 커널 매개변수를 활성화해서는 안 됩니다.
게스트의 소프트 잠금을 이해하려면 호스트가 게스트를 작업으로 예약하고 게스트가 자체 작업을 예약한다는 것을 알아야 합니다.
12장. 데이터베이스 서버의 커널 매개변수 조정 링크 복사링크가 클립보드에 복사되었습니다!
데이터베이스 서버 및 데이터베이스의 효율적인 작업을 위해서는 필요한 커널 매개변수 세트를 구성해야 합니다.
12.1. 데이터베이스 서버 소개 링크 복사링크가 클립보드에 복사되었습니다!
데이터베이스 서버는 DBMS(데이터베이스 관리 시스템) 기능을 제공하는 서비스입니다. DBMS는 데이터베이스 관리를 위한 유틸리티를 제공하며 최종 사용자, 애플리케이션 및 데이터베이스와 상호 작용합니다.
Red Hat Enterprise Linux 8은 다음과 같은 데이터베이스 관리 시스템을 제공합니다.
- MariaDB 10.3
- MariaDB 10.5 - RHEL 8.4 이후 사용 가능
- MariaDB 10.11 - RHEL 8.10 이후 사용 가능
- MySQL 8.0
- PostgreSQL 10
- PostgreSQL 9.6
- PostgreSQL 12 - RHEL 8.1.1 이후 사용 가능
- PostgreSQL 13 - RHEL 8.4 이후 사용 가능
- PostgreSQL 15 - RHEL 8.8 이후 사용 가능
- PostgreSQL 16 - RHEL 8.10 이후 사용 가능
12.2. 데이터베이스 애플리케이션의 성능에 영향을 미치는 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
다음 커널 매개 변수는 데이터베이스 애플리케이션의 성능에 영향을 미칩니다.
- fs.aio-max-nr
시스템에서 서버에서 처리할 수 있는 최대 비동기 I/O 작업 수를 정의합니다.
참고fs.aio-max-nr매개변수를 올리면 aio 제한을 늘리는 것 이상의 추가 변경 사항이 발생하지 않습니다.- fs.file-max
시스템에서 임의의 인스턴스에서 지원하는 최대 파일 처리 수(임시 파일 이름 또는 열려 있는 파일에 할당된 ID) 수를 정의합니다.
커널은 애플리케이션에서 파일 처리를 요청할 때마다 파일 처리를 동적으로 할당합니다. 그러나 애플리케이션에서 릴리스할 때 커널에서 이러한 파일 처리를 해제하지 않습니다. 대신 이러한 파일 처리를 재활용합니다. 현재 사용되는 파일 처리 수가 낮더라도 할당된 총 파일 처리 수가 시간이 지남에 따라 증가할 수 있습니다.
kernel.shmall-
시스템 전체에서 사용할 수 있는 총 공유 메모리 페이지 수를 정의합니다. 전체 메인 메모리를 사용하려면
kernel.shmall매개변수의 값은 총 기본 메모리 크기여야 합니다. kernel.shmmax- Linux 프로세스에서 가상 주소 공간에 할당할 수 있는 단일 공유 메모리 세그먼트의 최대 크기(바이트)를 정의합니다.
kernel.shmmni- 데이터베이스 서버가 처리할 수 있는 최대 공유 메모리 세그먼트 수를 정의합니다.
net.ipv4.ip_local_port_range- 시스템은 포트 번호를 지정하지 않고 데이터베이스 서버에 연결하는 프로그램에 이 포트 범위를 사용합니다.
net.core.rmem_default- TCP(Transmission Control Protocol)를 통해 기본 수신 소켓 메모리를 정의합니다.
net.core.rmem_max- TCP(Transmission Control Protocol)를 통해 최대 수신 소켓 메모리를 정의합니다.
net.core.wmem_default- TCP(Transmission Control Protocol)를 통해 기본 전송 소켓 메모리를 정의합니다.
net.core.wmem_max- TCP(Transmission Control Protocol)를 통해 최대 전송 소켓 메모리를 정의합니다.
vm.dirty_bytes/vm.dirty_ratio-
더티 데이터를 생성하는 프로세스가
write()함수에서 시작되는 더티 가능 메모리의 백분율로 바이트 단위로 정의합니다.
vm.dirty_bytes 또는 vm.dirty_ratio 중 하나를 한 번에 지정할 수 있습니다.
vm.dirty_background_bytes/vm.dirty_background_ratio- 커널이 하드 디스크에 더티 데이터를 적극적으로 작성하려고 하는 더티 가능 메모리의 백분율로 바이트/바이트 단위로 정의합니다.
vm.dirty_back Cryostat_bytes 또는 vm.dirty_back Background_ratio 를 한 번에 지정할 수 있습니다.
vm.dirty_writeback_centisecs하드 디스크에 더티 데이터를 쓰는 커널 스레드의 주기적인 레이닝 사이의 시간 간격을 정의합니다.
이 커널 매개 변수는 1초의 100번째로 측정합니다.
vm.dirty_expire_centisecs하드 디스크에 쓸 오래된 더티 데이터의 시간을 정의합니다.
이 커널 매개 변수는 1초의 100번째로 측정합니다.
13장. 커널 로깅 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
로그 파일은 시스템에서 실행되는 커널, 서비스 및 애플리케이션을 포함하여 시스템에 대한 메시지를 제공합니다. syslog 서비스는 Red Hat Enterprise Linux 로그인에 대한 기본 지원을 제공합니다. 다양한 유틸리티에서는 이 시스템을 사용하여 이벤트를 기록하고 이를 로그 파일로 구성합니다. 이러한 파일은 운영 체제를 감사하거나 문제를 해결할 때 유용합니다.
13.1. 커널 링 버퍼란 링크 복사링크가 클립보드에 복사되었습니다!
부팅 프로세스 중에 콘솔은 시스템 시작의 초기 단계에 대한 중요한 정보를 제공합니다. 초기 메시지가 손실되지 않도록 커널은 링 버퍼를 사용합니다. 이 버퍼는 커널 코드 내에서 printk() 함수에 의해 생성된 부팅 메시지를 포함한 모든 메시지를 저장합니다. 그런 다음 커널 링 버퍼의 메시지는 syslog 서비스에 의해 영구 스토리지의 로그 파일에 읽고 저장됩니다.
링 버퍼는 크기가 고정된 순환 데이터 구조이며 커널에 하드 코딩됩니다. 사용자는 dmesg 명령 또는 /var/log/boot.log 파일을 통해 커널 링 버퍼에 저장된 데이터를 표시할 수 있습니다. 링 버퍼가 가득 차면 새 데이터가 이전 데이터를 덮어씁니다.
13.2. 로그 수준 및 커널 로깅에서 printk의 역할 링크 복사링크가 클립보드에 복사되었습니다!
커널에서 보고하는 각 메시지에는 메시지의 중요도를 정의하는 로그 수준이 연결되어 있습니다. 커널 링 버퍼에 설명된 대로 커널 링 버퍼는 모든 로그 수준의 커널 메시지를 수집합니다. 이 매개변수는 버퍼에서 콘솔에 출력되는 메시지를 정의하는 kernel.printk 매개변수입니다.
로그 수준 값은 다음 순서로 손상됩니다.
- 0
- 커널 긴급 상황. 시스템을 사용할 수 없습니다.
- 1
- 커널 경고. 즉시 조치를 취해야 합니다.
- 2
- 커널의 상태는 중요한 것으로 간주됩니다.
- 3
- 일반 커널 오류 상태입니다.
- 4
- 일반 커널 경고 조건.
- 5
- 정상이지만 중요한 상태에 대한 커널 알림입니다.
- 6
- 커널 정보 메시지.
- 7
- 커널 디버그 수준 메시지입니다.
기본적으로 RHEL 8의 kernel.printk 에는 다음과 같은 값이 있습니다.
sysctl kernel.printk kernel.printk = 7 4 1 7
# sysctl kernel.printk
kernel.printk = 7 4 1 7
4개의 값은 순서대로 다음을 정의합니다.
- 콘솔 로그 수준은 콘솔에 출력되는 메시지의 가장 낮은 우선 순위를 정의합니다.
- 명시적 로그 수준이 연결되지 않은 메시지의 기본 로그 수준입니다.
- 콘솔 로그 수준에 대해 가능한 가장 낮은 로그 수준 구성을 설정합니다.
부팅 시 콘솔 로그 수준의 기본값을 설정합니다.
이러한 각 값은 오류 메시지를 처리하기 위한 다른 규칙을 정의합니다.
기본 7 4 1 1 printk 값을 사용하면 커널 활동을 더 잘 디버깅할 수 있습니다. 그러나 직렬 콘솔과 연결된 경우 이 출력 설정으로 인해 RHEL 시스템이 일시적으로 응답하지 않을 수 있는 강력한 I/O 버스트가 발생할 수 있습니다. 이러한 상황을 방지하기 위해 4 4 1 7 의 인쇄 값을 설정하는 것은 일반적으로 작동하지만 추가 디버깅 정보가 손실되는 경우가 이에 해당합니다.
또한 quiet 또는 debug 와 같은 특정 커널 명령줄 매개 변수는 기본 kernel.printk 값을 변경합니다.
14장. kdump 설치 링크 복사링크가 클립보드에 복사되었습니다!
새로운 버전의 RHEL 8 설치에서 kdump 서비스가 기본적으로 설치 및 활성화됩니다.
14.1. kdump란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
kdump 는 크래시 덤프 메커니즘을 제공하고 크래시 덤프 또는 vmcore 덤프 파일을 생성하는 서비스입니다. vmcore 에는 분석 및 문제 해결을 위해 시스템 메모리의 내용이 포함됩니다. kdump 는 kexec 시스템 호출을 사용하여 두 번째 커널로 부팅하고 재부팅하지 않고 커널을 캡처합니다. 이 커널은 충돌한 커널 메모리의 내용을 캡처하여 파일에 저장합니다. 두 번째 커널은 시스템 메모리의 예약된 부분에서 사용할 수 있습니다.
커널 크래시 덤프는 시스템 오류가 발생한 경우 사용 가능한 유일한 정보일 수 있습니다. 따라서 작업 kdump 는 미션 크리티컬 환경에서 중요합니다. Red Hat은 일반 커널 업데이트 주기에서 kexec-tools 를 정기적으로 업데이트하고 테스트하는 것이 좋습니다. 이는 새 커널 기능을 설치할 때 중요합니다.
머신에 여러 커널이 있는 경우 설치된 모든 커널 또는 지정된 커널에 대해 kdump 를 활성화할 수 있습니다. kdump 를 설치할 때 시스템은 기본 /etc/kdump.conf 파일을 생성합니다. /etc/kdump.conf 에는 kdump 구성을 사용자 지정하도록 편집할 수 있는 기본 최소 kdump 구성이 포함되어 있습니다.
14.2. Anaconda를 사용하여 kdump 설치 링크 복사링크가 클립보드에 복사되었습니다!
Anaconda 설치 프로그램은 대화형 설치 중에 kdump 구성에 대한 그래픽 인터페이스 화면을 제공합니다. kdump 를 활성화하고 필요한 메모리 양을 예약할 수 있습니다.
프로세스
Anaconda 설치 프로그램에서 KDUMP 를 클릭하고
kdump를 활성화합니다.
- Kdump 메모리 예약 에서 메모리 예약을 사용자 지정해야 하는 경우 Manual'을 선택합니다.
KDUMP > Memory to be Reserved(MB) 에서
kdump에 필요한 메모리 예약을 설정합니다.
14.3. 명령줄에 kdump 설치 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 Kickstart 설치와 같은 설치 옵션은 경우에 따라 기본적으로 kdump 를 설치하거나 활성화 하지 않습니다. 다음 절차에서는 이 경우 kdump 를 활성화하는 데 도움이 됩니다.
사전 요구 사항
- 활성 RHEL 서브스크립션입니다.
-
시스템 CPU 아키텍처용
kexec-tools패키지가 포함된 리포지토리입니다. -
kdump구성 및 대상에 대한 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오.
프로세스
kdump가 시스템에 설치되어 있는지 확인합니다.rpm -q kexec-tools
# rpm -q kexec-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지가 설치된 경우 출력됩니다.
kexec-tools-2.0.17-11.el8.x86_64
kexec-tools-2.0.17-11.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지가 설치되지 않은 경우 출력됩니다.
package kexec-tools is not installed
package kexec-tools is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump및 기타 필수 패키지를 설치합니다.dnf install kexec-tools
# dnf install kexec-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
kernel-3.10.0-693.el7 이후의 Intel IOMMU 드라이버는 kdump 에서 지원됩니다. kernel-3.10.0-514[.XYZ].el7 및 초기 버전의 경우 응답하지 않는 캡처 커널을 방지하려면 Intel IOMMU 가 비활성화되어 있어야 합니다.
15장. 명령줄에서 kdump 구성 링크 복사링크가 클립보드에 복사되었습니다!
kdump 의 메모리는 시스템 부팅 중에 예약되어 있습니다. 시스템의 GRUB(GRUB) 구성 파일에서 메모리 크기를 구성할 수 있습니다. 메모리 크기는 구성 파일에 지정된 crashkernel= 값과 시스템의 실제 메모리에 따라 다릅니다.
15.1. kdump 크기 추정 링크 복사링크가 클립보드에 복사되었습니다!
kdump 환경을 계획하고 구축할 때는 크래시 덤프 파일에 필요한 공간을 알아야 합니다.
makedumpfile --mem-usage 명령은 크래시 덤프 파일에 필요한 공간을 추정합니다. 메모리 사용량 보고서를 생성합니다. 이 보고서를 사용하면 덤프 수준과 제외할 수 있는 페이지를 결정하는 데 도움이 됩니다.
프로세스
다음 명령을 입력하여 메모리 사용량 보고서를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
makedumpfile --mem-usage 명령은 필요한 메모리를 페이지에 보고합니다. 즉, 커널 페이지 크기에 대해 사용 중인 메모리 크기를 계산해야 합니다.
기본적으로 RHEL 커널은 IBM POWER 아키텍처에서 AMD64 및 Intel 64 CPU 아키텍처에서 4KB 크기의 페이지를 사용합니다.
15.2. kdump 메모리 사용량 구성 링크 복사링크가 클립보드에 복사되었습니다!
kdump 의 메모리 예약은 시스템 부팅 중에 수행됩니다. 메모리 크기는 시스템의 GRUB(GRUB) 구성에서 설정됩니다. 메모리 크기는 구성 파일에 지정된 crashkernel= 옵션 값과 시스템 물리적 메모리 크기에 따라 다릅니다.
crashkernel= 옵션을 여러 가지 방법으로 정의할 수 있습니다. crashkernel= 값을 지정하거나 auto 옵션을 구성할 수 있습니다. crashkernel=auto 매개 변수는 시스템의 총 실제 메모리 크기에 따라 메모리를 자동으로 예약합니다. 구성되면 커널은 캡처 커널에 적절한 양의 필요한 메모리를 자동으로 예약합니다. 이렇게 하면 OOM(메모리 부족) 오류를 방지할 수 있습니다.
kdump 의 자동 메모리 할당은 시스템 하드웨어 아키텍처 및 사용 가능한 메모리 크기에 따라 다릅니다.
예를 들어 AMD64 및 Intel 64에서 crashkernel=auto 매개 변수는 사용 가능한 메모리가 1GB 이상인 경우에만 작동합니다. 64비트 ARM 아키텍처 및 IBM Power Systems에는 2GB 이상의 사용 가능한 메모리가 필요합니다.
시스템에 자동 할당을 위한 최소 메모리 임계값보다 적은 경우 예약된 메모리 양을 수동으로 구성할 수 있습니다.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
-
kdump구성 및 대상에 대한 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오.
프로세스
crashkernel=옵션을 준비합니다.예를 들어 128MB의 메모리를 예약하려면 다음을 사용합니다.
crashkernel=128M
crashkernel=128MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 설치된 총 메모리 크기에 따라 예약된 메모리 양을 변수로 설정할 수 있습니다. 변수에 대한 메모리 예약 구문은
crashkernel= <range1> : <size1 > , <range2 > : <size2> 입니다. 예를 들면 다음과 같습니다.crashkernel=512M-2G:64M,2G-:128M
crashkernel=512M-2G:64M,2G-:128MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 총 시스템 메모리 양이 512MB 및 2GB의 범위에 있는 경우 64MB의 메모리를 예약합니다. 총 메모리 양이 2GB를 초과하면 메모리 예약은 128MB입니다.
예약된 메모리를 오프셋합니다.
크래시커널예약이 조기에 수행되므로 일부 시스템은 특정 고정 오프셋이 있는 메모리를 예약해야 하며 특수 사용을 위해 더 많은 메모리를 예약해야 할 수 있습니다. 오프셋을 정의하면 예약된 메모리가 여기에서 시작됩니다. 예약된 메모리를 오프셋하려면 다음 구문을 사용합니다.crashkernel=128M@16M
crashkernel=128M@16MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서
kdump는 16MB(실제 주소0x01000000)부터 128MB의 메모리를 예약합니다. offset 매개변수를 0으로 설정하거나 완전히 생략하면kdump가 예약된 메모리를 자동으로 오프셋합니다. 변수 메모리 예약을 설정할 때 이 구문을 사용할 수도 있습니다. 이 경우 오프셋은 항상 last으로 지정됩니다. 예를 들면 다음과 같습니다.crashkernel=512M-2G:64M,2G-:128M@16M
crashkernel=512M-2G:64M,2G-:128M@16MCopy to Clipboard Copied! Toggle word wrap Toggle overflow
crashkernel=옵션을 부트 로더 구성에 적용합니다.grubby --update-kernel=ALL --args="crashkernel=<value>"
# grubby --update-kernel=ALL --args="crashkernel=<value>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;value>를 이전 단계에서 준비한crashkernel=옵션 값으로 바꿉니다.
15.3. kdump 대상 구성 링크 복사링크가 클립보드에 복사되었습니다!
크래시 덤프는 일반적으로 장치에 직접 작성된 로컬 파일 시스템에 파일로 저장됩니다. 선택적으로 NFS 또는 SSH 프로토콜을 사용하여 네트워크를 통해 크래시 덤프를 보낼 수 있습니다. 크래시 덤프 파일을 보존하기 위한 이러한 옵션 중 하나만 한 번에 설정할 수 있습니다. 기본 동작은 로컬 파일 시스템의 /var/crash/ 디렉터리에 저장하는 것입니다.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
-
kdump구성 및 대상에 대한 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오.
프로세스
크래시 덤프 파일을 로컬 파일 시스템의
/var/crash/디렉터리에 저장하려면/etc/kdump.conf파일을 편집하고 경로를 지정합니다.path /var/crash
path /var/crashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 옵션
경로 /var/crash는kdump에서 크래시 덤프 파일을 저장하는 파일 시스템의 경로를 나타냅니다.참고-
/etc/kdump.conf파일에 덤프 대상을 지정하면 경로는 지정된 덤프 대상과 관련이 있습니다. -
/etc/kdump.conf파일에 덤프 대상을 지정하지 않으면 경로는 루트 디렉터리의 절대 경로를 나타냅니다.
현재 시스템에 마운트된 파일 시스템에 따라 덤프 대상 및 조정된 덤프 경로가 자동으로 구성됩니다.
-
크래시 덤프 파일과
kdump에서 생성된 관련 파일을 보호하려면 사용자 권한 및 SELinux 컨텍스트와 같은 대상 대상 디렉터리에 대한 적절한 속성을 설정해야 합니다. 또한 다음과 같이kdump.conf파일에서kdump_post.sh스크립트를 정의할 수 있습니다.kdump_post <path_to_kdump_post.sh>
kdump_post <path_to_kdump_post.sh>Copy to Clipboard Copied! Toggle word wrap Toggle overflow kdump_post지시문은kdump가 캡처를 완료하고 지정된 대상에 크래시 덤프를 저장한 후 실행되는 쉘 스크립트 또는 명령을 지정합니다. 이 메커니즘을 사용하여kdump의 기능을 확장하여 파일 권한 조정을 포함하여 작업을 수행할 수 있습니다.-
kdump대상 구성
# *grep -v ^# /etc/kdump.conf | grep -v ^$* ext4 /dev/mapper/vg00-varcrashvol path /var/crash core_collector makedumpfile -c --message-level 1 -d 31
# *grep -v ^# /etc/kdump.conf | grep -v ^$*
ext4 /dev/mapper/vg00-varcrashvol
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31
덤프 대상은 (ext4 /dev/mapper/vg00-varcrashvol) 지정되므로 /var/crash 에 마운트됩니다. path 옵션도 /var/crash 로 설정됩니다. 따라서 kdump 는 vmcore 파일을 /var/crash/var/crash 디렉터리에 저장합니다.
크래시 덤프 저장을 위해 로컬 디렉터리를 변경하려면
/etc/kdump.conf구성 파일을root사용자로 편집합니다.-
행의 시작 부분에서 해시 기호( # )를 제거합니다.#path /var/crash 값을 의도한 디렉터리 경로로 바꿉니다. 예를 들면 다음과 같습니다.
path /usr/local/cores
path /usr/local/coresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요RHEL 8에서
path지시문을 사용하여kdump대상으로 정의된 디렉터리는kdumpsystemd서비스가 실패하는 것을 방지할 때 존재해야 합니다. 이전 버전의 RHEL과 달리 서비스가 시작될 때 디렉터리가 없는 경우 더 이상 자동으로 생성되지 않습니다.
-
파일을 다른 파티션에 작성하려면
/etc/kdump.conf구성 파일을 편집합니다.선택한 항목에 따라
행의 시작 부분에서 해시 기호(# )를 제거합니다.#ext4-
장치 이름(
#ext4 /dev/vg/lv_kdump행) -
파일 시스템 레이블(
#ext4 LABEL=/boot행) -
UUID (
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937행)
-
장치 이름(
파일 시스템 유형과 장치 이름, 레이블 또는 UUID를 필수 값으로 변경합니다. UUID 값을 지정하는 올바른 구문은
UUID="correct-uuid"및UUID=correct-uuid입니다. 예를 들면 다음과 같습니다.ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요LABEL=또는UUID=를 사용하여 스토리지 장치를 지정하는 것이 좋습니다./dev/sda3과 같은 디스크 장치 이름은 재부팅 시 일관성이 유지되지 않습니다.IBM Z 하드웨어에서 Direct Access Storage Device(DASD)를 사용하는 경우
kdump를 진행하기 전에 덤프 장치가/etc/dasd.conf에 올바르게 지정되었는지 확인합니다.
크래시 덤프를 장치에 직접 작성하려면
/etc/kdump.conf구성 파일을 편집합니다.-
행의 시작 부분에서 해시 기호( # )를 제거합니다.#raw /dev/vg/lv_kdump 값을 원하는 장치 이름으로 바꿉니다. 예를 들면 다음과 같습니다.
raw /dev/sdb1
raw /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
NFS프로토콜을 사용하여 크래시 덤프를 원격 시스템에 저장하려면 다음을 수행합니다.-
행의 시작 부분에서 해시 기호( # )를 제거합니다.#nfs my.server.com:/export/tmp 값을 유효한 호스트 이름 및 디렉터리 경로로 바꿉니다. 예를 들면 다음과 같습니다.
nfs penguin.example.com:/export/cores
nfs penguin.example.com:/export/coresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 적용하려면
kdump서비스를 다시 시작하십시오.sudo systemctl restart kdump.service
sudo systemctl restart kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고NFS 지시문을 사용하여 NFS 대상을 지정하는 동안
kdump.service는 자동으로 NFS 대상을 마운트하여 디스크 공간을 확인합니다. NFS 대상을 미리 마운트할 필요가 없습니다.kdump.service가 대상을 마운트하지 않도록 하려면kdump.conf에서dracut_args --mount지시문을 사용합니다. 그러면kdump.service가--mount인수와 함께dracut유틸리티를 호출하여 NFS 대상을 지정할 수 있습니다.
-
SSH 프로토콜을 사용하여 크래시 덤프를 원격 시스템에 저장하려면 다음을 수행합니다.
-
행의 시작 부분에서 해시 기호(# )를 제거합니다.#ssh user@my.server.com - 값을 유효한 사용자 이름 및 호스트 이름으로 바꿉니다.
구성에 SSH 키를 포함합니다.
-
#sshkey /root/.ssh/kdump_id_rsa행의 시작 부분에서 해시 기호를 제거합니다. 덤프하려는 서버에서 유효한 키 위치로 값을 변경합니다. 예를 들면 다음과 같습니다.
ssh john@penguin.example.com sshkey /root/.ssh/mykey
ssh john@penguin.example.com sshkey /root/.ssh/mykeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
-
15.4. kdump 코어 수집기 구성 링크 복사링크가 클립보드에 복사되었습니다!
kdump 서비스는 core_collector 프로그램을 사용하여 크래시 덤프 이미지를 캡처합니다. RHEL에서 makedumpfile 유틸리티는 기본 코어 수집기입니다. 다음과 같이 덤프 파일을 줄이는 데 도움이 됩니다.
- 크래시 덤프 파일의 크기를 압축하고 다양한 덤프 수준을 사용하여 필요한 페이지만 복사합니다.
- 불필요한 크래시 덤프 페이지 제외.
- 크래시 덤프에 포함될 페이지 유형 필터링.
RHEL 7 이상에서는 크래시 덤프 파일 압축이 기본적으로 활성화됩니다.
크래시 덤프 파일 압축을 사용자 지정해야 하는 경우 다음 절차를 따르십시오.
구문
core_collector makedumpfile -l --message-level 1 -d 31
core_collector makedumpfile -l --message-level 1 -d 31
옵션
-
,-c또는-l-p:,zlibfor -c 옵션을 사용하여 각 페이지에서 덤프 파일 형식을 압축하거나 -l 옵션에 대해lzo또는-p옵션을 위해snappy를 지정합니다. -
-d(dump_level): 덤프 파일에 복사되지 않도록 페이지를 제외합니다. -
--message-level: 메시지 유형을 지정합니다. 이 옵션으로message_level을 지정하여 출력된 출력을 제한할 수 있습니다. 예를 들어 7을message_level으로 지정하면 일반적인 메시지 및 오류 메시지가 출력됩니다.message_level의 최대값은 31입니다.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
-
kdump구성 및 대상에 대한 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오.
프로세스
-
루트로서/etc/kdump.conf구성 파일을 편집하고#core_collector makedumpfile -l --message-level 1 -d 31의 시작 부분에서 해시 기호("#")를 제거합니다. - 크래시 덤프 파일 압축을 활성화하려면 다음 명령을 입력합니다.
core_collector makedumpfile -l --message-level 1 -d 31
core_collector makedumpfile -l --message-level 1 -d 31
l 옵션은 덤프 압축 파일 형식을 지정합니다. d 옵션은 덤프 수준을 31로 지정합니다. --message-level 옵션은 메시지 수준을 1로 지정합니다.
또한 -c 및 -p 옵션을 사용하여 다음 예제를 고려하십시오.
-c를 사용하여 크래시 덤프 파일을 압축하려면 다음을 수행합니다.core_collector makedumpfile -c -d 31 --message-level 1
core_collector makedumpfile -c -d 31 --message-level 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 크래시 덤프 파일을 압축하려면
-p:core_collector makedumpfile -p -d 31 --message-level 1
core_collector makedumpfile -p -d 31 --message-level 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.5. kdump 기본 실패 응답 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 kdump 가 구성된 대상 위치에서 크래시 덤프 파일을 생성하지 못하면 시스템이 재부팅되고 프로세스에서 덤프가 손실됩니다. 기본 실패 응답을 변경하고 코어 덤프를 기본 대상에 저장하지 못할 때 다른 작업을 수행하도록 kdump 를 구성할 수 있습니다. 추가 작업은 다음과 같습니다.
dump_to_rootfs-
코어 덤프를
루트파일 시스템에 저장합니다. reboot- 시스템을 재부팅하여 프로세스의 코어 덤프가 손실됩니다.
halt- 시스템에서 시스템을 중지하고 프로세스에서 코어 덤프를 손실합니다.
poweroff- 시스템의 전원을 끄고 프로세스의 코어 덤프를 끊습니다.
shell-
initramfs내에서 쉘 세션을 실행하면 코어 덤프를 수동으로 기록할 수 있습니다. final_action-
kdump에 성공한 후 또는 shell 또는dump_to_rootfs실패 작업이 완료될 때reboot,halt,poweroff와 같은 추가 작업을 활성화합니다. 기본값은reboot입니다. failure_action-
커널 충돌에서 덤프가 실패할 때 수행할 작업을 지정합니다. 기본값은
reboot입니다.
사전 요구 사항
- 루트 권한.
-
kdump구성 및 대상에 대한 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오.
프로세스
-
root사용자로/etc/kdump.conf구성 파일의행의 시작 부분에서 해시 기호(# )를 제거합니다.#failure_action 값을 필수 작업으로 바꿉니다.
failure_action poweroff
failure_action poweroffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6. kdump 설정 파일 링크 복사링크가 클립보드에 복사되었습니다!
kdump 커널의 설정 파일은 /etc/sysconfig/kdump 입니다. 이 파일은 kdump 커널 명령줄 매개변수를 제어합니다. 대부분의 구성에서 기본 옵션을 사용합니다. 그러나 일부 시나리오에서는 kdump 커널 동작을 제어하도록 특정 매개변수를 수정해야 할 수 있습니다. 예를 들어 KDUMP_COMMANDLINE_APPEND 옵션을 수정하여 kdump 커널 명령줄을 추가하여 자세한 디버깅 출력을 얻거나 kdump 명령줄에서 인수를 제거하도록 KDUMP_COMMANDLINE_REMOVE 옵션을 변경합니다.
KDUMP_COMMANDLINE_REMOVE이 옵션은 현재
kdump명령줄에서 인수를 제거합니다.kdump오류 또는kdump커널 부팅 실패를 유발할 수 있는 매개변수를 제거합니다. 이러한 매개변수는 이전KDUMP_COMMANDLINE프로세스에서 구문 분석되었거나/proc/cmdline파일에서 상속되었을 수 있습니다.이 변수가 구성되지 않은 경우
/proc/cmdline파일의 모든 값을 상속합니다. 이 옵션을 구성하면 문제를 디버깅하는 데 유용한 정보도 제공합니다.특정 인수를 제거하려면 다음과 같이
KDUMP_COMMANDLINE_REMOVE에 추가합니다.
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
# KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
KDUMP_COMMANDLINE_APPEND이 옵션은 현재 명령줄에 인수를 추가합니다. 이러한 인수는 이전
KDUMP_COMMANDLINE_REMOVE변수에서 구문 분석되었을 수 있습니다.kdump커널의 경우mce,cgroup,numa,hest_disable과 같은 특정 모듈을 비활성화하면 커널 오류를 방지할 수 있습니다. 이러한 모듈은kdump용으로 예약된 커널 메모리의 중요한 부분을 사용하거나kdump커널 부팅 실패를 유발할 수 있습니다.kdump커널 명령줄에서 메모리cgroup을 비활성화하려면 다음과 같이 명령을 실행합니다.
KDUMP_COMMANDLINE_APPEND="cgroup_disable=memory"
KDUMP_COMMANDLINE_APPEND="cgroup_disable=memory"
15.7. kdump 설정 테스트 링크 복사링크가 클립보드에 복사되었습니다!
kdump 를 구성한 후 시스템 충돌을 수동으로 테스트하고 vmcore 파일이 정의된 kdump 대상에 생성되었는지 확인해야 합니다. vmcore 파일은 새로 부팅된 커널의 컨텍스트에서 캡처됩니다. 따라서 vmcore 에는 커널 충돌을 디버깅하는 데 중요한 정보가 있습니다.
활성 프로덕션 시스템에서 kdump 를 테스트하지 마십시오. kdump 를 테스트하는 명령으로 인해 커널이 데이터 손실과 충돌합니다. 시스템 아키텍처에 따라 kdump 테스트에서 부팅 시간이 긴 몇 가지 재부팅이 필요할 수 있으므로 상당한 유지 관리 시간을 예약해야 합니다.
kdump 테스트 중에 vmcore 파일이 생성되지 않으면 kdump 테스트를 위해 테스트를 다시 실행하기 전에 문제를 식별하고 수정합니다.
수동 시스템을 수정하는 경우 시스템 수정이 끝날 때 kdump 구성을 테스트해야 합니다. 예를 들어 다음 변경 사항을 수행하는 경우 다음을 위한 최적의 kdump 성능에 대한 kdump 구성을 테스트해야 합니다.
- 패키지 업그레이드.
- 하드웨어 수준 변경(예: 스토리지 또는 네트워킹 변경)
- 펌웨어 업그레이드.
- 타사 모듈을 포함하는 새로운 설치 및 애플리케이션 업그레이드.
- 핫플러그 메커니즘을 사용하여 이 메커니즘을 지원하는 하드웨어에 메모리를 추가하는 경우.
-
/etc/kdump.conf또는/etc/sysconfig/kdump파일을 변경한 후
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
-
모든 중요한 데이터를 저장했습니다.
kdump를 테스트하는 명령으로 인해 커널이 데이터 손실과 충돌합니다. - 시스템 아키텍처에 따라 상당한 머신 유지 관리 시간을 예약했습니다.
프로세스
kdump서비스를 활성화합니다.kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpctl을 사용하여kdump서비스의 상태를 확인합니다.kdumpctl status kdump:Kdump is operational
# kdumpctl status kdump:Kdump is operationalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택적으로
systemctl명령을 사용하는 경우 출력은systemd저널에 출력됩니다.커널 충돌을 시작하여
kdump구성을 테스트합니다.sysrq-trigger키 조합을 사용하면 커널이 충돌하고 필요한 경우 시스템을 재부팅할 수 있습니다.echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 재부팅 시
주소-YYYY-MM-DD-HH:MM:SS/vmcore파일이/etc/kdump.conf파일에 지정된 위치에 생성됩니다. 기본값은/var/crash/입니다.
15.8. 시스템 충돌 후 kdump에 의해 생성된 파일 링크 복사링크가 클립보드에 복사되었습니다!
시스템 충돌 후 kdump 서비스는 덤프 파일(vmcore)에 커널 메모리를 캡처하고 문제 해결 및 postmortem 분석을 지원하기 위해 추가 진단 파일을 생성합니다.
kdump 에 의해 생성된 파일:
-
vmcore- 충돌 시 시스템 메모리를 포함하는 주요 커널 메모리 덤프 파일입니다.kdump구성에 지정된core_collector프로그램의 구성에 따라 데이터를 포함합니다. 기본적으로 커널 데이터 구조, 프로세스 정보, 스택 추적 및 기타 진단 정보. -
vmcore-dmesg.txt- 패닉 상태인 기본 커널의 커널 링 버퍼 로그(dmesg)의 내용입니다. -
kexec-dmesg.log-vmcore데이터를 수집하는 보조kexec커널 실행으로부터의 커널 및 시스템 로그 메시지가 있습니다.
15.9. kdump 서비스 활성화 및 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
특정 커널 또는 설치된 모든 커널에서 kdump 기능을 활성화하거나 비활성화하도록 구성할 수 있습니다. kdump 기능을 정기적으로 테스트하고 올바르게 작동하는지 확인해야 합니다.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
-
구성 및 대상에 대한
kdump요구 사항을 완료했습니다. 지원되는 kdump 구성 및 대상 을 참조하십시오. -
kdump설치에 대한 모든 구성은 필요에 따라 설정됩니다.
프로세스
multi-user.target에 대해kdump서비스를 활성화합니다.systemctl enable kdump.service
# systemctl enable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 세션에서 서비스를 시작합니다.
systemctl start kdump.service
# systemctl start kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump서비스를 중지합니다.systemctl stop kdump.service
# systemctl stop kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump서비스를 비활성화합니다.systemctl disable kdump.service
# systemctl disable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
kptr_restrict=1 을 기본값으로 설정하는 것이 좋습니다. kptr_restrict 가 기본값으로 설정된 경우 kdumpctl 서비스는KASLR(커널 주소 공간 레이아웃)이 활성화되었는지 여부에 관계없이 크래시 커널을 로드합니다.
kptr_restrict 가 1 로 설정되지 않고 KASLR이 활성화된 경우 /proc/kore 파일의 콘텐츠가 모든 0으로 생성됩니다. kdumpctl 서비스가 /proc/kcore 파일에 액세스하지 못하고 크래시 커널을 로드합니다. kexec-kdump-howto.txt 파일에는 kptr_restrict=1 을 설정할 것을 권장하는 경고 메시지가 표시됩니다. sysctl.conf 파일에서 다음을 확인하여 kdumpctl 서비스가 크래시 커널을 로드하는지 확인합니다.
-
sysctl.conf파일의 커널kptr_restrict=1.
15.10. 커널 드라이버가 kdump에 대한 로드되지 않음 링크 복사링크가 클립보드에 복사되었습니다!
/etc/sysconfig/kdump 구성 파일에 KDUMP_COMMANDLINE_APPEND= 변수를 추가하여 캡처 커널이 특정 커널 드라이버를 로드하지 않도록 제어할 수 있습니다. 이 방법을 사용하면 kdump 초기 RAM 디스크 이미지 initramfs 가 지정된 커널 모듈을 로드하지 못하도록 할 수 있습니다. 이렇게 하면 OOM(메모리 부족) 중단 오류 또는 기타 크래시 커널 실패를 방지할 수 있습니다.
다음 구성 옵션 중 하나를 사용하여 KDUMP_COMMANDLINE_APPEND= 변수를 추가할 수 있습니다.
-
rd.driver.blacklist=<modules> -
modprobe.blacklist=<modules>
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
프로세스
현재 실행 중인 커널에 로드된 모듈 목록을 표시합니다. 로드에서 차단할 커널 모듈을 선택합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/kdump파일에서KDUMP_COMMANDLINE_APPEND=변수를 업데이트합니다. 예를 들면 다음과 같습니다.KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"
KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또한
modprobe.blacklist= <modules> 구성 옵션을 사용하여 다음 예제를 고려하십시오.KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"
KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"Copy to Clipboard Copied! Toggle word wrap Toggle overflow kdump서비스를 다시 시작하십시오.systemctl restart kdump
# systemctl restart kdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.11. 암호화된 디스크가 있는 시스템에서 kdump 실행 링크 복사링크가 클립보드에 복사되었습니다!
LUKS 암호화된 파티션을 실행할 때 시스템에 특정 양의 사용 가능한 메모리가 필요합니다. 시스템에 필요한 양의 메모리보다 적은 경우 cryptsetup 유틸리티에서 파티션을 마운트하지 못합니다. 결과적으로 두 번째 커널(capture 커널)에서 vmcore 파일을 암호화된 대상 위치로 캡처할 수 없습니다.
kdumpctl estimate 명령은 kdump . kdump ctl 추정에 필요한 메모리 양을 추정하는 데 도움이 됩니다.kdumpctl 추정은 kdump 에 필요한 메모리 크기에 가장 적합한 크래시커널 값을 출력합니다.
권장되는 crashkernel 값은 현재 커널 크기, 커널 모듈, initramfs 및 LUKS 암호화된 대상 메모리 요구 사항을 기반으로 계산됩니다.
사용자 정의 crashkernel= 옵션을 사용하는 경우 kdumpctl 추정치 는 필요한 크기 값을 출력합니다. 값은 LUKS 암호화된 대상에 필요한 메모리 크기입니다.
프로세스
추정치
crashkernel=값을 출력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
crashkernel=값을 늘려 필요한 메모리 양을 구성합니다. - 시스템을 재부팅합니다.
kdump 서비스가 여전히 덤프 파일을 암호화된 대상에 저장하지 못하는 경우 필요에 따라 crashkernel= 값을 늘립니다.
16장. 웹 콘솔에서 kdump 구성 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8 웹 콘솔을 사용하여 kdump 구성을 설정하고 테스트할 수 있습니다. 웹 콘솔은 부팅 시 kdump 서비스를 활성화할 수 있습니다. 웹 콘솔을 사용하면 kdump 에 대해 예약된 메모리를 구성하고 압축되지 않았거나 압축되지 않은 형식으로 vmcore 저장 위치를 선택할 수 있습니다.
16.1. 웹 콘솔에서 kdump 메모리 사용량 및 대상 위치 구성 링크 복사링크가 클립보드에 복사되었습니다!
kdump 커널에 대한 메모리 예약을 구성하고 RHEL 웹 콘솔 인터페이스를 사용하여 vmcore 덤프 파일을 캡처할 대상 위치도 지정할 수 있습니다.
사전 요구 사항
- 웹 콘솔을 설치하고 액세스할 수 있어야 합니다. 자세한 내용은 웹 콘솔 설치를 참조하십시오.
프로세스
-
웹 콘솔에서 스위치를 on으로 설정하여
kdump서비스를 시작합니다. 터미널에서
kdump메모리 사용량을 구성합니다. 예를 들면 다음과 같습니다.sudo grubby --update-kernel ALL --args crashkernel=512M
$ sudo grubby --update-kernel ALL --args crashkernel=512MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하여 변경 사항을 적용합니다.
- 커널 덤프 탭에서 Crash 덤프 위치 필드의 끝에 있는 편집 을 클릭합니다.
vmcore덤프 파일을 저장할 대상 디렉터리를 지정합니다.- 로컬 파일 시스템의 드롭다운 메뉴에서 로컬 파일 시스템을 선택합니다.
SSH 프로토콜을 사용하여 원격 시스템의 경우 드롭다운 메뉴에서 SSH를 통한 Remote 를 선택하고 다음 필드를 지정합니다.
- 서버 필드에 원격 서버 주소를 입력합니다.
- SSH 키 필드에 SSH 키 위치를 입력합니다.
- 디렉터리 필드에 대상 디렉터리를 입력합니다.
NFS 프로토콜을 사용하여 원격 시스템의 경우 드롭다운 메뉴에서 Remote over NFS 를 선택하고 다음 필드를 지정합니다.
- 서버 필드에 원격 서버 주소를 입력합니다.
- 내보내기 필드에 NFS 서버의 공유 폴더 위치를 입력합니다.
디렉터리 필드에 대상 디렉터리를 입력합니다.
참고Compression 확인란을 선택하여
vmcore파일의 크기를 줄일 수 있습니다.
선택 사항: 자동화 스크립트 보기를 클릭하여 자동화 스크립트를 표시합니다.
생성된 스크립트가 있는 창이 열립니다. 쉘 스크립트 및 Ansible 플레이북 생성 옵션 탭을 찾을 수 있습니다.
선택 사항: Copy to 클립보드를 클릭하여 스크립트를 복사합니다.
이 스크립트를 사용하여 여러 시스템에 동일한 구성을 적용할 수 있습니다.
검증
- 클릭합니다.
kdump 설정 테스트에서 Crash 시스템을 클릭합니다.
주의시스템 충돌을 시작하면 커널 작업이 중지되고 데이터 손실로 인해 시스템이 중단됩니다.
17장. kdump 활성화 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8 시스템의 경우 특정 커널 또는 설치된 모든 커널에서 kdump 기능 활성화 또는 비활성화를 구성할 수 있습니다. 그러나 kdump 기능을 정기적으로 테스트하고 작동 상태를 검증해야 합니다.
17.1. 설치된 모든 커널에 kdump 활성화 링크 복사링크가 클립보드에 복사되었습니다!
kdump 서비스는 kexec 툴이 설치된 후 kdump.service 를 활성화하여 시작합니다. 머신에 설치된 모든 커널에 대해 kdump 서비스를 활성화하고 시작할 수 있습니다.
사전 요구 사항
- 관리자 권한이 있습니다.
프로세스
설치된 모든 커널에
crashkernel=명령줄 매개변수를 추가합니다.grubby --update-kernel=ALL --args="crashkernel=xxM"
# grubby --update-kernel=ALL --args="crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow XXM은 필요한 메모리(MB)입니다.시스템을 재부팅합니다.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump서비스를 활성화합니다.systemctl enable --now kdump.service
# systemctl enable --now kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
kdump서비스가 실행 중인지 확인합니다.systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.2. 설치된 특정 커널에 대해 kdump 활성화 링크 복사링크가 클립보드에 복사되었습니다!
머신에서 특정 커널에 대해 kdump 서비스를 활성화할 수 있습니다.
사전 요구 사항
- 관리자 권한이 있습니다.
프로세스
시스템에 설치된 커널을 나열합니다.
ls -a /boot/vmlinuz-* /boot/vmlinuz-0-rescue-2930657cd0dc43c2b75db480e5e5b4a9 /boot/vmlinuz-4.18.0-330.el8.x86_64 /boot/vmlinuz-4.18.0-330.rt7.111.el8.x86_64
# ls -a /boot/vmlinuz-* /boot/vmlinuz-0-rescue-2930657cd0dc43c2b75db480e5e5b4a9 /boot/vmlinuz-4.18.0-330.el8.x86_64 /boot/vmlinuz-4.18.0-330.rt7.111.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템의 GRUB(GRUB) 설정에 특정
kdump커널을 추가합니다.예를 들면 다음과 같습니다.
grubby --update-kernel=vmlinuz-4.18.0-330.el8.x86_64 --args="crashkernel=xxM"
# grubby --update-kernel=vmlinuz-4.18.0-330.el8.x86_64 --args="crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow XXM은 필요한 메모리 예약(MB)입니다.kdump서비스를 활성화합니다.systemctl enable --now kdump.service
# systemctl enable --now kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
kdump서비스가 실행 중인지 확인합니다.systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.3. kdump 서비스 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
kdump.service 를 중지하고 RHEL 8 시스템에서 서비스가 시작되지 않도록 비활성화할 수 있습니다.
사전 요구 사항
-
kdump구성 및 대상에 대한 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오. -
kdump설치에 대한 모든 구성은 필요에 따라 설정됩니다. 자세한 내용은 kdump 설치를 참조하십시오.
프로세스
현재 세션에서
kdump서비스를 중지하려면 다음을 수행합니다.systemctl stop kdump.service
# systemctl stop kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump서비스를 비활성화하려면 다음을 수행합니다.systemctl disable kdump.service
# systemctl disable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
kptr_restrict=1 을 기본값으로 설정하는 것이 좋습니다. kptr_restrict 가 기본값으로 설정된 경우 kdumpctl 서비스는KASLR(커널 주소 공간 레이아웃)이 활성화되었는지 여부에 관계없이 크래시 커널을 로드합니다.
kptr_restrict 가 1 로 설정되지 않고 KASLR 이 활성화된 경우 /proc/kore 파일의 콘텐츠가 모든 0으로 생성됩니다. kdumpctl 서비스가 /proc/kcore 파일에 액세스하지 못하고 크래시 커널을 로드합니다. kexec-kdump-howto.txt 파일에는 kptr_restrict=1 을 설정할 것을 권장하는 경고 메시지가 표시됩니다. sysctl.conf 파일에서 다음을 확인하여 kdumpctl 서비스가 크래시 커널을 로드하는지 확인합니다.
-
sysctl.conf파일의 커널kptr_restrict=1.
18장. 지원되는 kdump 구성 및 대상 링크 복사링크가 클립보드에 복사되었습니다!
kdump 메커니즘은 커널 충돌 발생 시 크래시 덤프 파일을 생성하는 Linux 커널의 기능입니다. 커널 덤프 파일에는 커널 충돌의 근본 원인을 분석하고 결정하는 데 도움이 되는 중요한 정보가 있습니다. 충돌은 다양한 요인, 하드웨어 문제 또는 타사 커널 모듈 문제로 인해 몇 가지 이름을 지정할 수 있습니다.
제공된 정보 및 절차를 사용하면 다음 작업을 수행할 수 있습니다.
- RHEL 8 시스템에 대해 지원되는 구성 및 대상을 식별합니다.
- kdump를 구성합니다.
- kdump 작업을 확인합니다.
18.1. kdump의 메모리 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
kdump 에서 커널 크래시 덤프를 캡처하고 추가 분석을 위해 저장하려면 시스템 메모리의 일부를 캡처 커널에 영구적으로 예약해야 합니다. 예약되면 시스템 메모리의 이 부분을 기본 커널에서 사용할 수 없습니다.
메모리 요구 사항은 특정 시스템 매개변수에 따라 다릅니다. 주요 요인 중 하나는 시스템의 하드웨어 아키텍처입니다. x86_64라고도 하는 Intel 64 및 AMD64와 같은 정확한 시스템 아키텍처를 식별하고 표준 출력에 인쇄하려면 다음 명령을 사용합니다.
uname -m
$ uname -m
명시된 최소 메모리 요구 사항 목록을 사용하여 사용 가능한 최신 버전에서 kdump 의 메모리를 자동으로 예약하도록 적절한 메모리 크기를 설정할 수 있습니다. 메모리 크기는 시스템의 아키텍처 및 사용 가능한 실제 메모리에 따라 다릅니다.
| 아키텍처 | 사용 가능한 메모리 | 최소 예약 메모리 |
|---|---|---|
|
AMD64 및 Intel 64 ( | 1GB에서 4GB | 192MB RAM |
| 4GB에서 64GB | 256MB RAM | |
| 64GB 이상 | 512MB RAM | |
|
64비트 ARM 아키텍처( | 2GB 이상 | 480MB의 RAM |
|
IBM Power Systems ( | 2GB에서 4GB | 384MB의 RAM |
| 4GB ~ 16GB | 512MB RAM | |
| 16GB에서 64GB | 1GB RAM | |
| 64GB에서 128GB | 2GB RAM | |
| 128GB 이상 | 4GB RAM | |
|
IBM Z ( | 1GB에서 4GB | 192MB RAM |
| 4GB에서 64GB | 256MB RAM | |
| 64GB 이상 | 512MB RAM |
많은 시스템에서 kdump 는 필요한 메모리 양을 추정하고 자동으로 예약할 수 있습니다. 이 동작은 기본적으로 활성화되어 있지만 시스템 아키텍처에 따라 다른 특정 양의 사용 가능한 메모리가 있는 시스템에서만 작동합니다.
시스템의 총 메모리 양을 기반으로 예약된 메모리의 자동 구성은 최선의 노력 추정입니다. I/O 장치와 같은 다른 요인에 따라 실제 필요한 메모리가 다를 수 있습니다. 메모리가 충분하지 않으면 커널 패닉의 경우 디버그 커널을 캡처 커널로 부팅할 수 없습니다. 이 문제를 방지하려면 크래시 커널 메모리를 충분히 늘립니다.
18.2. 자동 메모리 예약의 최소 임계값 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 kexec-tools 유틸리티는 crashkernel 명령줄 매개변수를 구성하고 kdump 에 대해 일정 양의 메모리를 예약합니다. 그러나 일부 시스템에서는 부트 로더 구성 파일에서 crashkernel=auto 매개 변수를 사용하거나 그래픽 구성 유틸리티에서 이 옵션을 활성화하여 kdump 에 메모리를 할당할 수 있습니다. 이 자동 예약이 작동하려면 시스템에서 특정 양의 총 메모리를 사용할 수 있어야 합니다. 메모리 요구 사항은 시스템의 아키텍처에 따라 다릅니다. 시스템 메모리가 지정된 임계값보다 작으면 메모리를 수동으로 구성해야 합니다.
| 아키텍처 | 필요한 메모리 |
|---|---|
|
AMD64 및 Intel 64 ( | 2 GB |
|
IBM Power Systems ( | 2 GB |
|
IBM Z ( | 4 GB |
부팅 명령줄의 crashkernel=auto 옵션은 RHEL 9 이상 릴리스에서 더 이상 지원되지 않습니다.
18.3. 지원되는 kdump 대상 링크 복사링크가 클립보드에 복사되었습니다!
커널 충돌이 발생하면 운영 체제는 구성된 또는 기본 대상 위치에 덤프 파일을 저장합니다. 덤프 파일을 장치에 직접 저장하거나 로컬 파일 시스템에 파일로 저장하거나 네트워크를 통해 덤프 파일을 보낼 수 있습니다. 다음 덤프 대상 목록을 사용하면 kdump 에서 현재 지원되거나 지원되지 않는 대상을 알 수 있습니다.
| 대상 유형 | 지원되는 대상 | 지원되지 않는 대상 |
|---|---|---|
| 물리적 스토리지 |
|
|
| 네트워크 |
|
|
| 하이퍼바이저 |
| |
| 파일 시스템 | ext[234], XFS 및 NFS 파일 시스템. |
|
| 펌웨어 |
|
18.4. 지원되는 kdump 필터링 수준 링크 복사링크가 클립보드에 복사되었습니다!
kdump 는 덤프 파일의 크기를 줄이기 위해 makedumpfile 코어 수집기를 사용하여 데이터를 압축하고 원하지 않는 정보를 제외합니다. 예를 들어 -8 수준을 사용하여 hugepages 및 hugetlbfs 페이지를 제거할 수 있습니다. 현재 dumpfile 에서 지원하는 수준은 'kdump'에 대한 수준 필터링을 위해 표에서 확인할 수 있습니다.
| 옵션 | 설명 |
|---|---|
|
| 0 페이지 |
|
| 캐시 페이지 |
|
| 캐시 비공개 캐시 |
|
| 사용자 페이지 |
|
| 무료 페이지 |
18.5. 지원되는 기본 실패 응답 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 kdump 가 코어 덤프를 생성하지 못하는 경우 운영 체제가 재부팅됩니다. 그러나 코어 덤프를 기본 대상에 저장하지 못하는 경우 다른 작업을 수행하도록 kdump 를 구성할 수 있습니다.
| 옵션 | 설명 |
|---|---|
|
| 코어 덤프를 루트 파일 시스템에 저장합니다. 이 옵션은 네트워크 대상과 함께 특히 유용합니다. 네트워크 대상에 연결할 수 없는 경우 이 옵션은 코어 덤프를 로컬로 저장하도록 kdump를 구성합니다. 시스템이 나중에 재부팅됩니다. |
|
| 시스템을 재부팅하여 프로세스에서 코어 덤프를 손실합니다. |
|
| 시스템을 중단하고 프로세스의 코어 덤프를 손실합니다. |
|
| 시스템의 전원을 끄고 프로세스의 코어 덤프를 끊습니다. |
|
| initramfs 내에서 쉘 세션을 실행하여 사용자가 코어 덤프를 수동으로 기록할 수 있습니다. |
|
|
|
18.6. final_action 매개변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
kdump 가 성공하거나 kdump 가 구성된 대상에 vmcore 파일을 저장하지 못하는 경우, final_action 매개변수를 사용하여 reboot,halt, poweroff 와 같은 추가 작업을 수행할 수 있습니다. final_action 매개변수를 지정하지 않으면 재부팅이 기본 응답입니다.
프로세스
final_action을 구성하려면/etc/kdump.conf파일을 편집하고 다음 옵션 중 하나를 추가합니다.-
final_action reboot -
final_action halt -
final_action poweroff
-
변경 사항을 적용하려면
kdump서비스를 다시 시작하십시오.kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.7. failure_action 매개변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
failure_action 매개 변수는 커널 충돌 시 덤프가 실패할 때 수행할 작업을 지정합니다. 시스템을 재부팅 하는 failure_action 의 기본 동작은 재부팅입니다.
매개변수는 수행할 다음 작업을 인식합니다.
reboot- 덤프 실패 후 시스템을 재부팅합니다.
dump_to_rootfs- 루트가 아닌 덤프 대상이 구성된 경우 덤프 파일을 루트 파일 시스템에 저장합니다.
halt- 시스템을 중지합니다.
poweroff- 시스템에서 실행 중인 작업을 중지합니다.
shell-
initramfs내에서 쉘 세션을 시작하여 추가 복구 작업을 수동으로 수행할 수 있습니다.
프로세스
덤프가 실패하는 경우 수행할 작업을 구성하려면
/etc/kdump.conf파일을 편집하고failure_action옵션 중 하나를 지정합니다.-
failure_action reboot -
failure_action halt -
failure_action poweroff -
failure_action 쉘 -
failure_action dump_to_rootfs
-
변경 사항을 적용하려면
kdump서비스를 다시 시작하십시오.kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19장. 펌웨어 지원 덤프 메커니즘 링크 복사링크가 클립보드에 복사되었습니다!
펌웨어 지원 덤프(fadump)는 IBM POWER 시스템의 kdump 메커니즘에 대한 대안으로 제공되는 덤프 캡처 메커니즘입니다. kexec 및 kdump 메커니즘은 AMD64 및 Intel 64 시스템에서 코어 덤프를 캡처하는 데 유용합니다. 그러나 미니 시스템 및 가상 머신과 같은 일부 하드웨어는 온보드 펌웨어를 사용하여 메모리 영역을 분리하고 충돌 분석에 중요한 데이터의 우발적인 덮어쓰기를 방지합니다. fadump 유틸리티는 IBM POWER 시스템에서 RHEL과의 통합 및 fadump 메커니즘에 최적화되어 있습니다.
19.1. IBM PowerPC 하드웨어에서 펌웨어 지원 덤프 링크 복사링크가 클립보드에 복사되었습니다!
fadump 유틸리티는 PCI 및 I/O 장치가 있는 완전히 재설정 시스템에서 vmcore 파일을 캡처합니다. 이 메커니즘은 펌웨어를 사용하여 충돌 중에 메모리 영역을 유지한 다음 kdump 사용자 공간 스크립트를 재사용하여 vmcore 파일을 저장합니다. 메모리 영역은 부팅 메모리, 시스템 레지스터, 하드웨어 페이지 테이블 항목(PTE)을 제외한 모든 시스템 메모리 콘텐츠로 구성됩니다.
fadump 메커니즘은 파티션을 재부팅하고 새 커널을 사용하여 이전 커널 충돌의 데이터를 덤프하여 기존 덤프 유형에 대한 안정성을 향상시킵니다. fadump 에는 IBM POWER6 프로세서 기반 또는 이후 버전 하드웨어 플랫폼이 필요합니다.
하드웨어 재설정을 위한 PowerPC 특정 방법을 포함한 fadump 메커니즘에 대한 자세한 내용은 /usr/share/doc/kexec-tools/fadump-howto.txt 파일을 참조하십시오.
부트 메모리라는 보존되지 않은 메모리 영역은 크래시 이벤트 후 커널을 성공적으로 부팅하는 데 필요한 RAM의 양입니다. 기본적으로 부팅 메모리 크기는 전체 시스템 RAM의 256MB 또는 5%이며 더 큰 경우입니다.
kexec-initiated 이벤트와 달리 fadump 메커니즘은 production 커널을 사용하여 크래시 덤프를 복구합니다. 충돌 후 부팅할 때 PowerPC 하드웨어는 장치 노드 /proc/device-tree/rtas/ibm.kernel-dump 를 proc 파일 시스템(procfs)에서 사용할 수 있도록 합니다. fadump 인식 kdump 스크립트를 사용하여 저장된 vmcore 를 확인한 다음 시스템이 정상적으로 재부팅되도록 완료합니다.
19.2. 펌웨어 지원 덤프 메커니즘 활성화 링크 복사링크가 클립보드에 복사되었습니다!
펌웨어 지원 덤프(fadump) 메커니즘을 활성화하여 IBM POWER 시스템의 크래시 덤프 기능을 개선할 수 있습니다.
Secure Boot 환경에서 GRUB 부트 로더는 RMA(Real Mode Area)라고 하는 부팅 메모리 영역을 할당합니다. RMA의 크기는 부팅 구성 요소로 나뉩니다. 구성 요소가 크기 할당을 초과하면OOM(메모리 부족) 오류와 함께 GRUB 이 실패합니다.
RHEL 8.7 및 8.6 버전의 Secure Boot 환경에서 펌웨어 지원 덤프(fadump) 메커니즘을 활성화하지 마십시오. GRUB2 부트 로더가 실패하고 다음 오류가 발생합니다.
error: ../../grub-core/kern/mm.c:376:out of memory. Press any key to continue…
error: ../../grub-core/kern/mm.c:376:out of memory.
Press any key to continue…
fadump 구성으로 인해 기본 initramfs 크기를 늘리는 경우에만 시스템을 복구할 수 있습니다.
시스템을 복구하는 해결 방법에 대한 자세한 내용은 GRUB OOM(Out of Memory) 문서의 시스템 부팅을 참조하십시오.
프로세스
-
kdump를 설치하고 구성합니다. fadump=on커널 옵션을 활성화합니다.grubby --update-kernel=ALL --args="fadump=on"
# grubby --update-kernel=ALL --args="fadump=on"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 기본값을 사용하는 대신 예약된 부팅 메모리를 지정하려면
crashkernel=xxM옵션을 활성화합니다. 여기서xx는 메가바이트로 필요한 메모리 양입니다.grubby --update-kernel=ALL --args="crashkernel=xxM fadump=on"
# grubby --update-kernel=ALL --args="crashkernel=xxM fadump=on"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요부팅 구성 옵션을 지정할 때 실행하기 전에 모든 부팅 구성 옵션을 테스트합니다.
kdump커널이 부팅되지 않으면crashkernel=인수에 지정된 값을 점진적으로 늘려 적절한 값을 설정합니다.
19.3. IBM Z 하드웨어에서 펌웨어 지원 덤프 메커니즘 링크 복사링크가 클립보드에 복사되었습니다!
IBM Z 시스템은 다음과 같은 펌웨어 지원 덤프 메커니즘을 지원합니다.
-
독립 실행형 덤프(sadump) -
VMDUMP
kdump 인프라는 IBM Z 시스템에서 지원 및 활용됩니다. 그러나 IBM Z의 펌웨어 지원 덤프(fadump) 방법 중 하나를 사용하면 다음과 같은 이점이 있습니다.
-
시스템 콘솔은
sadump메커니즘을 시작하고 제어하며IPL부팅 가능한 장치에 저장합니다. -
VMDUMP메커니즘은sadump와 유사합니다. 이 툴은 시스템 콘솔에서도 시작되지만 하드웨어에서 결과 덤프를 검색하여 분석을 위해 시스템에 복사합니다. -
이러한 방법(다른 하드웨어 기반 덤프 메커니즘과 동일)은
kdump서비스가 시작되기 전에 초기 부팅 단계에서 시스템의 상태를 캡처할 수 있습니다. -
VMDUMP에는 덤프 파일을 Red Hat Enterprise Linux 시스템으로 수신하는 메커니즘이 포함되어 있지만VMDUMP의 구성 및 제어는 IBM Z 하드웨어 콘솔에서 관리됩니다.
19.4. Fujitsu PRIMEQUEST 시스템에서 sadump 사용 링크 복사링크가 클립보드에 복사되었습니다!
kdump 를 성공적으로 완료할 수 없는 경우 Fujitsu sadump 메커니즘은 폴백 덤프 캡처를 제공합니다. 시스템 관리 보드(MMB) 인터페이스에서 sadump 를 수동으로 호출할 수 있습니다. MMB를 사용하여 Intel 64 또는 AMD64 서버의 경우와 같이 kdump 를 구성한 다음 sadump 를 활성화합니다.
프로세스
/etc/sysctl.conf파일에서 다음 행을 추가하거나 편집하여kdump가sadump에 대해 예상대로 시작되도록 합니다.kernel.panic=0 kernel.unknown_nmi_panic=1
kernel.panic=0 kernel.unknown_nmi_panic=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주의특히
kdump후 시스템이 재부팅되지 않았는지 확인하십시오.kdump가vmcore파일을 저장하지 못한 후 시스템이 재부팅되면sadump를 호출할 수 없습니다./etc/kdump.conf에서failure_action매개변수를halt또는shell로 적절하게 설정합니다.failure_action shell
failure_action shellCopy to Clipboard Copied! Toggle word wrap Toggle overflow
20장. 코어 덤프 분석 링크 복사링크가 클립보드에 복사되었습니다!
시스템 충돌의 원인을 확인하려면 GNU Debugger(GDB)와 유사한 대화형 프롬프트를 제공하는 크래시 유틸리티를 사용할 수 있습니다. 크래시 를 사용하면 kdump,netdump,diskdump 또는 xendump 및 실행 중인 Linux 시스템에서 생성된 코어 덤프를 분석할 수 있습니다. 또는 Kernel Oops Analyzer 또는 Kdump Helper 툴을 사용할 수 있습니다.
20.1. 크래시 유틸리티 설치 링크 복사링크가 클립보드에 복사되었습니다!
제공된 정보를 사용하여 필요한 패키지 및 크래시 유틸리티를 설치하는 절차를 이해하십시오. 크래시 유틸리티는 RHEL 8 시스템에 기본적으로 설치되지 않을 수 있습니다. 크래시 기능은 실행 중이거나 커널 크래시가 발생하고 코어 덤프 파일이 생성되는 동안 시스템의 상태를 대화형으로 분석하는 툴입니다. 코어 덤프 파일은 vmcore 파일이라고도 합니다.
프로세스
관련 리포지토리를 활성화합니다.
subscription-manager repos --enable baseos repository
# subscription-manager repos --enable baseos repositoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable appstream repository
# subscription-manager repos --enable appstream repositoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable rhel-8-for-x86_64-baseos-debug-rpms
# subscription-manager repos --enable rhel-8-for-x86_64-baseos-debug-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow crash패키지를 설치합니다.yum install crash
# yum install crashCopy to Clipboard Copied! Toggle word wrap Toggle overflow kernel-debuginfo패키지를 설치합니다.yum install kernel-debuginfo
# yum install kernel-debuginfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow kernel-debuginfo패키지는 실행 중인 커널에 대응하고 덤프 분석에 필요한 데이터를 제공합니다.
20.2. 크래시 유틸리티 실행 및 종료 링크 복사링크가 클립보드에 복사되었습니다!
크래시 유틸리티는 kdump 를 분석하기 위한 강력한 도구입니다. 크래시 덤프 파일에서 크래시를 실행하면 충돌 시 시스템의 상태에 대한 통찰력을 얻고, 문제의 근본 원인을 식별하고, 커널 관련 문제를 해결할 수 있습니다.
사전 요구 사항
-
현재 실행 중인 커널을 확인합니다(예:
4.18.0-5.el8.x86_64).
프로세스
크래시유틸리티를 시작하려면 다음 두 가지 필수 매개변수를 전달합니다.-
debug-info(압축된 vmlinuz 이미지)입니다(예: 특정
kernel-debuginfo패키지를 통해 제공되는/usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux). 실제 vmcore 파일(예:
/var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore).생성된
크래시명령은 다음과 같습니다.crash /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux /var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore
# crash /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux /var/crash/127.0.0.1-2018-10-06-14:05:33/vmcoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump에서 캡처한 것과 동일한 & lt;kernel> 버전을 사용합니다.예 20.1. 크래시 유틸리티 실행
다음 예제에서는 4.18.0-5.el8.x86_64 커널을 사용하여 2018년 10월 6일 14:05 오후에 생성된 코어 덤프를 분석하는 방법을 보여줍니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
debug-info(압축된 vmlinuz 이미지)입니다(예: 특정
대화형 프롬프트를 종료하고
크래시를 중지하려면exit또는q를 입력합니다.crash> exit ~]#
crash> exit ~]#Copy to Clipboard Copied! Toggle word wrap Toggle overflow
크래시 명령은 라이브 시스템을 디버깅하기 위한 강력한 도구로도 사용됩니다. 그러나 시스템 수준 문제를 방지하려면 주의해야 합니다.
20.3. 크래시 유틸리티에 다양한 표시기 표시 링크 복사링크가 클립보드에 복사되었습니다!
크래시 유틸리티를 사용하여 커널 메시지 버퍼, 백추적, 프로세스 상태, 가상 메모리 정보 및 열려 있는 파일과 같은 다양한 지표를 표시합니다.
메시지 버퍼 표시
커널 메시지 버퍼를 표시하려면 대화형 프롬프트에서
log명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 사용에 대한 자세한 내용은
도움말 로그를 입력합니다.참고커널 메시지 버퍼에는 시스템 충돌에 대한 가장 중요한 정보가 포함됩니다. 항상
vmcore-dmesg.txt파일에서 먼저 덤프됩니다. 예를 들어 대상 위치에 공간이 부족하여 전체vmcore파일을 가져오지 못하면 커널 메시지 버퍼에서 필요한 정보를 얻을 수 있습니다. 기본적으로vmcore-dmesg.txt는/var/crash/디렉터리에 배치됩니다.
역추적 표시
커널 스택 추적을 표시하려면
bt명령을 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow >를 입력하여 특정 프로세스의 역추적 또는 bt 사용량에 대한 자세한 정보를 보려면bt< pidhelp bt를 입력합니다.
프로세스 상태 표시
시스템의 프로세스 상태를 표시하려면
ps명령을 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ps & lt;pid>를 사용하여 단일 특정 프로세스의 상태를 표시합니다.ps사용에 대한 자세한 내용은 help ps 를 사용하십시오.
가상 메모리 정보 표시
기본 가상 메모리 정보를 표시하려면 대화형 프롬프트에서
vm명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow >를 사용하여 단일 특정 프로세스에 대한 정보를 표시하거나 vm 사용량에 대한 자세한 내용은vm& lt;pidhelp vm를 사용합니다.
열려 있는 파일 표시
열려 있는 파일에 대한 정보를 표시하려면
files명령을 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일 & lt;pid>를 사용하여 선택한 프로세스로 열린파일을 표시하거나 파일 사용에 대한 자세한 내용은 도움말파일을사용합니다.
20.4. 커널 Oops Analyzer 사용 링크 복사링크가 클립보드에 복사되었습니다!
Kernel Oops Analyzer 툴은 oops 메시지와 기술 자료의 알려진 문제를 비교하여 크래시 덤프를 분석합니다.
사전 요구 사항
-
커널 Oops Analyzer를 제공하기 위해
oops메시지가 보호됩니다.
프로세스
- Kernel Oops Analyzer 툴에 액세스합니다.
커널 충돌 문제를 진단하려면
vmcore에서 생성된 커널 oops 로그를 업로드합니다.-
또는 텍스트 메시지 또는
vmcore-dmesg.txt를 입력으로 제공하여 커널 충돌 문제를 진단할 수 있습니다.
-
또는 텍스트 메시지 또는
-
DETECT를 클릭하여makedumpfile의 정보를 알려진 솔루션과 비교하여oops메시지를 비교합니다.
20.5. Kdump Helper 툴 링크 복사링크가 클립보드에 복사되었습니다!
Kdump Helper 툴은 제공된 정보를 사용하여 kdump 를 설정하는 데 도움이 됩니다. kdump Helper는 기본 설정에 따라 설정 스크립트를 생성합니다. 서버에서 스크립트를 시작하고 실행하면 kdump 서비스가 설정됩니다.
21장. 초기 kdump를 사용하여 부팅 시간 충돌 캡처 링크 복사링크가 클립보드에 복사되었습니다!
early kdump는 시스템 서비스가 시작되기 전에 부팅 프로세스의 초기 단계에서 시스템 또는 커널 충돌이 발생하는 경우 vmcore 파일을 캡처하는 kdump 메커니즘의 기능입니다. early kdump는 크래시 커널과 initramfs 를 메모리에 로드합니다.
커널 충돌은 kdump 서비스가 시작되기 전에 초기 부팅 단계에서 발생할 수 있으며 충돌하는 커널 메모리의 내용을 캡처하고 저장할 수 있습니다. 따라서 문제 해결에 중요한 정보가 손실되는 충돌과 관련된 중요한 정보가 손실됩니다. 이 문제를 해결하려면 kdump 서비스의 일부인 초기 kdump 기능을 사용할 수 있습니다.
21.1. 초기 kdump 활성화 링크 복사링크가 클립보드에 복사되었습니다!
early kdump 기능은 크래시 커널과 초기 RAM 디스크 이미지(initramfs)를 설정하여 조기 충돌을 위해 vmcore 정보를 캡처할 수 있을 만큼 조기에 로드되도록 설정합니다. 이를 통해 초기 부팅 커널 충돌에 대한 정보가 손실될 위험이 제거됩니다.
사전 요구 사항
- 활성 RHEL 서브스크립션입니다.
-
시스템 CPU 아키텍처용
kexec-tools패키지가 포함된 리포지토리입니다. -
kdump구성 및 대상 요구 사항을 충족했습니다. 자세한 내용은 지원되는 kdump 구성 및 대상 을 참조하십시오.
프로세스
kdump서비스가 활성화되어 활성화되어 있는지 확인합니다.systemctl is-enabled kdump.service && systemctl is-active kdump.service enabled active
# systemctl is-enabled kdump.service && systemctl is-active kdump.service enabled activeCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdump가 활성화되어 실행되지 않은 경우 필요한 구성을 모두 설정하고kdump서비스가 활성화되어 있는지 확인합니다.초기 kdump기능을 사용하여 부팅 커널의initramfs이미지를 다시 빌드합니다.dracut -f --add earlykdump
# dracut -f --add earlykdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow rd.earlykdump커널 명령줄 매개변수를 추가합니다.grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 재부팅하여 변경 사항을 반영합니다.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
rd.earlykdump가 성공적으로 추가되고early kdump기능이 활성화되어 있는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22장. 커널 실시간 패치를 사용하여 패치 적용 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 커널 실시간 패치 솔루션을 사용하여 프로세스를 재부팅하거나 다시 시작하지 않고도 실행 중인 커널을 패치할 수 있습니다.
이 솔루션을 사용하면 시스템 관리자가 다음을 수행합니다.
- 중요한 보안 패치를 커널에 즉시 적용할 수 있습니다.
- 장기 실행 작업이 완료되거나 사용자가 로그아웃하거나 예약된 다운 타임이 발생할 때까지 기다릴 필요가 없습니다.
- 시스템의 가동 시간을 더 많이 제어하고 보안 또는 안정성을 희생하지 않습니다.
커널 실시간 패치를 사용하면 보안 패치에 필요한 재부팅 횟수를 줄일 수 있습니다. 그러나 중요하거나 중요한 모든 CVE를 처리할 수 없습니다. 실시간 패치 범위에 대한 자세한 내용은 Red Hat Enterprise Linux에서 지원되는 Red Hat Knowledgebase 솔루션 Is live kernel patch (kpatch) 를 참조하십시오.
커널 실시간 패치와 기타 커널 하위 구성 요소 간에 일부 비호환성이 있습니다. 커널 실시간 패치를 사용하기 전에 kpatch의 제한 사항을 주의 깊게 읽으십시오.
커널 라이브 패치 업데이트의 지원 주기에 대한 자세한 내용은 다음을 참조하십시오.
22.1. kpatch의 제한 사항 링크 복사링크가 클립보드에 복사되었습니다!
-
kpatch기능을 사용하면 즉각적인 시스템 재부팅이 필요하지 않은 간단한 보안 및 버그 수정 업데이트를 적용할 수 있습니다. -
패치를 로드하는 동안 또는 패치를 로드한 후
SystemTap또는kprobe툴을 사용해서는 안 됩니다. 프로브가 제거될 때까지 패치가 적용되지 않을 수 있습니다.
22.2. 타사 실시간 패치 지원 링크 복사링크가 클립보드에 복사되었습니다!
kpatch 유틸리티는 Red Hat 리포지토리에서 제공하는 RPM 모듈을 사용하여 Red Hat에서 지원하는 유일한 커널 실시간 패치 유틸리티입니다. Red Hat은 타사에서 제공하는 실시간 패치를 지원하지 않습니다.
타사 소프트웨어 지원 정책에 대한 자세한 내용은 타사 구성 요소를 사용할 때 Red Hat이 어떻게 지원됩니까?
22.3. 커널 라이브 패치에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
커널 모듈(kmod)은 커널 실시간 패치 기능을 구현하고 RPM 패키지로 제공됩니다.
모든 고객은 일반 채널을 통해 제공되는 커널 라이브 패치에 액세스할 수 있습니다. 그러나 연장된 지원 오퍼링에 가입하지 않은 고객은 다음 마이너 릴리스가 출시되면 현재 마이너 릴리스의 새로운 패치에 대한 액세스 권한이 손실됩니다. 예를 들어 표준 서브스크립션을 사용하는 고객은 RHEL 8.3 커널이 릴리스될 때까지 RHEL 8.2 커널을 실시간으로 패치할 수 있습니다.
커널 실시간 패치의 구성 요소는 다음과 같습니다.
- 커널 패치 모듈
- 커널 라이브 패치를 위한 제공 메커니즘.
- 커널 패치를 위해 특별히 빌드된 커널 모듈입니다.
- patch 모듈에는 커널에 필요한 수정 코드가 포함되어 있습니다.
-
패치 모듈은
livepatch커널 하위 시스템에 등록하고 대체 함수에 대한 포인터와 함께 교체할 원래 함수를 지정합니다. 커널 패치 모듈은 RPM으로 제공됩니다. -
이름 지정 규칙은
kpatch_<kernel version>_<kpatch version>_<kpatch release>입니다. 이름의 "커널 버전" 부분에는 밑줄 로 대체된 점이 있습니다.
kpatch유틸리티- 패치 모듈을 관리하는 명령줄 유틸리티입니다.
kpatch서비스-
multiuser.target에 필요한systemd서비스. 이 대상은 부팅 시 커널 패치 모듈을 로드합니다. kpatch-dnf패키지- RPM 패키지 형태로 제공되는 DNF 플러그인. 이 플러그인은 커널 라이브 패치에 대한 자동 서브스크립션을 관리합니다.
22.4. 실시간 패치 커널 프로세스 링크 복사링크가 클립보드에 복사되었습니다!
kpatch 커널 패치 솔루션은 라이브 패치 커널 하위 시스템을 사용하여 오래된 기능을 업데이트된 함수로 리디렉션합니다. 시스템에 실시간 커널 패치를 적용하면 다음 프로세스가 트리거됩니다.
-
커널 패치 모듈은
/var/lib/kpatch/디렉터리에 복사되고 다음 부팅 시systemd를 통해 커널에 다시 애플리케이션하기 위해 등록됩니다. -
kpatch모듈은 실행 중인 커널에 로드되고 새 기능은 새 코드 메모리의 위치에 대한 포인터와 함께ftrace메커니즘에 등록됩니다.
커널이 패치된 함수에 액세스하면 ftrace 메커니즘이 이를 리디렉션하여 원래 기능을 우회하고 커널을 패치된 함수 버전으로 안내합니다.
그림 22.1. 커널 실시간 패치 작동 방식
22.5. 현재 설치된 커널을 실시간 패치 스트림에 구독 링크 복사링크가 클립보드에 복사되었습니다!
패치되는 커널 버전과 관련된 커널 패치 모듈은 RPM 패키지로 제공됩니다. 각 RPM 패키지는 시간이 지남에 따라 누적 업데이트됩니다.
다음 절차에서는 지정된 커널에 대해 향후 누적 실시간 패치 업데이트를 구독하는 방법을 설명합니다. 실시간 패치는 누적되므로 지정된 커널에 배포되는 개별 패치를 선택할 수 없습니다.
Red Hat은 Red Hat 지원 시스템에 적용되는 타사 라이브 패치를 지원하지 않습니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
선택 사항: 커널 버전을 확인합니다.
uname -r 4.18.0-94.el8.x86_64
# uname -r 4.18.0-94.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 버전에 해당하는 라이브 패치 패키지를 검색합니다.
yum search $(uname -r)
# yum search $(uname -r)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 실시간 패치 패키지를 설치합니다.
yum install "kpatch-patch = $(uname -r)"
# yum install "kpatch-patch = $(uname -r)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 명령은 해당 특정 커널에 대해서만 최신 누적 라이브 패치를 설치하고 적용합니다.
라이브 패치 패키지의 버전이 1-1 이상이면 패키지에 패치 모듈이 포함됩니다. 이 경우 라이브 패치 패키지를 설치하는 동안 커널이 자동으로 패치됩니다.
커널 패치 모듈은 향후 재부팅 중에
systemd시스템 및 서비스 관리자가 로드할/var/lib/kpatch/디렉터리에도 설치됩니다.참고지정된 커널에 사용할 수 있는 실시간 패치가 없으면 빈 실시간 패치 패키지가 설치됩니다. 라이브 패치 패키지에는 kpatch_version-kpatch_release 가 0-0입니다(예:
kpatch-patch-4_18_0-94-0.el8.x86_64.rpm). 빈 RPM을 설치하면 해당 커널의 향후 실시간 패치에 시스템을 서브스크립션합니다.
검증
설치된 모든 커널이 패치되었는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에서는 커널 패치 모듈이
kpatch-patch-4_18_0-94-1.el8.x86_64.rpm패키지의 최신 수정 사항과 함께 패치된 커널에 로드되었음을 보여줍니다.참고kpatch list명령을 입력하면 빈 라이브 패치 패키지가 반환되지 않습니다. 대신rpm -qa | grep kpatch명령을 사용합니다.rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarch
# rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.6. 향후 커널을 실시간 패치 스트림에 자동으로 구독 링크 복사링크가 클립보드에 복사되었습니다!
kpatch-dnf YUM 플러그인을 사용하여 커널 라이브 패치라고도 하는 커널 패치 모듈에서 제공하는 수정 사항에 시스템을 서브스크립션할 수 있습니다. 이 플러그인은 현재 시스템에서 현재 사용하고 있는 모든 커널에 대해 자동 서브스크립션 을 활성화하고 향후 커널에 설치할 수도 있습니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
선택 사항: 설치된 모든 커널 및 현재 실행 중인 커널을 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kpatch-dnf플러그인을 설치합니다.yum install kpatch-dnf
# yum install kpatch-dnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 라이브 패치에 대한 자동 서브스크립션을 활성화합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 현재 설치된 모든 커널을 서브스크립션하여 커널 라이브 패치를 수신합니다. 또한 이 명령은 설치된 모든 커널에 대해 최신 누적 라이브 패치(있는 경우)를 설치하고 적용합니다.
커널을 업데이트하면 새 커널 설치 프로세스 중에 라이브 패치가 자동으로 설치됩니다.
커널 패치 모듈은 향후 재부팅 중에
systemd시스템 및 서비스 관리자가 로드할/var/lib/kpatch/디렉터리에도 설치됩니다.참고지정된 커널에 사용할 수 있는 실시간 패치가 없으면 빈 실시간 패치 패키지가 설치됩니다. 라이브 패치 패키지에는 kpatch_version-kpatch_release 가 0-0입니다(예:
kpatch-patch-4_18_0-240-0.el8.x86_64.rpm). 빈 RPM을 설치하면 해당 커널의 향후 실시간 패치에 시스템을 서브스크립션합니다.
검증
설치된 모든 커널이 패치되었는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력은 실행 중인 커널과 다른 설치된 커널 모두 kpatch-patch-4_18_0-240_
1-0-1.rpm 및패키지의 수정 사항과 함께 패치되었습니다.kpatch-patch-4_18_0-240_15_1-0-1.rpm참고kpatch list명령을 입력하면 빈 라이브 패치 패키지가 반환되지 않습니다. 대신rpm -qa | grep kpatch명령을 사용합니다.rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarch
# rpm -qa | grep kpatch kpatch-patch-4_18_0-477_21_1-0-0.el8_8.x86_64 kpatch-dnf-0.9.7_0.4-2.el8.noarch kpatch-0.9.7-2.el8.noarchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.7. 실시간 패치 스트림에 대한 자동 서브스크립션 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
커널 패치 모듈에서 제공하는 수정 사항에 맞게 시스템을 서브스크립션하면 서브스크립션이 자동으로 수행됩니다. 이 기능을 비활성화하여 kpatch-patch 패키지의 자동 설치를 비활성화할 수 있습니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
선택 사항: 설치된 모든 커널 및 현재 실행 중인 커널을 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 라이브 패치에 대한 자동 서브스크립션을 비활성화합니다.
yum kpatch manual Updating Subscription Management repositories.
# yum kpatch manual Updating Subscription Management repositories.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
성공적인 결과를 확인할 수 있습니다.
yum kpatch status ... Updating Subscription Management repositories. Last metadata expiration check: 0:30:41 ago on Tue Jun 14 15:59:26 2022. Kpatch update setting: manual
# yum kpatch status ... Updating Subscription Management repositories. Last metadata expiration check: 0:30:41 ago on Tue Jun 14 15:59:26 2022. Kpatch update setting: manualCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.8. 커널 패치 모듈 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
커널 패치 모듈은 RPM 패키지를 통해 전달 및 적용됩니다. 누적 커널 패치 모듈을 업데이트하는 프로세스는 다른 RPM 패키지를 업데이트하는 것과 유사합니다.
사전 요구 사항
프로세스
현재 커널의 새 누적 버전으로 업데이트합니다.
yum update "kpatch-patch = $(uname -r)"
# yum update "kpatch-patch = $(uname -r)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 명령은 현재 실행 중인 커널에 사용 가능한 모든 업데이트를 자동으로 설치하고 적용합니다. 향후 릴리스되는 누적 라이브 패치를 포함합니다.
또는 설치된 모든 커널 패치 모듈을 업데이트합니다.
yum update "kpatch-patch"
# yum update "kpatch-patch"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
시스템이 동일한 커널로 재부팅되면 kpatch.service systemd 서비스에 의해 커널이 자동으로 다시 패치됩니다.
22.9. 실시간 패치 패키지 제거 링크 복사링크가 클립보드에 복사되었습니다!
실시간 패치 패키지를 제거하여 Red Hat Enterprise Linux 커널 실시간 패치 솔루션을 비활성화합니다.
사전 요구 사항
- 루트 권한
- 실시간 패치 패키지가 설치되어 있습니다.
프로세스
실시간 패치 패키지를 선택합니다.
yum list installed | grep kpatch-patch kpatch-patch-4_18_0-94.x86_64 1-1.el8 @@commandline …
# yum list installed | grep kpatch-patch kpatch-patch-4_18_0-94.x86_64 1-1.el8 @@commandline …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에는 사용자가 설치한 실시간 패치 패키지가 나열됩니다.
실시간 패치 패키지를 제거합니다.
yum remove kpatch-patch-4_18_0-94.x86_64
# yum remove kpatch-patch-4_18_0-94.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 라이브 패치 패키지가 제거되면 커널은 다음 재부팅될 때까지 패치되지만 커널 패치 모듈이 디스크에서 제거됩니다. 나중에 재부팅 시 해당 커널이 더 이상 패치되지 않습니다.
- 시스템을 재부팅합니다.
실시간 패치 패키지가 제거되었는지 확인합니다.
yum list installed | grep kpatch-patch
# yum list installed | grep kpatch-patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지가 성공적으로 제거된 경우 명령은 출력을 표시하지 않습니다.
검증
커널 실시간 패치 솔루션이 비활성화되어 있는지 확인합니다.
kpatch list Loaded patch modules:
# kpatch list Loaded patch modules:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력은 커널이 패치되지 않았으며 현재 로드된 패치 모듈이 없기 때문에 실시간 패치 솔루션이 활성화되어 있지 않음을 보여줍니다.
현재 Red Hat은 시스템을 재부팅하지 않고 실시간 패치를 되돌리는 것을 지원하지 않습니다. 문제가 있는 경우 지원 팀에 문의하십시오.
22.10. 커널 패치 모듈 설치 제거 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 커널 실시간 패치 솔루션이 후속 부팅 시 커널 패치 모듈을 적용하지 못하도록 합니다.
사전 요구 사항
- 루트 권한
- 실시간 패치 패키지가 설치되어 있습니다.
- 커널 패치 모듈이 설치되어 로드되었습니다.
프로세스
커널 패치 모듈을 선택합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택한 커널 패치 모듈을 설치 제거합니다.
kpatch uninstall kpatch_4_18_0_94_1_1 uninstalling kpatch_4_18_0_94_1_1 (4.18.0-94.el8.x86_64)
# kpatch uninstall kpatch_4_18_0_94_1_1 uninstalling kpatch_4_18_0_94_1_1 (4.18.0-94.el8.x86_64)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 설치 제거된 커널 패치 모듈이 계속 로드됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택한 모듈이 제거되면 커널은 다음 재부팅 때까지 패치가 유지되지만 커널 패치 모듈이 디스크에서 제거됩니다.
- 시스템을 재부팅합니다.
검증
커널 패치 모듈이 제거되었는지 확인합니다.
kpatch list Loaded patch modules: …
# kpatch list Loaded patch modules: …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제 출력에는 로드되거나 설치된 커널 패치 모듈이 표시되지 않으므로 커널이 패치되지 않고 커널 실시간 패치 솔루션이 활성 상태가 아닙니다.
22.11. kpatch.service 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 커널 실시간 패치 솔루션이 이후 부팅 시 전역적으로 모든 커널 패치 모듈을 적용하지 못하도록 합니다.
사전 요구 사항
- 루트 권한
- 실시간 패치 패키지가 설치되어 있습니다.
- 커널 패치 모듈이 설치되어 로드되었습니다.
프로세스
kpatch.service가 활성화되었는지 확인합니다.systemctl is-enabled kpatch.service enabled
# systemctl is-enabled kpatch.service enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow kpatch.service를 비활성화합니다.systemctl disable kpatch.service Removed /etc/systemd/system/multi-user.target.wants/kpatch.service.
# systemctl disable kpatch.service Removed /etc/systemd/system/multi-user.target.wants/kpatch.service.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 적용된 커널 패치 모듈이 계속 로드됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 시스템을 재부팅합니다.
선택 사항:
kpatch.service의 상태를 확인합니다.systemctl status kpatch.service ● kpatch.service - "Apply kpatch kernel patches" Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled) Active: inactive (dead)
# systemctl status kpatch.service ● kpatch.service - "Apply kpatch kernel patches" Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에서는
kpatch.service가 비활성화되어 있음을 테스트합니다. 따라서 커널 실시간 패치 솔루션이 활성화되지 않습니다.커널 패치 모듈이 언로드되었는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 예제 출력은 커널 패치 모듈이 여전히 설치되어 있지만 커널이 패치되지 않았음을 보여줍니다.
현재 Red Hat은 시스템을 재부팅하지 않고 실시간 패치를 되돌리는 것을 지원하지 않습니다. 문제가 있는 경우 지원 팀에 문의하십시오.
23장. 제어 그룹을 사용하여 애플리케이션의 시스템 리소스 제한 설정 링크 복사링크가 클립보드에 복사되었습니다!
제어 그룹(cgroup) 커널 기능을 사용하면 애플리케이션의 리소스 사용량을 제어하여 보다 효율적으로 사용할 수 있습니다.
다음 작업에 cgroup 을 사용할 수 있습니다.
- 시스템 리소스 할당에 대한 제한 설정.
- 특정 프로세스에 대한 하드웨어 리소스 할당 우선 순위를 지정합니다.
- 특정 프로세스에서 하드웨어 리소스를 가져오지 못하도록 격리합니다.
23.1. 제어 그룹 소개 링크 복사링크가 클립보드에 복사되었습니다!
제어 그룹 Linux 커널 기능을 사용하여 프로세스를 계층적으로 정렬된 그룹인 cgroup 으로 구성할 수 있습니다. /sys/fs/cgroup/ 디렉터리에 기본적으로 마운트된 cgroups 가상 파일 시스템에 구조를 제공하여 계층 구조(제어 그룹 트리)를 정의합니다.
systemd 서비스 관리자는 cgroup 을 사용하여 관리하는 모든 장치 및 서비스를 구성합니다. 수동으로 /sys/fs/cgroup/ 디렉터리에 하위 디렉터리를 생성하고 제거하여 cgroup 의 계층 구조를 관리할 수 있습니다.
그런 다음 커널의 리소스 컨트롤러는 해당 프로세스의 시스템 리소스를 제한, 우선 지정 또는 할당하여 cgroup 의 프로세스 동작을 수정합니다. 이러한 리소스에는 다음이 포함됩니다.
- CPU 시간
- 메모리
- 네트워크 대역폭
- 이러한 리소스의 조합
cgroup 의 주요 사용 사례는 시스템 프로세스를 집계하고 애플리케이션 및 사용자 간에 하드웨어 리소스를 분할하는 것입니다. 이를 통해 환경의 효율성, 안정성 및 보안을 강화할 수 있습니다.
- 제어 그룹 버전 1
제어 그룹 버전 1 (
cgroups-v1)은 리소스별 컨트롤러 계층 구조를 제공합니다. CPU, 메모리 또는 I/O와 같은 각 리소스에는 자체 제어 그룹 계층 구조가 있습니다. 하나의 컨트롤러에서 각각의 리소스를 관리할 때 다른 컨트롤러와 조정할 수 있는 방식으로 서로 다른 제어 그룹 계층 구조를 결합할 수 있습니다. 그러나 두 컨트롤러가 서로 다른 프로세스 계층에 속하는 경우 조정이 제한됩니다.cgroups-v1컨트롤러는 많은 기간 동안 개발되어 제어 파일의 동작과 이름이 일치하지 않습니다.- 제어 그룹 버전 2
제어 그룹 버전 2 (
cgroups-v2)는 모든 리소스 컨트롤러가 마운트된 단일 제어 그룹 계층 구조를 제공합니다.제어 파일 동작 및 이름 지정은 서로 다른 컨트롤러 간에 일관되게 유지됩니다.
참고cgroups-v2는 RHEL 8.2 이상 버전에서 완전하게 지원됩니다. 자세한 내용은 RHEL 8에서 Control Group v2가 완전히 지원됩니다.
23.2. 커널 리소스 컨트롤러 소개 링크 복사링크가 클립보드에 복사되었습니다!
커널 리소스 컨트롤러를 사용하면 제어 그룹의 기능을 사용할 수 있습니다. RHEL 8에서는 제어 그룹 버전 1 (cgroups-v1) 및 제어 그룹 버전 2()에 대한 다양한 컨트롤러를 지원합니다.
cgroups-v2
제어 그룹 하위 시스템이라고도 하는 리소스 컨트롤러는 CPU 시간, 메모리, 네트워크 대역폭 또는 디스크 I/O와 같은 단일 리소스를 나타내는 커널 하위 시스템입니다. Linux 커널은 systemd 서비스 관리자가 자동으로 마운트하는 다양한 리소스 컨트롤러를 제공합니다. 현재 마운트된 리소스 컨트롤러 목록은 /proc/cgroups 파일에서 찾을 수 있습니다.
cgroups-v1 에서 사용 가능한 컨트롤러:
blkio- 블록 장치에 대한 입력/출력 액세스 제한을 설정합니다.
cpu-
제어 그룹의 작업에 대한 CFS(Completely Fair Scheduler)의 매개변수를 조정합니다.
cpu컨트롤러는 동일한 마운트에cpuacct컨트롤러와 함께 마운트됩니다. cpuacct-
제어 그룹의 작업에서 사용하는 CPU 리소스에 대한 자동 보고서를 생성합니다.
cpuacct컨트롤러는 동일한 마운트에cpu컨트롤러와 함께 마운트됩니다. cpuset- CPU의 지정된 하위 집합에서만 실행되도록 제어 그룹 작업을 제한하고 지정된 메모리 노드에서만 메모리를 사용하도록 작업에 지시합니다.
devices- 제어 그룹의 작업에 대한 장치에 대한 액세스를 제어합니다.
freezer- 제어 그룹에서 작업을 일시 중지하거나 재개합니다.
메모리- 제어 그룹의 작업에서 메모리 사용량에 대한 제한을 설정하고 해당 작업에서 사용하는 메모리 리소스에 대한 자동 보고서를 생성합니다.
net_cls-
Linux 트래픽 컨트롤러(
tc명령)를 활성화하여 특정 제어 그룹 작업에서 시작된 패킷을 식별하는 클래스 식별자(classid)가 있는 네트워크 패킷을 태그합니다.net_cls의 하위 시스템인net_filter(iptables)도 이 태그를 사용하여 이러한 패킷에 대한 작업을 수행할 수 있습니다.net_filter는 Linux 방화벽에서 특정 제어 그룹 작업에서 시작된 패킷을 식별할 수 있는 방화벽 식별자(fwid)로 네트워크 소켓을 태그합니다(iptables명령을 사용하여). net_prio- 네트워크 트래픽의 우선 순위를 설정합니다.
pids- 컨트롤 그룹에서 여러 프로세스 및 해당 하위 항목에 대한 제한을 설정합니다.
perf_event-
perf성능 모니터링 및 보고 유틸리티를 통한 모니터링을 위한 작업을 그룹화합니다. rdma- 제어 그룹의 Remote Direct Memory Access/InfiniBand 특정 리소스에 대한 제한을 설정합니다.
hugetlb- 컨트롤 그룹의 작업별 대규모 가상 메모리 페이지 사용을 제한합니다.
cgroups-v2 에서 사용 가능한 컨트롤러:
io- 블록 장치에 대한 입력/출력 액세스 제한을 설정합니다.
메모리- 제어 그룹의 작업에서 메모리 사용량에 대한 제한을 설정하고 해당 작업에서 사용하는 메모리 리소스에 대한 자동 보고서를 생성합니다.
pids- 컨트롤 그룹에서 여러 프로세스 및 해당 하위 항목에 대한 제한을 설정합니다.
rdma- 제어 그룹의 Remote Direct Memory Access/InfiniBand 특정 리소스에 대한 제한을 설정합니다.
cpu- 제어 그룹의 작업에 대한 CFS(Completely Fair Scheduler) 매개변수를 조정하고 제어 그룹의 작업에서 사용하는 CPU 리소스에 대한 자동 보고서를 생성합니다.
cpuset-
CPU의 지정된 하위 집합에서만 실행되도록 제어 그룹 작업을 제한하고 지정된 메모리 노드에서만 메모리를 사용하도록 작업에 지시합니다. 새 파티션 기능이 있는 코어 기능(
cpus{,.effective},mems{,.effective})만 지원합니다. perf_event-
perf성능 모니터링 및 보고 유틸리티에 의한 모니터링을 위한 그룹 작업입니다.perf_event는 v2 계층에서 자동으로 활성화됩니다.
리소스 컨트롤러는 cgroups-v1 계층 구조 또는 cgroups-v2 계층에서 동시에 사용할 수 있습니다.
23.3. 네임스페이스 소개 링크 복사링크가 클립보드에 복사되었습니다!
네임스페이스는 소프트웨어 오브젝트 구성 및 식별을 위한 별도의 공간을 생성합니다. 이는 서로 영향을 미치는 것을 방지합니다. 결과적으로 각 소프트웨어 오브젝트에는 동일한 시스템을 공유하더라도 마운트 지점, 네트워크 장치 또는 호스트 이름과 같은 자체 리소스 세트가 포함됩니다.
네임스페이스를 사용하는 가장 일반적인 기술 중 하나는 컨테이너입니다.
특정 글로벌 리소스에 대한 변경 사항은 해당 네임스페이스의 프로세스에만 표시되고 나머지 시스템 또는 기타 네임스페이스에는 영향을 미치지 않습니다.
프로세스가 멤버인 네임스페이스를 검사하려면 /proc/<PID>/ns/ 디렉토리에서 심볼릭 링크를 확인할 수 있습니다.
| 네임스페이스 | 격리 |
|---|---|
| Mount | 마운트 지점 |
| UTS | 호스트 이름 및 NIS 도메인 이름 |
| IPC | System V IPC, POSIX 메시지 대기열 |
| PID | 프로세스 ID |
| 네트워크 | 네트워크 장치, 스택, 포트 등 |
| 사용자 | 사용자 및 그룹 ID |
| 제어 그룹 | 제어 그룹 루트 디렉터리 |
23.4. cgroups-v1을 사용하여 애플리케이션에 대한 CPU 제한 설정 링크 복사링크가 클립보드에 복사되었습니다!
제어 그룹 버전 1 (cgroups-v1)을 사용하여 애플리케이션에 대한 CPU 제한을 구성하려면 /sys/fs/ 가상 파일 시스템을 사용합니다.
사전 요구 사항
- root 권한이 있습니다.
- 시스템에 설치된 CPU 사용을 제한하는 애플리케이션이 있습니다.
cgroups-v1컨트롤러가 마운트되었는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
CPU 소비에서 제한하려는 애플리케이션의 PID(프로세스 ID)를 식별합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PID 6955가 있는sha1sum예제 애플리케이션은 많은 양의 CPU 리소스를 사용합니다.cpu리소스 컨트롤러 디렉터리에 하위 디렉터리를 생성합니다.mkdir /sys/fs/cgroup/cpu/Example/
# mkdir /sys/fs/cgroup/cpu/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 디렉터리는 특정 프로세스를 배치하고 프로세스에 특정 CPU 제한을 적용할 수 있는 제어 그룹을 나타냅니다. 동시에 여러
cgroups-v1인터페이스 파일과cpu컨트롤러별 파일이 디렉터리에 생성됩니다.선택 사항: 새로 생성된 제어 그룹을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cpuacct.usage,cpu.cfs._period_us와 같은 파일은예제제어 그룹의 프로세스에 대해 설정할 수 있는 특정 구성 및/또는 제한을 나타냅니다. 파일 이름 앞에는 자신이 속한 제어 그룹 컨트롤러의 이름이 접두어 있습니다.기본적으로 새로 생성된 제어 그룹은 제한 없이 시스템의 전체 CPU 리소스에 대한 액세스를 상속합니다.
제어 그룹에 대한 CPU 제한을 구성합니다.
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_usCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
cpu.cfs_period_us파일은 CPU 리소스에 대한 제어 그룹의 액세스를 다시 할당해야 하는 빈도를 나타냅니다. 기간은 마이크로초(microsecondss, "us")입니다. 상한은 1 000 000 마이크로초이며 더 낮은 제한은 1000 마이크로초입니다. cpu.cfs_quota_us파일은cpu.cfs_period_us에서 정의한 대로 제어 그룹의 모든 프로세스가 한 기간 동안 집합적으로 실행할 수 있는 마이크로초 단위로 총 시간을 나타냅니다. 제어 그룹의 프로세스에서 단일 기간 동안 할당량에 의해 지정된 모든 시간을 사용하는 경우 나머지 기간 동안 제한되며 다음 기간까지 실행할 수 없습니다. 낮은 제한은 1000 마이크로초입니다.위의 예제 명령은 CPU 시간 제한을 설정하여
Example제어 그룹의 모든 프로세스가 1초(cpu.cfs_quota_us로 정의됨) 1초(cpu.cfs_period_us로 정의됨) 동안 0.2초 동안만 실행할 수 있도록 CPU 시간 제한을 설정합니다.
-
선택 사항: 제한을 확인합니다.
cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션의 PID를
Example제어 그룹에 추가합니다.echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs
# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령을 수행하면 특정 애플리케이션이
Example제어 그룹의 멤버가 되고Example제어 그룹에 구성된 CPU 제한을 초과하지 않습니다. PID는 시스템의 기존 프로세스를 표현해야 합니다. 여기에PID 6955는sha1sum /dev/zero & process에 할당되었으며cpu컨트롤러의 사용 사례를 설명합니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션의 프로세스는 애플리케이션의 프로세스에 CPU 제한을 적용하는
예제제어 그룹에서 실행됩니다.제한된 애플리케이션의 현재 CPU 사용을 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PID 6955의 CPU 사용량이 99 %에서 20%로 감소했습니다.
cpu.cfs_period_us 및 cpu.cfs_quota_us 의 cgroups-v2 카운터는 cpu.max 파일입니다. cpu.max 파일은 cpu 컨트롤러를 통해 사용할 수 있습니다.
24장. cgroups-v2를 사용하여 애플리케이션의 CPU 시간 배포 제어 링크 복사링크가 클립보드에 복사되었습니다!
일부 애플리케이션은 너무 많은 CPU 시간을 사용하므로 환경의 전반적인 상태에 부정적인 영향을 미칠 수 있습니다. 애플리케이션을 제어 그룹 버전 2 (cgroups-v2)에 배치하고 해당 제어 그룹의 CPU 제한을 구성할 수 있습니다. 따라서 CPU 소비에서 애플리케이션을 규제할 수 있습니다.
사용자에게 제어 그룹에 할당된 CPU 시간 분배를 규제하는 두 가지 방법이 있습니다.
24.1. cgroups-v2 마운트 링크 복사링크가 클립보드에 복사되었습니다!
부팅 프로세스 중에 RHEL 8은 기본적으로 cgroup-v1 가상 파일 시스템을 마운트합니다. cgroup-v2 기능을 사용하여 애플리케이션의 리소스를 제한하려면 시스템을 수동으로 구성합니다. 시스템 리소스 사용을 제어하려면 systemd를 사용합니다. 특별한 경우에만 cgroups 가상 파일 시스템을 수동으로 구성해야 합니다. 예를 들어 cgroup-v2 계층에 동등한 항목이 없는 cgroup-v1 컨트롤러를 사용해야 하는 경우입니다.
사전 요구 사항
- root 권한이 있습니다.
프로세스
시스템 시스템 및 서비스 관리자가 시스템 부팅 중에 기본적으로
cgroups-v2를마운트하도록 시스템을 구성합니다.grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 필요한 커널 명령줄 매개변수가 현재 부팅 항목에 추가됩니다.
모든 커널 부팅 항목에
systemd.unified_cgroup_hierarchy=1매개변수를 추가하려면 다음을 수행합니다.grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
# grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 변경 사항을 적용하려면 시스템을 재부팅합니다.
검증
cgroups-v2파일 시스템이 마운트되었는지 확인합니다.mount -l | grep cgroup cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate)
# mount -l | grep cgroup cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate)Copy to Clipboard Copied! Toggle word wrap Toggle overflow cgroups-v2파일 시스템이/sys/fs/cgroup/디렉터리에 성공적으로 마운트되었습니다./sys/fs/cgroup/디렉터리의 콘텐츠를 검사합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 루트 제어 그룹이라고도 하는
/sys/fs/cgroup/ 디렉터리는 인터페이스 파일(cgroup으로 시작) 및cpuset.cpus.effective와 같은 컨트롤러별 파일을 제공합니다. 또한systemd와 관련된 일부 디렉터리(예:/sys/fs/cgroup/init.scope),/sys/fs/cgroup/system.slice,/sys/fs/cgroup/user.slice.
24.2. CPU 시간 배포를 위한 cgroup 준비 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션의 CPU 사용을 제어하려면 특정 CPU 컨트롤러를 활성화하고 전용 제어 그룹을 생성해야 합니다. cgroup 파일을 조직의 명확성을 유지하기 위해 /sys/fs/cgroup/ 루트 제어 그룹 내에 두 개 이상의 하위 제어 그룹을 생성하는 것이 좋습니다.
사전 요구 사항
- root 권한이 있습니다.
- 제어하려는 프로세스의 PID를 식별했습니다.
-
cgroups-v2파일 시스템을 마운트했습니다. 자세한 내용은 cgroups-v2 마운트 를 참조하십시오.
프로세스
CPU 사용을 제한하려는 애플리케이션의 PID(프로세스 ID)를 식별합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에서는
PID 34578및34579(sha1sum의 2개의 예시 애플리케이션)에서 CPU라는 대량의 리소스를 사용한다는 것을 보여줍니다. 둘 다cgroups-v2기능 관리를 시연하는 데 사용되는 애플리케이션의 예입니다./sys/fs/cgroup/cgroup.controllers파일에서cpu및cpuset컨트롤러를 사용할 수 있는지 확인합니다.cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma
# cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdmaCopy to Clipboard Copied! Toggle word wrap Toggle overflow CPU 관련 컨트롤러를 활성화합니다.
echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control
# echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 명령은
/sys/fs/cgroup/root 제어 그룹의 즉시 하위 그룹에 대해cpu및cpuset컨트롤러를 활성화합니다. 하위 그룹은 기준을 기반으로 프로세스를 지정하고 각 프로세스에 제어 검사를 적용할 수 있는 위치입니다.모든 수준에서
cgroup.subtree_control파일을 검토하여 즉시 하위 그룹에서 활성화할 수 있는 컨트롤러를 식별할 수 있습니다.참고기본적으로 루트 제어 그룹의
/sys/fs/cgroup/cgroup.subtree_control파일에는메모리및pids컨트롤러가 포함되어 있습니다./sys/fs/cgroup/Example/디렉터리를 생성합니다.mkdir /sys/fs/cgroup/Example/
# mkdir /sys/fs/cgroup/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/Example/디렉터리는 하위 그룹을 정의합니다. 또한 이전 단계에서 이 하위 그룹에 대해cpu및cpuset컨트롤러를 활성화했습니다./sys/fs/cgroup/Example/디렉터리를 생성하면 일부cgroups-v2인터페이스 파일과cpu및cpuset컨트롤러별 파일이 디렉터리에 자동으로 생성됩니다./sys/fs/cgroup/Example/디렉터리는메모리및pids컨트롤러에 대한 컨트롤러별 파일도 제공합니다.선택 사항: 새로 생성된 하위 제어 그룹을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에는
cpuset.cpus및cpu.max와 같은 파일이 표시되어 있습니다. 이러한 파일은cpuset및cpu컨트롤러에 따라 다릅니다.cpuset및cpu컨트롤러는 /sys/fs/cgroup/cgroup_ control 파일을 사용하여 루트(/sys/fs/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup_control)에 대해 수동으로 활성화됩니다.디렉터리에는 활성화된 컨트롤러와 관계없이 모든 제어 그룹에 공통인
또는cgroup.procscgroup.controllers와 같은 일반 cgroup 제어 인터페이스 파일도 포함되어 있습니다.memory.high및pids.max와 같은 파일은 루트 제어 그룹(/sys/fs/cgroup/)에 있는메모리및pids컨트롤러와 관련이 있으며 항상 기본적으로 활성화됩니다.기본적으로 새로 생성된 하위 그룹은 제한 없이 모든 시스템의 CPU 및 메모리 리소스에 대한 액세스를 상속합니다.
/sys/fs/cgroup/Example/에서 CPU 관련 컨트롤러를 활성화하여 CPU와 관련된 컨트롤러를 가져옵니다.echo "+cpu" >> /sys/fs/cgroup/Example/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control
# echo "+cpu" >> /sys/fs/cgroup/Example/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 명령을 사용하면 즉시 하위 제어 그룹에
메모리또는 pid 컨트롤러가 아닌 CPU 시간 분배를 규제하는 컨트롤러 만 사용할수있습니다./sys/fs/cgroup/Example/tasks/디렉터리를 생성합니다.mkdir /sys/fs/cgroup/Example/tasks/
# mkdir /sys/fs/cgroup/Example/tasks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/Example/tasks/디렉터리는cpu및cpuset컨트롤러와 순전히 관련된 파일이 있는 하위 그룹을 정의합니다.선택 사항: 다른 하위 제어 그룹을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동일한 CPU에서 CPU 시간을 제어하려는 프로세스가 경쟁해야 합니다.
echo "1" > /sys/fs/cgroup/Example/tasks/cpuset.cpus
# echo "1" > /sys/fs/cgroup/Example/tasks/cpuset.cpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
Example/tasks하위 제어 그룹에 배치한 프로세스가 동일한 CPU에서 경쟁하게 됩니다. 이 설정은cpu컨트롤러가 활성화되는 데 중요합니다.중요cpu컨트롤러는 관련 하위 제어 그룹에 단일 CPU에서 시간 동안 경쟁할 최소 2개의 프로세스가 있는 경우에만 활성화됩니다.
검증
선택 사항: 즉시 하위 cgroup에 대해 CPU 관련 컨트롤러가 활성화되어 있는지 확인합니다.
cat /sys/fs/cgroup/cgroup.subtree_control /sys/fs/cgroup/Example/cgroup.subtree_control cpuset cpu memory pids cpuset cpu
# cat /sys/fs/cgroup/cgroup.subtree_control /sys/fs/cgroup/Example/cgroup.subtree_control cpuset cpu memory pids cpuset cpuCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 동일한 CPU에서 CPU 시간을 제어하려는 프로세스가 경쟁해야 합니다.
cat /sys/fs/cgroup/Example/tasks/cpuset.cpus 1
# cat /sys/fs/cgroup/Example/tasks/cpuset.cpus 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3. CPU 대역폭을 조정하여 애플리케이션의 CPU 시간 분배 제어 링크 복사링크가 클립보드에 복사되었습니다!
cpu 컨트롤러의 관련 파일에 값을 할당하여 특정 cgroup 트리 아래의 애플리케이션에 CPU 시간 배포를 규제해야 합니다.
사전 요구 사항
- root 권한이 있습니다.
- CPU 시간 배포를 제어하려는 애플리케이션이 두 개 이상 있습니다.
- 관련 애플리케이션이 CPU 시간 배포를 위해 cgroup 준비에 설명된 대로 동일한 CPU에서 CPU 시간 경쟁을 보장했습니다.
-
cgroups-v2마운트에 설명된 대로 cgroups-v2 파일 시스템을 마운트했습니다. -
CPU 시간 배포를 위해 cgroup 준비에 설명된 것과 유사하게 상위 제어 그룹 및 하위 제어 그룹에서
cpu및cpuset컨트롤러를 활성화했습니다. 아래 예제와 같이
/sys/fs/cgroup/root 제어 그룹 내에 두 개의 하위 제어 그룹을 생성했습니다.… ├── Example │ ├── tasks …
… ├── Example │ ├── tasks …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
제어 그룹 내에서 리소스 제한을 달성하도록 CPU 대역폭을 구성합니다.
echo "200000 1000000" > /sys/fs/cgroup/Example/tasks/cpu.max
# echo "200000 1000000" > /sys/fs/cgroup/Example/tasks/cpu.maxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 첫 번째 값은 하위 그룹에서 모든 프로세스를 집합적으로 실행할 수 있는 마이크로초 단위로 허용된 시간 할당량입니다. 두 번째 값은 마침표 길이를 지정합니다.
단일 기간 동안 제어 그룹의 프로세스가 이 할당량에 의해 지정된 시간을 집합적으로 소모하면 나머지 기간 동안 제한되며 다음 기간까지 실행할 수 없습니다.
이 명령은 CPU 시간 분배 제어를 설정하여
/sys/fs/cgroup/Example/tasks하위 그룹에서 모든 프로세스가 1초마다 0.2초 동안 CPU에서 실행할 수 있도록 CPU 시간 분배 제어를 설정합니다. 즉, 각 초의 5 분의 1입니다.선택 사항: 시간 할당량을 확인합니다.
cat /sys/fs/cgroup/Example/tasks/cpu.max 200000 1000000
# cat /sys/fs/cgroup/Example/tasks/cpu.max 200000 1000000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션의 PID를
Example/tasks하위 그룹에 추가합니다.echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs echo "34579" > /sys/fs/cgroup/Example/tasks/cgroup.procs
# echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs # echo "34579" > /sys/fs/cgroup/Example/tasks/cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 명령은 필수 애플리케이션이
Example/tasks하위 그룹의 멤버가 되고 이 하위 그룹에 구성된 CPU 시간 배포를 초과하지 않도록 합니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
cat /proc/34578/cgroup /proc/34579/cgroup 0::/Example/tasks 0::/Example/tasks
# cat /proc/34578/cgroup /proc/34579/cgroup 0::/Example/tasks 0::/Example/tasksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 출력은
Example/tasks하위 그룹에서 실행되는 지정된 애플리케이션의 프로세스를 보여줍니다.제한된 애플리케이션의 현재 CPU 사용을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PID 34578및PID 34579의 CPU 사용량이 10%로 단축되었습니다.Example/tasks하위 그룹은 프로세스를 전체적으로 CPU 시간의 20%로 조정합니다. 제어 그룹에 2개의 프로세스가 있으므로 각각 CPU 시간의 10%를 사용할 수 있습니다.
24.4. CPU 가중치를 조정하여 애플리케이션의 CPU 시간 분배 제어 링크 복사링크가 클립보드에 복사되었습니다!
cpu 컨트롤러의 관련 파일에 값을 할당하여 특정 cgroup 트리 아래의 애플리케이션에 CPU 시간 배포를 규제해야 합니다.
사전 요구 사항
- root 권한이 있습니다.
- CPU 시간 배포를 제어하려는 애플리케이션이 있습니다.
- 관련 애플리케이션이 CPU 시간 배포를 위해 cgroup 준비에 설명된 대로 동일한 CPU에서 CPU 시간 경쟁을 보장했습니다.
-
cgroups-v2마운트에 설명된 대로 cgroups-v2 파일 시스템을 마운트했습니다. 다음 예제와 같이
/sys/fs/cgroup/root 제어 그룹 내에 하위 제어 그룹의 두 수준 계층 구조를 생성했습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
상위 제어 그룹 및 하위 제어 그룹에서
cpu및cpuset컨트롤러를 활성화했습니다. CPU 시간 배포를 위해 cgroup 준비에 설명된 것과 유사하게 하위 제어 그룹에서도 됩니다.
프로세스
제어 그룹 내에서 리소스 제한을 달성하도록 원하는 CPU 가중치를 구성합니다.
echo "150" > /sys/fs/cgroup/Example/g1/cpu.weight echo "100" > /sys/fs/cgroup/Example/g2/cpu.weight echo "50" > /sys/fs/cgroup/Example/g3/cpu.weight
# echo "150" > /sys/fs/cgroup/Example/g1/cpu.weight # echo "100" > /sys/fs/cgroup/Example/g2/cpu.weight # echo "50" > /sys/fs/cgroup/Example/g3/cpu.weightCopy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션의 PID를
g1,g2,g3하위 그룹에 추가합니다.echo "33373" > /sys/fs/cgroup/Example/g1/cgroup.procs echo "33374" > /sys/fs/cgroup/Example/g2/cgroup.procs echo "33377" > /sys/fs/cgroup/Example/g3/cgroup.procs
# echo "33373" > /sys/fs/cgroup/Example/g1/cgroup.procs # echo "33374" > /sys/fs/cgroup/Example/g2/cgroup.procs # echo "33377" > /sys/fs/cgroup/Example/g3/cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 명령은 원하는 애플리케이션이
Example/g*/하위 cgroups의 멤버가 되도록 하며 해당 cgroup 구성에 따라 CPU 시간을 배포합니다.실행 중인 프로세스가 있는 하위 cgroup의 가중치(
g1,g2,g3)는 상위 cgroup 수준(예)으로 요약됩니다. 그러면 CPU 리소스가 해당 가중치에 따라 비례적으로 배포됩니다.결과적으로 모든 프로세스가 동시에 실행되면 커널은 해당 cgroup의
cpu.weight파일을 기반으로 비례 CPU 시간을 각각 할당합니다.Expand 하위 cgroup cpu.weightfileCPU 시간 할당 g1
150
~50% (150/300)
g2
100
~33% (100/300)
g3
50
~16% (50/300)
cpu.weight컨트롤러 파일의 값은 백분율이 아닙니다.하나의 프로세스가 실행을 중단하고 cgroup
g2를 실행 중인 프로세스 없이 그대로 두면 계산에서 cgroupg2및의 계정 가중치만 생략합니다.g3Expand 하위 cgroup cpu.weightfileCPU 시간 할당 g1
150
~75% (150/200)
g3
50
~25% (50/200)
중요하위 cgroup에 실행 중인 프로세스가 여러 개 있는 경우 cgroup에 할당된 CPU 시간이 멤버 프로세스 간에 균등하게 배포됩니다.
검증
애플리케이션이 지정된 제어 그룹에서 실행되는지 확인합니다.
cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup 0::/Example/g1 0::/Example/g2 0::/Example/g3
# cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup 0::/Example/g1 0::/Example/g2 0::/Example/g3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 출력에는
Example/g*/하위 cgroup에서 실행되는 지정된 애플리케이션의 프로세스가 표시됩니다.제한된 애플리케이션의 현재 CPU 사용을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고모든 프로세스는 명확한 설명을 위해 단일 CPU에서 실행됩니다. CPU weight는 여러 CPU에서 사용할 때 동일한 원칙을 적용합니다.
PID 33373,PID 33374및PID 33377의 CPU 리소스가 해당 하위 cgroup에 할당한 150, 100 및 50 개의 가중치를 기반으로 할당되었습니다. 가중치는 각 애플리케이션에 대해 약 50%, 33%, CPU 시간 할당에 해당합니다.
25장. systemd에서 제어 그룹 버전 1 사용 링크 복사링크가 클립보드에 복사되었습니다!
systemd 시스템 및 서비스 관리자 및 제공하는 유틸리티를 사용하여 cgroup 을 관리할 수 있습니다. 이는 cgroups 관리의 기본 방법이기도 합니다.
25.1. 제어 그룹 버전 1에서 systemd의 역할 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8은 cgroup 계층 구조 시스템을 systemd 장치 트리와 바인딩하여 리소스 관리 설정을 프로세스 수준에서 애플리케이션 수준으로 이동합니다. 따라서 systemctl 명령을 사용하거나 systemd 장치 파일을 수정하여 시스템 리소스를 관리할 수 있습니다.
기본적으로 systemd 시스템 및 서비스 관리자는 슬라이스,범위 및 서비스 단위를 사용하여 제어 그룹의 프로세스를 구성하고 구조화합니다. systemctl 명령은 사용자 지정 슬라이스 를 생성하여 이 구조를 추가로 수정할 수 있습니다.systemd 는 /sys/fs/cgroup/ 디렉터리에 중요한 커널 리소스 컨트롤러에 대한 계층을 자동으로 마운트합니다.
리소스 제어에 세 가지 systemd 장치 유형이 사용됩니다.
service - 장치 구성 파일에 따라
systemd가 시작된 프로세스 또는 프로세스 그룹입니다. 서비스는 지정된 프로세스를 하나의 세트로 시작하고 중지하도록 캡슐화합니다. 서비스의 이름은 다음과 같습니다.<name>.service
<name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow scope - 외부에서 생성된 프로세스 그룹입니다. 범위는
fork()함수를 통해 임의의 프로세스에서 시작 및 중지된 프로세스를 캡슐화한 다음 런타임 시systemd에 의해 등록됩니다. 예를 들어 사용자 세션, 컨테이너 및 가상 머신은 범위로 처리됩니다. 범위 이름은 다음과 같습니다.<name>.scope
<name>.scopeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 슬라이스 - 계층적으로 구성된 단위 그룹입니다. 슬라이스는 범위 및 서비스가 배치되는 계층을 구성합니다. 실제 프로세스는 범위 또는 서비스에 포함됩니다. 슬라이스 단위의 모든 이름은 계층 구조의 위치에 대한 경로에 해당합니다. 대시("-") 문자는
-.slice루트 슬라이스에서 슬라이스에 대한 경로 구성 요소의 구분 기호 역할을 합니다. 다음 예제에서는 프로세스가 포함된 서비스 및 범위가 자체 프로세스가 없는 슬라이스에 배치됩니다.<parent-name>.slice
<parent-name>.sliceCopy to Clipboard Copied! Toggle word wrap Toggle overflow parent-name.slice는parent.slice의 하위 슬라이스입니다. 이 하위 슬라이스는-.slice루트 슬라이스의 하위 슬라이스입니다.parent-name.slice는parent-name-name2.slice라는 자체 하위slice를 포함할 수 있습니다.
서비스, 범위 및 슬라이스 단위는 제어 그룹 계층 구조의 오브젝트에 직접 매핑됩니다. 이러한 장치가 활성화되면 장치 이름에서 빌드된 그룹 경로를 직접 제어합니다.
제어 그룹 계층 구조의 예
프로세스를 포함하는 서비스 및 범위는 자체 프로세스가 없는 슬라이스에 배치됩니다.
25.2. 일시적인 제어 그룹 생성 링크 복사링크가 클립보드에 복사되었습니다!
임시 cgroup 은 런타임 중에 단위(서비스 또는 범위)에서 사용하는 리소스에 대한 제한을 설정합니다.
프로세스
일시적인 제어 그룹을 생성하려면 다음 형식으로
systemd-run명령을 사용합니다.systemd-run --unit=<name> --slice=<name>.slice <command>
# systemd-run --unit=<name> --slice=<name>.slice <command>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 일시적인 서비스 또는 범위 단위를 생성 및 시작하고 이러한 단위로 사용자 지정 명령을 실행합니다.
-
--unit=<name> 옵션은 단위에 이름을 지정합니다.--unit을 지정하지 않으면 이름이 자동으로 생성됩니다. -
--slice=<name>.slice옵션은 서비스 또는 범위 단위를 지정된 슬라이스의 멤버로 만듭니다. <name>.slice를 기존 슬라이스의 이름으로 교체하거나(systemctl -t 슬라이스의 출력에 표시된 대로) 고유한 이름을 전달하여 새 슬라이스를 생성합니다. 기본적으로 서비스 및 범위는system.slice의 멤버로 생성됩니다. &
lt;command>를 서비스 또는 범위 단위에 입력하려는 명령으로 바꿉니다.다음 메시지가 표시되어 서비스 또는 범위를 성공적으로 생성 및 시작했는지 확인합니다.
Running as unit <name>.service
# Running as unit <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
선택 사항: 런타임 정보를 수집하기 위해 프로세스가 완료된 후에도 장치를 계속 실행합니다.
systemd-run --unit=<name> --slice=<name>.slice --remain-after-exit <command>
# systemd-run --unit=<name> --slice=<name>.slice --remain-after-exit <command>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 일시적인 서비스 장치를 생성 및 시작하고 단위에서 사용자 지정 명령을 실행합니다.
--remain-after-exit옵션을 사용하면 프로세스가 완료된 후에도 서비스가 계속 실행됩니다.
25.3. 영구 제어 그룹 생성 링크 복사링크가 클립보드에 복사되었습니다!
영구 제어 그룹을 서비스에 할당하려면 장치 구성 파일을 편집해야 합니다. 이 구성은 자동으로 시작된 서비스를 관리하기 위해 시스템 재부팅 후 유지됩니다.
프로세스
영구 제어 그룹을 생성하려면 다음을 입력합니다.
systemctl enable <name>.service
# systemctl enable <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
/usr/lib/systemd/system/디렉터리에 장치 구성 파일을 자동으로 생성하고 기본적으로 <name>.service를system.slice장치에 할당합니다.
25.4. 명령줄에서 메모리 리소스 제어 설정 구성 링크 복사링크가 클립보드에 복사되었습니다!
명령줄에서 명령을 실행하는 것은 프로세스 그룹의 하드웨어 리소스에 대한 제한을 설정, 우선 순위 또는 제어하는 방법 중 하나입니다.
프로세스
서비스의 메모리 사용량을 제한하려면 다음을 실행합니다.
systemctl set-property example.service MemoryMax=1500K
# systemctl set-property example.service MemoryMax=1500KCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
example.service서비스가 속한 제어 그룹에서 실행되는 프로세스에 ScanSettingKB의 메모리 제한을 즉시 할당합니다.MemoryMax매개변수는/etc/systemd/system.control/example.service.d/50-MemoryMax.conf파일에 정의되어 있으며/sys/fs/cgroup/memory/system.slice/example.service/memory.limit_in_bytes파일에 정의됩니다.선택적으로 서비스의 메모리 사용량을 일시적으로 제한하려면 다음을 실행합니다.
systemctl set-property --runtime example.service MemoryMax=1500K
# systemctl set-property --runtime example.service MemoryMax=1500KCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
example.service서비스에 메모리 제한을 즉시 할당합니다.MemoryMax매개변수는/run/systemd/system.control/example.service.d/50-MemoryMax.conf파일에서 다음 재부팅될 때까지 정의됩니다. 재부팅하면 전체/run/systemd/system.control/디렉터리 및MemoryMax가 제거됩니다.
50-MemoryMax.conf 파일은 메모리 제한을 4096바이트의 배수( AMD64 및 Intel 64에 고유한 커널 페이지 크기)로 저장합니다. 실제 바이트 수는 CPU 아키텍처에 따라 다릅니다.
25.5. 단위 파일을 사용하여 메모리 리소스 제어 설정 구성 링크 복사링크가 클립보드에 복사되었습니다!
각 영구 장치는 systemd 시스템 및 서비스 관리자에 의해 확인되며 /usr/lib/systemd/system/ 디렉터리에 단위 구성 파일이 있습니다. 영구 장치의 리소스 제어 설정을 변경하려면 텍스트 편집기 또는 명령줄에서 장치 구성 파일을 수동으로 수정합니다.
장치 파일을 수동으로 수정하는 것은 프로세스 그룹의 하드웨어 리소스에 대한 제한을 설정하거나 우선 순위를 지정하거나, 하드웨어 리소스에 대한 액세스를 제어하는 방법 중 하나입니다.
프로세스
서비스의 메모리 사용량을 제한하려면 다음과 같이
/usr/lib/systemd/system/example.service파일을 수정합니다.… [Service] MemoryMax=1500K …
… [Service] MemoryMax=1500K …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 구성은 제어 그룹에서 실행되는 프로세스의 최대 메모리 사용량에 제한을 배치합니다.
example.service는 의 일부입니다.참고K, M, G 또는 T 접미사를 사용하여 Kilobyte, 메가바이트, 기가바이트 또는 Terabyte를 측정 단위로 식별합니다.
모든 장치 구성 파일을 다시 로드합니다.
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스를 다시 시작하십시오.
systemctl restart example.service
# systemctl restart example.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅합니다.
검증
변경 사항이 적용되었는지 확인합니다.
cat /sys/fs/cgroup/memory/system.slice/example.service/memory.limit_in_bytes 1536000
# cat /sys/fs/cgroup/memory/system.slice/example.service/memory.limit_in_bytes 1536000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 메모리 사용량은 약 CryostatKB로 제한되었습니다.
참고memory.limit_in_bytes파일은 메모리 제한을 4096바이트의 배수( AMD64 및 Intel 64에 고유한 커널 페이지 크기)로 저장합니다. 실제 바이트 수는 CPU 아키텍처에 따라 다릅니다.
25.6. 일시적인 제어 그룹 제거 링크 복사링크가 클립보드에 복사되었습니다!
프로세스 그룹의 하드웨어 리소스에 대한 액세스를 더 이상 제한, 우선 순위 또는 제어할 필요가 없는 경우 systemd 시스템 및 서비스 관리자를 사용하여cgroup(임시 제어 그룹)을 제거할 수 있습니다.
임시 cgroup 은 서비스 또는 범위 단위에 포함된 모든 프로세스가 완료되면 자동으로 릴리스됩니다.
프로세스
모든 프로세스가 포함된 서비스 장치를 중지하려면 다음을 입력합니다.
systemctl stop <name>.service
# systemctl stop <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 하나 이상의 단위 프로세스를 종료하려면 다음을 입력합니다.
systemctl kill <name>.service --kill-who=PID,… --signal=<signal>
# systemctl kill <name>.service --kill-who=PID,… --signal=<signal>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은
--kill-who옵션을 사용하여 종료하려는 제어 그룹에서 프로세스를 선택합니다. 동시에 여러 프로세스를 종료하려면 쉼표로 구분된 PID 목록을 전달합니다.--signal옵션은 지정된 프로세스로 전송할 POSIX 신호 유형을 결정합니다. 기본 신호는 SIGTERM 입니다.
25.7. 영구 제어 그룹 제거 링크 복사링크가 클립보드에 복사되었습니다!
프로세스 그룹의 하드웨어 리소스에 대한 액세스를 더 이상 제한, 우선 순위 또는 제어할 필요가 없는 경우 systemd 시스템 및 서비스 관리자를 사용하여 더 이상cgroup(영구 제어 그룹)을 제거할 수 있습니다.
영구 cgroup 은 서비스 또는 범위 장치가 중지되거나 비활성화되고 구성 파일이 삭제되면 릴리스됩니다.
프로세스
서비스 유닛을 중지합니다.
systemctl stop <name>.service
# systemctl stop <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스 유닛을 비활성화합니다.
systemctl disable <name>.service
# systemctl disable <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 관련 단위 구성 파일을 제거합니다.
rm /usr/lib/systemd/system/<name>.service
# rm /usr/lib/systemd/system/<name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항이 적용되도록 모든 장치 구성 파일을 다시 로드합니다.
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
25.8. systemd 장치 나열 링크 복사링크가 클립보드에 복사되었습니다!
systemd 시스템 및 서비스 관리자를 사용하여 장치를 나열합니다.
프로세스
systemctl유틸리티를 사용하여 시스템의 활성 단위를 모두 나열합니다. 터미널은 다음 예와 유사한 출력을 반환합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow UNIT- 컨트롤 그룹 계층 구조의 단위 위치를 반영하는 단위의 이름입니다. 리소스 제어와 관련된 단위는 슬라이스, 범위 및 서비스 입니다.
LOAD- 단위 구성 파일이 올바르게 로드되었는지 여부를 나타냅니다. 단위 파일을 로드하지 못하는 경우 필드에 로드 되지 않고 상태 오류가 표시됩니다. 기타 단위 로드 상태는 stub,merged 및 masked 입니다.
활성 상태-
SUB의 일반화인 고급 단위 활성화 상태입니다. SUB- 낮은 수준의 유닛 활성화 상태입니다. 가능한 값의 범위는 단위 유형에 따라 다릅니다.
DESCRIPTION- 단위 콘텐츠 및 기능에 대한 설명입니다.
활성 및 비활성 유닛을 모두 나열합니다.
systemctl --all
# systemctl --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 정보 양을 제한합니다.
systemctl --type service,masked
# systemctl --type service,maskedCopy to Clipboard Copied! Toggle word wrap Toggle overflow --type옵션에는 서비스 및 슬라이스 또는 로드 된 로드 상태와 같은 쉼표로 구분된 단위 유형 목록이 필요합니다.
25.9. systemd cgroups 계층 구조 보기 링크 복사링크가 클립보드에 복사되었습니다!
특정 cgroup에서 실행되는 제어 그룹(cgroup) 계층 구조 및 프로세스를 표시합니다.
프로세스
systemd-cgls명령을 사용하여 시스템의 전체cgroups계층 구조를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에서는 전체
cgroups계층 구조를 반환합니다. 여기서 최상위 수준은 슬라이스로 구성됩니다.systemd-cgls <resource_controller> 명령을 사용하여 리소스 컨트롤러에서필터링한cgroups계층 구조를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에는 선택한 컨트롤러와 상호 작용하는 서비스가 나열됩니다.
systemctl status <system_unit> 명령을 사용하여 특정 단위 및cgroups계층 구조 부분에 대한 자세한 정보를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.10. 리소스 컨트롤러 보기 링크 복사링크가 클립보드에 복사되었습니다!
리소스 컨트롤러를 사용하는 프로세스를 식별합니다.
프로세스
프로세스가 상호 작용하는 리소스 컨트롤러를 확인하고
cat proc/<PID>/cgroup명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력은
example.service유닛에 속하는 프로세스PID 11269입니다.systemd장치 파일 사양에 정의된 대로 프로세스가 올바른 제어 그룹에 배치되었는지 확인할 수 있습니다.참고기본적으로 리소스 컨트롤러 목록의 항목과 순서는 모든 기본 리소스 컨트롤러를 자동으로 마운트하므로
systemd에서 시작한 모든 장치에 대해 동일합니다.
25.11. 리소스 사용량 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
현재 실행 중인 제어 그룹(cgroup) 목록과 해당 리소스 소비를 실시간으로 확인합니다.
프로세스
systemd-cgtop명령을 사용하여 현재 실행 중인cgroup의 동적 계정을 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에는 리소스 사용량(CPU, 메모리, 디스크 I/O 로드)에 따라 정렬되어 현재 실행 중인
cgroup이 표시됩니다. 이 목록은 기본적으로 1초마다 새로 고쳐집니다. 따라서 각 제어 그룹의 실제 리소스 사용에 대한 동적 통찰력을 제공합니다.
26장. cgroups-v2 및 systemd를 사용하여 리소스 관리 구성 링크 복사링크가 클립보드에 복사되었습니다!
systemd 제품군의 주요 기능은 서비스 관리 및 감독입니다. systemd 를 사용하면 부팅 프로세스 중에 적절한 서비스가 적절한 시간에 올바른 순서로 시작됩니다. 서비스가 실행되면 기본 하드웨어 플랫폼을 최적으로 사용하려면 서비스가 원활하게 실행되어야 합니다. 따라서 systemd 는 리소스 관리 정책을 정의하고 다양한 옵션을 튜닝하여 서비스의 성능을 향상시킬 수 있는 기능도 제공합니다.
26.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
- Linux cgroup 하위 시스템에 대한 기본 지식.
26.2. 리소스 배포 모델 소개 링크 복사링크가 클립보드에 복사되었습니다!
리소스 관리의 경우 systemd 는 제어 그룹 버전 2(cgroups-v2) 인터페이스를 사용합니다.
기본적으로 RHEL 8에서는 cgroups-v1 을 사용합니다. 따라서 systemd 에서 리소스 관리에 cgroups-v2 인터페이스를 사용할 수 있도록 cgroups-v2를 활성화해야 합니다. cgroups-v2 를 활성화하는 방법에 대한 자세한 내용은 cgroups-v2 마운트 를 참조하십시오.
시스템 리소스 배포를 수정하려면 다음 리소스 배포 모델 중 하나 이상을 적용할 수 있습니다.
- 가중치
리소스는 모든 하위 그룹의 가중치를 추가하고 모든 가중치의 전체 합계에 비해 가중치에 따라 리소스의 일부만 부여하여 리소스를 분산합니다.
예를 들어,
cgroup10개가 있고 각각 가중치가 100인 경우 합계는 1000이고 각cgroup은 리소스의 10분의 1을 받습니다.weight는 일반적으로 상태 비저장 리소스를 배포하는 데 사용됩니다. 제어 그룹의 가중치를 조정하려면 CPUWeight= 옵션을 사용합니다.
- 제한
cgroup은 구성된 리소스 양까지 사용할 수 있지만 리소스를 과다 할당할 수도 있습니다. 따라서 하위 그룹 제한의 합계는 상위cgroup의 제한을 초과할 수 있습니다.제어 그룹의 제한을 조정하려면 MemoryMax= 옵션을 사용합니다.
- 보호
cgroup의 보호된 리소스 양을 설정할 수 있습니다. 리소스 사용량이 보호 경계 아래에 있는 경우 커널은 동일한 리소스에 대해 경쟁하는 다른을 선호합니다. 오버 커밋도 가능합니다.cgroup제어 그룹의 보호된 리소스 양을 조정하려면 MemoryLow= 옵션을 사용합니다.
- 할당
- 실시간 예산과 같이 제한된 리소스의 특정 양을 배타적으로 할당합니다. 오버 커밋이 가능합니다.
26.3. systemd를 사용하여 CPU 리소스 할당 링크 복사링크가 클립보드에 복사되었습니다!
systemd 에서 관리하는 시스템에서 각 시스템 서비스는 cgroup 에서 시작됩니다. CPU cgroup 컨트롤러에 대한 지원을 활성화하면 시스템은 프로세스별 배포 대신 CPU 리소스의 서비스 인식 배포를 사용합니다. 서비스 인식 배포에서 각 서비스는 동일한 서비스를 사용하는 프로세스 수에 관계없이 시스템에서 실행되는 다른 모든 서비스와 비교하여 거의 동일한 양의 CPU 시간을 수신합니다.
특정 서비스에 더 많은 CPU 리소스가 필요한 경우 서비스의 CPU 시간 할당 정책을 변경하여 해당 리소스를 부여할 수 있습니다.
프로세스
systemd 를 사용할 때 CPU 시간 할당 정책 옵션을 설정하려면 다음을 수행합니다.
선택한 서비스에서 CPU 시간 할당 정책 옵션의 할당된 값을 확인합니다.
systemctl show --property <CPU time allocation policy option> <service name>
$ systemctl show --property <CPU time allocation policy option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow CPU 시간 할당 정책 옵션의 필수 값을 root로 설정합니다.
systemctl set-property <service name> <CPU time allocation policy option>=<value>
# systemctl set-property <service name> <CPU time allocation policy option>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
cgroup 속성은 설정된 직후 적용됩니다. 따라서 서비스를 다시 시작할 필요가 없습니다.
검증
서비스에 필요한 CPU 시간 할당 정책 옵션 값을 성공적으로 변경했는지 확인하려면 다음을 입력합니다.
systemctl show --property <CPU time allocation policy option> <service name>
$ systemctl show --property <CPU time allocation policy option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.4. systemd의 CPU 시간 할당 정책 옵션 링크 복사링크가 클립보드에 복사되었습니다!
가장 자주 사용되는 CPU 시간 할당 정책 옵션에는 다음이 포함됩니다.
CPUWeight=다른 모든 서비스에 대해 특정 서비스에 더 높은 우선 순위를 할당합니다. 간격 1 - 10,000에서 값을 선택할 수 있습니다. 기본값은 100입니다.
예를 들어
httpd.service에 다른 모든 서비스에 대해 두 번 CPU를 두 번 지정하려면 값을CPUWeight=200으로 설정합니다.CPUWeight=는 사용 가능한 CPU 리소스가 소모되는 경우에만 적용됩니다.cpuQuota=절대 CPU 시간 할당량을 서비스에 할당합니다. 이 옵션의 값은 서비스가 사용 가능한 총 CPU 시간을 기준으로 수신할 최대 CPU 시간(예:
CPUQuota=30%)을 지정합니다.CPUQuota=은 Weights 및 Limits와 같은 특정 리소스 배포 모델에 대한 제한 값을 나타냅니다.CPUQuota=에 대한 자세한 내용은 시스템의systemd.resource-control(5)도움말 페이지를 참조하십시오.
26.5. systemd를 사용하여 메모리 리소스 할당 링크 복사링크가 클립보드에 복사되었습니다!
systemd 를 사용하여 메모리 리소스를 할당하려면 메모리 구성 옵션을 사용합니다.
-
MemoryMin -
MemoryLow -
MemoryHigh -
MemoryMax -
MemorySwapMax
프로세스
systemd 를 사용할 때 메모리 할당 구성 옵션을 설정하려면 다음을 수행합니다.
선택한 서비스에서 메모리 할당 구성 옵션의 할당된 값을 확인합니다.
systemctl show --property <memory allocation configuration option> <service name>
$ systemctl show --property <memory allocation configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 메모리 할당 구성 옵션의 필수 값을
root로 설정합니다.systemctl set-property <service name> <memory allocation configuration option>=<value>
# systemctl set-property <service name> <memory allocation configuration option>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
cgroup 속성은 설정된 직후 적용됩니다. 따라서 서비스를 다시 시작할 필요가 없습니다.
검증
서비스에 필요한 메모리 할당 구성 옵션 값을 성공적으로 변경했는지 확인하려면 다음을 입력합니다.
systemctl show --property <memory allocation configuration option> <service name>
$ systemctl show --property <memory allocation configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.6. systemd의 메모리 할당 구성 옵션 링크 복사링크가 클립보드에 복사되었습니다!
systemd 를 사용하여 시스템 메모리 할당을 구성할 때 다음 옵션을 사용할 수 있습니다.
MemoryMin- 하드 메모리 보호 메모리 사용량이 지정된 제한 미만이면 cgroup 메모리가 회수되지 않습니다.
MemoryLow- 소프트 메모리 보호 메모리 사용량이 지정된 제한 미만이면 보호된 cgroup에서 메모리를 회수하지 않는 경우에만 cgroup 메모리를 회수할 수 있습니다.
MemoryHigh- 메모리 제한입니다. 메모리 사용량이 지정된 제한을 초과하면 cgroup의 프로세스가 제한되고 과도한 회수 부족으로 설정됩니다.
MemoryMax-
메모리 사용량에 대한 절대 제한입니다. kilo(K), mega(M), 기가(G), 테라(T) 접미사(예:
MemoryMax=1G)를 사용할 수 있습니다. MemorySwapMax- 스왑 사용량에 대한 하드 제한입니다.
메모리 제한을 소진하면 OOM(메모리 부족) 종료자가 실행 중인 서비스를 중지합니다. 이를 방지하려면 OOMScoreAdjust= 값을 줄여 메모리 허용 오차를 늘립니다.
26.7. systemd를 사용하여 I/O 대역폭 구성 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8에서 특정 서비스의 성능을 개선하기 위해 systemd 를 사용하여 해당 서비스에 I/O 대역폭 리소스를 할당할 수 있습니다.
이렇게 하려면 다음 I/O 구성 옵션을 사용할 수 있습니다.
- IOWeight
- IODeviceWeight
- IOReadBandwidthMax
- IOWriteBandwidthMax
- IOReadIOPSMax
- IOWriteIOPSMax
프로세스
systemd 를 사용하여 I/O 대역폭 구성 옵션을 설정하려면 다음을 수행합니다.
선택한 서비스에서 I/O 대역폭 구성 옵션의 할당된 값을 확인합니다.
systemctl show --property <I/O bandwidth configuration option> <service name>
$ systemctl show --property <I/O bandwidth configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow I/O 대역폭 구성 옵션의 필요한 값을
root로 설정합니다.systemctl set-property <service name> <I/O bandwidth configuration option>=<value>
# systemctl set-property <service name> <I/O bandwidth configuration option>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
cgroup 속성이 설정되면 즉시 적용됩니다. 따라서 서비스를 다시 시작할 필요가 없습니다.
검증
서비스에 필요한 I/O 대역폭 구성 옵션 값을 성공적으로 변경했는지 확인하려면 다음을 입력합니다.
systemctl show --property <I/O bandwidth configuration option> <service name>
$ systemctl show --property <I/O bandwidth configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.8. systemd의 I/O 대역폭 구성 옵션 링크 복사링크가 클립보드에 복사되었습니다!
systemd 를 사용하여 블록 계층 I/O 정책을 관리하려면 다음 구성 옵션을 사용할 수 있습니다.
IOWeight- 기본 I/O 가중치를 설정합니다. weight 값은 다른 서비스와 관련하여 서비스가 수신하는 실제 I/O 대역폭의 양을 계산하기 위한 기준으로 사용됩니다.
IODeviceWeight특정 블록 장치의 I/O 가중치를 설정합니다.
참고가중치 기반 옵션은 블록 장치가 CFQ I/O 스케줄러를 사용하는 경우에만 지원됩니다. 장치가 Multi-Queue Block I/O 대기열 메커니즘을 사용하는 경우 옵션이 지원되지 않습니다.
예를 들어 IODeviceWeight=/dev/disk/by-id/dm-name-rhel-root 200.
IOReadBandwidthMax,IOWriteBandwidthMax장치 또는 마운트 지점당 절대 대역폭을 설정합니다.
예를 들어
IOWriteBandwith=/var/log 5M.참고systemd는 file-system-to-device 변환을 자동으로 처리합니다.IOReadIOPSMax,IOWriteIOPSMax- IPS(Input/Output Operations Per Second)에 절대 대역폭을 설정합니다.
26.9. systemd를 사용하여 CPUSET 컨트롤러 구성 링크 복사링크가 클립보드에 복사되었습니다!
systemd 리소스 관리 API를 사용하면 서비스에서 사용할 수 있는 CPU 및 NUMA 노드 세트에 대한 제한을 구성할 수 있습니다. 이 제한은 프로세스에서 사용하는 시스템 리소스에 대한 액세스를 제한합니다. 요청된 구성은 cpuset.cpus 및 cpuset.mems 파일에 작성됩니다.
그러나 상위 cgroup 이 cpus 또는 mems 를 제한하므로 요청된 구성을 사용할 수 없습니다. 현재 구성에 액세스하기 위해 cpuset.cpus.effective 및 cpuset.mems.effective 파일을 사용자에게 내보냅니다.
프로세스
AllowedCPUs를 설정하려면 다음을 수행합니다.systemctl set-property <service name>.service AllowedCPUs=<value>
# systemctl set-property <service name>.service AllowedCPUs=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
systemctl set-property <service name>.service AllowedCPUs=0-5
# systemctl set-property <service name>.service AllowedCPUs=0-5Copy to Clipboard Copied! Toggle word wrap Toggle overflow AllowedMemoryNodes를 설정하려면 다음을 수행합니다.systemctl set-property <service name>.service AllowedMemoryNodes=<value>
# systemctl set-property <service name>.service AllowedMemoryNodes=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
systemctl set-property <service name>.service AllowedMemoryNodes=0
# systemctl set-property <service name>.service AllowedMemoryNodes=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
27장. systemd를 사용하여 CPU 유사성 및 NUMA 정책 구성 링크 복사링크가 클립보드에 복사되었습니다!
CPU 관리, 메모리 관리 및 I/O 대역폭 옵션은 사용 가능한 리소스 파티셔닝을 처리합니다.
27.1. systemd를 사용하여 CPU 선호도 구성 링크 복사링크가 클립보드에 복사되었습니다!
CPU 선호도 설정을 사용하면 특정 프로세스의 액세스를 일부 CPU로 제한할 수 있습니다. 효과적으로 CPU 스케줄러는 프로세스의 선호도 마스크에 없는 CPU에서 실행되도록 프로세스를 예약하지 않습니다.
기본 CPU 선호도 마스크는 systemd에서 관리하는 모든 서비스에 적용됩니다.
특정 systemd 서비스에 대한 CPU 선호도 마스크를 구성하기 위해 systemd는 /etc/systemd/system.conf 파일에서 장치 파일 옵션과 manager 구성 옵션으로 CPUAffinity= 를 제공합니다.
CPUAffinity= 단위 파일 옵션은 유사성 마스크로 병합되어 사용되는 CPU 또는 CPU 범위 목록을 설정합니다. /etc/systemd/system.conf 파일의 CPUAffinity 옵션은 PID(프로세스 식별 번호) 1에 대한 선호도 마스크와 PID1에서 분기된 모든 프로세스를 정의합니다. 그런 다음 서비스별로 CPUAffinity 를 덮어쓸 수 있습니다.
특정 systemd 서비스에 대한 CPU 선호도 마스크를 구성한 후 시스템을 다시 시작하여 변경 사항을 적용해야 합니다.
프로세스
CPU Affinity 장치 파일 옵션을 사용하여 특정 systemd 서비스의 CPU 선호도 마스크를 설정하려면 다음을 수행합니다.
선택한 서비스에서
CPUAffinity단위 파일 옵션의 값을 확인합니다.systemctl show --property <CPU affinity configuration option> <service name>
$ systemctl show --property <CPU affinity configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow root 로 선호도 마스크로 사용되는 CPU 범위에 대한
CPUAffinity장치 파일 옵션의 필요한 값을 설정합니다.systemctl set-property <service name> CPUAffinity=<value>
# systemctl set-property <service name> CPUAffinity=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스를 다시 시작하여 변경 사항을 적용합니다.
systemctl restart <service name>
# systemctl restart <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
manager 구성 옵션을 사용하여 특정 systemd 서비스의 CPU 선호도 마스크를 설정하려면 다음을 수행합니다.
/etc/systemd/system.conf파일을 편집합니다.vi /etc/systemd/system.conf
# vi /etc/systemd/system.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
CPUAffinity=옵션을 검색하고 CPU 번호를 설정합니다. - 편집한 파일을 저장하고 서버를 다시 시작하여 변경 사항을 적용합니다.
27.2. systemd를 사용하여 NUMA 정책 구성 링크 복사링크가 클립보드에 복사되었습니다!
NUMA(Non-Uniform Memory Access)는 메모리 액세스 시간이 프로세서와 관련된 물리적 메모리 위치에 따라 달라지는 컴퓨터 메모리 하위 시스템 설계입니다.
CPU에 가까운 메모리는 다른 CPU(예: 메모리)에 대해 로컬이거나 CPU 세트 간에 공유되는 메모리보다 대기 시간(로컬 메모리)이 짧습니다.
Linux 커널의 관점에서 NUMA 정책은 커널이 프로세스에 실제 메모리 페이지를 할당하는 위치(예: NUMA 노드)를 관리합니다.
systemd 는 NUMAPolicy 및 NUMAMask 를 제공하여 서비스의 메모리 할당 정책을 제어합니다.
프로세스
NUMAPolicy 단위 파일 옵션을 통해 NUMA 메모리 정책을 설정하려면 다음을 수행합니다.
선택한 서비스에서
NUMAPolicy단위 파일 옵션의 값을 확인합니다.systemctl show --property <NUMA policy configuration option> <service name>
$ systemctl show --property <NUMA policy configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow root 로서
NUMAPolicy장치 파일 옵션의 필수 정책 유형을 설정합니다.systemctl set-property <service name> NUMAPolicy=<value>
# systemctl set-property <service name> NUMAPolicy=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스를 다시 시작하여 변경 사항을 적용합니다.
systemctl restart <service name>
# systemctl restart <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
[Manager] 구성 옵션을 사용하여 글로벌 NUMAPolicy 설정을 설정하려면 다음을 수행합니다.
-
/etc/systemd/system.conf파일에서 파일의 [Manager] 섹션에서NUMAPolicy옵션을 검색합니다. - 정책 유형을 편집하고 파일을 저장합니다.
systemd구성을 다시 로드합니다.systemd daemon-reload
# systemd daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 서버를 재부팅합니다.
엄격한 NUMA 정책(예: bind )을 구성할 때 CPUAffinity= 단위 파일 옵션도 적절하게 설정해야 합니다.
27.3. systemd에 대한 NUMA 정책 구성 옵션 링크 복사링크가 클립보드에 복사되었습니다!
systemd 는 NUMA 정책을 구성하는 다음 옵션을 제공합니다.
NUMAPolicy실행된 프로세스의 NUMA 메모리 정책을 제어합니다. 이러한 정책 유형을 사용할 수 있습니다.
- default
- preferred
- bind
- interleave
- 로컬
NUMAMask선택한 NUMA 정책과 연결된 NUMA 노드 목록을 제어합니다.
다음 정책에 대해
NUMAMask옵션을 지정할 필요가 없습니다.- default
- 로컬
기본 정책의 경우 목록은 단일 NUMA 노드만 지정합니다.
28장. BPF Compiler Collection을 사용하여 시스템 성능 분석 링크 복사링크가 클립보드에 복사되었습니다!
BPF Compiler Collection(BCC)은 BPF(Berkeley Packet Filter)의 기능을 결합하여 시스템 성능을 분석합니다. BPF를 사용하면 커널 내에서 사용자 지정 프로그램을 안전하게 실행하여 성능 모니터링, 추적 및 디버깅을 위해 시스템 이벤트 및 데이터에 액세스할 수 있습니다. BCC는 사용자가 시스템에서 중요한 통찰력을 추출 할 수있는 도구 및 라이브러리를 사용하여 BPF 프로그램의 개발 및 배포를 단순화합니다.
28.1. bcc-tools 패키지 설치 링크 복사링크가 클립보드에 복사되었습니다!
BCC(BBF Compiler Collection) 라이브러리도 종속성으로 설치하는 bcc-tools 패키지를 설치합니다.
프로세스
bcc-tools를 설치합니다.yum install bcc-tools
# yum install bcc-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow BCC 툴은
/usr/share/bcc/tools/디렉터리에 설치됩니다.
검증
설치된 툴을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 목록의
doc디렉터리에는 각 툴에 대한 문서가 있습니다.
28.2. 성능 분석에 선택한 bcc-tools 사용 링크 복사링크가 클립보드에 복사되었습니다!
BCC(BBF Compiler Collection) 라이브러리에서 미리 생성된 특정 프로그램을 사용하여 이벤트별로 시스템 성능을 효율적이고 안전하게 분석합니다. BCC 라이브러리에서 미리 생성된 프로그램 세트는 추가 프로그램 생성을 위한 예제 역할을 할 수 있습니다.
사전 요구 사항
- 설치된 bcc-tools 패키지
- 루트 권한
프로세스
execsnoop를 사용하여 시스템 프로세스 검사-
하나의 터미널에서
execsnoop프로그램을 실행합니다.
/usr/share/bcc/tools/execsnoop
# /usr/share/bcc/tools/execsnoopCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls명령의 수명이 짧은 프로세스를 생성하려면 다른 터미널에서 다음을 입력합니다.ls /usr/share/bcc/tools/doc/
$ ls /usr/share/bcc/tools/doc/Copy to Clipboard Copied! Toggle word wrap Toggle overflow execsnoop를 실행하는 터미널에는 다음과 유사한 출력이 표시됩니다.PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow execsnoop프로그램은 시스템 리소스를 사용하는 각 새 프로세스에 대한 출력 행을 출력합니다.ls와 같이 곧 실행되는 프로그램의 프로세스도 감지할 수 있으며 대부분의 모니터링 도구는 등록하지 않습니다.execsnoop출력에는 다음 필드가 표시됩니다.
-
하나의 터미널에서
- PCOMM
-
상위 프로세스 이름입니다. (
ls) - PID
-
프로세스 ID입니다. (
8382) - PPID
-
상위 프로세스 ID입니다. (
8287) - RET
-
프로그램 코드를 새 프로세스로 로드하는
exec()시스템 호출(0)의 반환 값입니다. - ARGS
- 시작된 프로그램의 인수와 관련된 위치입니다.
execsnoop 에 대한 자세한 내용, 예제 및 옵션은 /usr/share/bcc/tools/doc/execsnoop_example.txt 파일을 참조하십시오.
exec() 에 대한 자세한 내용은 exec Cryostat 매뉴얼 페이지를 참조하십시오.
opensnoop을 사용하여 명령이 열리는 파일을 추적-
한 터미널에서
opensnoop프로그램을 실행하여uname명령 프로세스에서만 열린 파일의 출력을 출력합니다.
/usr/share/bcc/tools/opensnoop -n uname
# /usr/share/bcc/tools/opensnoop -n unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다른 터미널에서 명령을 입력하여 특정 파일을 엽니다.
uname
$ unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow opensnoop을 실행하는 터미널에는 다음과 유사한 출력이 표시됩니다.PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...
PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow opensnoop프로그램은 전체 시스템에서open()시스템 호출을 감시하고uname이 이 방법을 따라 열려고 시도한 각 파일에 대한 출력 행을 출력합니다.opensnoop출력에는 다음 필드가 표시됩니다.- PID
-
프로세스 ID입니다. (
8596) - COMM
-
프로세스 이름입니다. (
uname) - FD
-
파일 설명자 -
open()이 열려 있는 파일을 참조하기 위해 반환하는 값입니다. (3) - ERR
- 모든 오류.
- 경로
-
open()가 열려는 파일의 위치입니다.
명령이 존재하지 않는 파일을 읽으려고 하면
FD열은-1을 반환하고ERR열은 관련 오류에 해당하는 값을 출력합니다. 결과적으로opensnoop는 제대로 작동하지 않는 애플리케이션을 식별하는 데 도움이 될 수 있습니다.
-
한 터미널에서
opensnoop 에 대한 자세한 정보, 예제 및 옵션은 /usr/share/bcc/tools/doc/opensnoop_example.txt 파일을 참조하십시오.
open() 에 대한 자세한 내용은 open(2) 매뉴얼 페이지를 참조하십시오.
biotop를 사용하여 디스크에서 I/O 작업을 수행하는 상위 프로세스 모니터링-
인수
30을 사용하여 하나의 터미널에서biotop프로그램을 실행하여 30초 요약을 생성합니다.
/usr/share/bcc/tools/biotop 30
# /usr/share/bcc/tools/biotop 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고인수가 제공되지 않으면 기본적으로 1초마다 출력 화면이 새로 고쳐집니다.
다른 터미널에서 명령을 입력하여 로컬 하드 디스크 장치의 내용을 읽고 출력을
/dev/zero파일에 씁니다.dd if=/dev/vda of=/dev/zero
# dd if=/dev/vda of=/dev/zeroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 단계는
biotop를 설명하기 위해 특정 I/O 트래픽을 생성합니다.biotop를 실행하는 터미널에는 다음과 유사한 출력이 표시됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow biotop출력에는 다음 필드가 표시됩니다.
-
인수
- PID
-
프로세스 ID입니다. (
9568) - COMM
-
프로세스 이름입니다. (
dd) - 디스크
-
읽기 작업을 수행하는 디스크입니다. (
vda) - I/O
- 수행된 읽기 작업 수입니다. (16294)
- kbytes
- 읽기 작업에서 도달한 K바이트 수입니다. (14,440,636)
- AVGms
- 평균 읽기 작업의 I/O 시간입니다. (3.69)
biotop 에 대한 자세한 내용, 예제 및 옵션은 /usr/share/bcc/tools/doc/biotop_example.txt 파일을 참조하십시오.
dd 에 대한 자세한 내용은 dd(1) 매뉴얼 페이지를 참조하십시오.
xfsslower 를 사용하여 예기치 않게 느린 파일 시스템 작업 노출
xfsslower 는 읽기, 쓰기, 열기 또는 동기화(fsync) 작업을 수행하는 XFS 파일 시스템에서 사용하는 시간을 측정합니다. 1 인수를 사용하면 프로그램에서 1ms보다 느린 작업만 표시합니다.
한 터미널에서
xfsslower프로그램을 실행합니다./usr/share/bcc/tools/xfsslower 1
# /usr/share/bcc/tools/xfsslower 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고제공된 인수가 없는 경우
xfsslower는 기본적으로 10ms보다 느린 작업을 표시합니다.다른 터미널에서 명령을 입력하여
vim편집기에 텍스트 파일을 생성하여 XFS 파일 시스템과의 상호 작용을 시작합니다.vim text
$ vim textCopy to Clipboard Copied! Toggle word wrap Toggle overflow xfsslower를 실행하는 터미널은 이전 단계의 파일을 저장할 때 유사한 것을 보여줍니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 각 행은 파일 시스템의 작업을 나타내며 특정 임계값보다 많은 시간이 걸렸습니다.
xfsslower는 가능한 파일 시스템 문제를 감지하여 예기치 않은 느린 작업을 수행할 수 있습니다.xfsslower출력에는 다음 필드가 표시됩니다.- COMM
-
프로세스 이름입니다. (
b'bash') - T
작업 유형입니다. (
R)- Read
- w rite
- s ync
- OFF_KB
- KB의 파일 오프셋입니다. (0)
- 파일 이름
- 읽기, 쓰기 또는 동기화된 파일입니다.
xfsslower 에 대한 자세한 정보, 예제 및 옵션은 /usr/share/bcc/tools/doc/xfsslower_example.txt 파일을 참조하십시오.
fsync 에 대한 자세한 내용은 fsync(2) 매뉴얼 페이지를 참조하십시오.
29장. 커널 무결성 하위 시스템으로 보안 강화 링크 복사링크가 클립보드에 복사되었습니다!
커널 무결성 하위 시스템의 구성 요소를 사용하여 시스템 보호를 개선할 수 있습니다. 관련 구성 요소 및 해당 구성에 대해 자세히 알아보십시오.
29.1. 커널 무결성 하위 시스템 링크 복사링크가 클립보드에 복사되었습니다!
무결성 하위 시스템은 파일 변조를 탐지하고 로드된 정책에 따라 액세스를 거부하여 시스템 무결성을 보호합니다. 또한 원격 당사자가 원격 인증을 통해 시스템 무결성을 확인할 수 있도록 액세스 로그를 수집합니다. 커널 무결성 하위 시스템에는 무결성 측정 아키텍처(IMA) 및 EVM(Extended Verification Module)이 포함됩니다.
IMA 및 EVM 개요
IMA(Integrity Measurement Architecture)는 파일 콘텐츠의 무결성을 유지 관리합니다. IMA 정책을 통해 활성화할 수 있는 세 가지 기능이 포함되어 있습니다.
IMA-Measurement- 파일 콘텐츠 해시 또는 서명을 수집하고 커널에 측정을 저장합니다. TPM을 사용할 수 있는 경우 각 측정은 TPM PCR을 확장하여 인증 따옴표로 원격 인증할 수 있습니다.
IMA-Appraisal- 계산된 파일 해시를 알려진 양호한 참조 값과 비교하거나 security.ima 특성에 저장된 서명을 확인하여 파일 무결성을 확인합니다. 확인에 실패하면 시스템은 액세스를 거부합니다.
IMA-Audit- 계산된 파일 콘텐츠 해시 또는 서명을 시스템 감사 로그에 저장합니다.
EVM(Extended Verification Module)은 security.ima 및 security.selinux 와 같은 시스템 보안과 관련된 확장된 속성을 포함하여 파일 메타데이터를 보호합니다. EVM은 security.evm 에 이러한 보안 속성에 대한 참조 해시 또는 HMAC를 저장하고 이를 사용하여 파일 메타데이터가 악성으로 변경되었는지 감지합니다.
29.2. 신뢰할 수 있는 암호화된 키 링크 복사링크가 클립보드에 복사되었습니다!
신뢰할 수 있는 키와 암호화된 키는 시스템 보안을 강화하는 데 중요한 부분입니다.
신뢰할 수 있고 암호화된 키는 커널 키링 서비스를 사용하는 커널에서 생성된 가변 길이의 대칭 키입니다. 예를 들어 EVM(Extended verification module)에서 실행 중인 시스템의 무결성을 확인하고 확인할 수 있도록 키의 무결성을 확인할 수 있습니다. 사용자 수준 프로그램은 암호화된 Blob 형식의 키만 액세스할 수 있습니다.
- 신뢰할 수 있는 키
신뢰할 수 있는 키에는 키를 생성하고 암호화(seal)하는 데 사용되는 신뢰할 수 있는 플랫폼 모듈(TPM) 칩이 필요합니다. 각 TPM에는 TPM 자체에 저장된 스토리지 루트 키라는 마스터 래핑 키가 있습니다.
참고Red Hat Enterprise Linux 8은 TPM 1.2 및 TPM 2.0을 모두 지원합니다. 자세한 내용은 Red Hat에서 지원하는 Red Hat Knowledgebase 솔루션 Is Trusted Platform Module (TPM) 을 참조하십시오.
TPM 2.0 칩의 상태를 확인할 수 있습니다.
cat /sys/class/tpm/tpm0/tpm_version_major 2
$ cat /sys/class/tpm/tpm0/tpm_version_major 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow TPM 2.0 칩을 활성화하고 머신 펌웨어의 설정을 통해 TPM 2.0 장치를 관리할 수도 있습니다.
또한 신뢰할 수 있는 키를 TPM의 플랫폼 구성 레지스터 (PCR) 값 세트로 봉인할 수 있습니다. PCR에는 펌웨어, 부트 로더 및 운영 체제를 반영하는 무결성 관리 값 세트가 포함되어 있습니다. PCRsealed 키는 암호화된 시스템의 TPM에서만 해독할 수 있습니다. 그러나 인증 키에 PCRsealed 신뢰할 수 있는 키를 로드하면 연결된 PCR 값이 확인됩니다. 확인 후 새 커널 부팅을 지원하기 위해 새 또는 향후 PCR 값으로 키를 업데이트할 수 있습니다. 또한 단일 키를 각각 다른 PCR 값을 가진 여러 Blob으로 저장할 수 있습니다.
- 암호화된 키
- 암호화된 키에는 AES(커널 고급 암호화 표준)를 사용하므로 TPM이 필요하지 않으므로 신뢰할 수 있는 키보다 더 빠릅니다. 암호화된 키는 커널 생성 임의 번호를 사용하여 생성되고 마스터 키로 사용자 공간 Blob으로 내보낼 때 암호화됩니다.
마스터 키는 신뢰할 수 있는 키 또는 사용자 키입니다. 마스터 키를 신뢰할 수 없는 경우 암호화된 키의 보안은 암호화에 사용된 사용자 키에 따라 달라집니다.
29.3. 신뢰할 수 있는 키로 작업 링크 복사링크가 클립보드에 복사되었습니다!
keyctl 유틸리티를 사용하여 신뢰할 수 있는 키를 생성, 내보내기, 로드 및 업데이트할 수 있습니다.
사전 요구 사항
64비트 ARM 아키텍처 및 IBM Z의 경우
trusted커널 모듈이 로드됩니다.modprobe trusted
# modprobe trustedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을 로드하는 방법에 대한 자세한 내용은 시스템 런타임 시 커널 모듈 로드 를 참조하십시오.
- 신뢰할 수 있는 플랫폼 모듈(TPM)이 활성화되어 활성화되어 있습니다. 커널 무결성 하위 시스템 및 신뢰할 수 있고 암호화된 키를 참조하십시오.
Red Hat Enterprise Linux 8은 TPM 1.2 및 TPM 2.0을 모두 지원합니다. TPM 1.2를 사용하는 경우 1단계를 건너뜁니다.
프로세스
다음 유틸리티 중 하나를 사용하여 영구 처리(예: 81000001 )가 있는 SHA-256 기본 스토리지 키로 2048비트 RSA 키를 생성합니다.
tss2패키지를 사용하여 다음을 수행합니다.# TPM_DEVICE=/dev/tpm0 tsscreateprimary -hi o -st Handle 80000000 # TPM_DEVICE=/dev/tpm0 tssevictcontrol -hi o -ho 80000000 -hp 81000001
# TPM_DEVICE=/dev/tpm0 tsscreateprimary -hi o -st Handle 80000000 # TPM_DEVICE=/dev/tpm0 tssevictcontrol -hi o -ho 80000000 -hp 81000001Copy to Clipboard Copied! Toggle word wrap Toggle overflow tpm2-tools패키지를 사용하여 다음을 수행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
신뢰할 수 있는 키를 생성합니다.
keyctl 구문으로 TPM 2.0을 사용하면 trusted < NAME > "new < KEY_LENGTH > keyhandle= <PERSISTENT-HANDLE > [options]" < KEYRING> . 이 예에서 영구 처리는 81000001 입니다.keyctl add trusted kmk "new 32 keyhandle=0x81000001" @u 642500861
# keyctl add trusted kmk "new 32 keyhandle=0x81000001" @u 642500861Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
32바이트(256비트)의 길이를 사용하여kmk라는 신뢰할 수 있는 키를 생성하여 사용자 인증 키링(@u)에 배치합니다. 키는 32~128바이트(256비트에서 1024비트)의 길이를 가질 수 있습니다.keyctl 구문으로 TPM 1.2를 사용하면 신뢰할 수 있는 < NAME > "new <KEY_LENGTH>" <KEYRING> :keyctl add trusted kmk "new 32" @u
# keyctl add trusted kmk "new 32" @uCopy to Clipboard Copied! Toggle word wrap Toggle overflow
커널 인증 키의 현재 구조를 나열합니다.
keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmk# keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 신뢰할 수 있는 키의 일련 번호를 사용하여 사용자 공간 Blob으로 키를 내보냅니다.
keyctl pipe 642500861 > kmk.blob
# keyctl pipe 642500861 > kmk.blobCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은
pipe하위 명령과kmk의 일련 번호를 사용합니다.사용자 공간 Blob에서 신뢰할 수 있는 키를 로드합니다.
keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
# keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824Copy to Clipboard Copied! Toggle word wrap Toggle overflow TPM-sealed 신뢰할 수 있는 키(
kmk)를 사용하는 안전한 암호화된 키를 만듭니다. 다음 구문을 따르십시오. keyctl add encrypted <NAME> "new [FORMAT] <KEY_TYPE>:<PRI Cryostat_KEY_NAME> <KEY_LENGTH>" <KEYRING > :keyctl add encrypted encr-key "new trusted:kmk 32" @u 159771175
# keyctl add encrypted encr-key "new trusted:kmk 32" @u 159771175Copy to Clipboard Copied! Toggle word wrap Toggle overflow
29.4. 암호화된 키 작업 링크 복사링크가 클립보드에 복사되었습니다!
암호화된 키를 관리하여 신뢰할 수 있는 플랫폼 모듈(TPM)을 사용할 수 없는 시스템에서 시스템 보안을 개선할 수 있습니다.
신뢰할 수 있는 기본 키로 봉인하지 않는 한 암호화된 키는 암호화에 사용되는 사용자 기본 키(임의 숫자 키)의 보안 수준을 상속합니다. 따라서 부팅 프로세스 초기에 기본 사용자 키를 안전하게 로드하는 것이 좋습니다.
사전 요구 사항
64비트 ARM 아키텍처 및 IBM Z의 경우
encrypted-keys커널 모듈이 로드됩니다.modprobe encrypted-keys
# modprobe encrypted-keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을 로드하는 방법에 대한 자세한 내용은 시스템 런타임 시 커널 모듈 로드 를 참조하십시오.
프로세스
임의의 숫자 시퀀스를 사용하여 사용자 키를 생성합니다.
keyctl add user kmk-user "$(dd if=/dev/urandom bs=1 count=32 2>/dev/null)" @u 427069434
# keyctl add user kmk-user "$(dd if=/dev/urandom bs=1 count=32 2>/dev/null)" @u 427069434Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 기본 키 역할을 하고 실제 암호화된 키를 봉인하는 데 사용되는
kmk-user라는 사용자 키를 생성합니다.이전 단계의 기본 키를 사용하여 암호화된 키를 생성합니다.
keyctl add encrypted encr-key "new user:kmk-user 32" @u 1012412758
# keyctl add encrypted encr-key "new user:kmk-user 32" @u 1012412758Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
지정된 사용자 인증 키의 모든 키를 나열합니다.
keyctl list @u 2 keys in keyring: 427069434: --alswrv 1000 1000 user: kmk-user 1012412758: --alswrv 1000 1000 encrypted: encr-key
# keyctl list @u 2 keys in keyring: 427069434: --alswrv 1000 1000 user: kmk-user 1012412758: --alswrv 1000 1000 encrypted: encr-keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
29.5. IMA 및 EVM 활성화 링크 복사링크가 클립보드에 복사되었습니다!
무결성 측정 아키텍처(IMA) 및 EVM(확장 확인 모듈)을 활성화하고 구성하여 운영 체제의 보안을 개선할 수 있습니다.
항상 IMA와 함께 EVM을 활성화합니다.
EVM만 활성화할 수 있지만 EVM 평가는 IMA 평가 규칙에 의해서만 트리거됩니다. 따라서 EVM은 SELinux 속성과 같은 파일 메타데이터를 보호하지 않습니다. 파일 메타데이터가 오프라인으로 변조되는 경우 EVM은 파일 메타데이터 변경만 방지할 수 있습니다. 파일 실행과 같은 파일 액세스를 차단하지 않습니다.
사전 요구 사항
Secure Boot는 일시적으로 비활성화되어 있습니다.
참고Secure Boot가 활성화되면
ima_appraise=fix커널 명령줄 매개변수가 작동하지 않습니다.securityfs파일 시스템은/sys/kernel/security/디렉터리에 마운트되고/sys/kernel/security/integrity/ima/디렉터리가 있습니다.mount명령을 사용하여securityfs가 마운트된 위치를 확인할 수 있습니다.mount ... securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) ...
# mount ... securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd서비스 관리자는 부팅 시 IMA 및 EVM을 지원하도록 패치됩니다. 다음 명령을 사용하여 확인합니다.grep <options> pattern <files>
# grep <options> pattern <files>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 프로세스
현재 부팅 항목에 대한 수정 모드에서 IMA 및 EVM을 활성화하고 사용자가 다음 커널 명령줄 매개변수를 추가하여 IMA 측정값을 수집하고 업데이트할 수 있습니다.
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령을 사용하면 현재 부팅 항목에 대한 수정 모드에서 IMA 및 EVM을 활성화하여 IMA 측정을 수집하고 업데이트할 수 있습니다.
ima_policy=appraise_tcb커널 명령줄 매개 변수를 사용하면 커널이 기본 Trusted Computing Base (TCB) 측정 정책과 평가 단계를 사용할 수 있습니다. 평가 단계는 이전 및 현재 측정값이 일치하지 않는 파일에 대한 액세스를 금지합니다.- 재부팅하여 변경 사항을 적용합니다.
선택 사항: 커널 명령줄에 추가된 매개변수를 확인합니다.
cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-167.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ima_policy=appraise_tcb ima_appraise=fix evm=fix
# cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-167.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ima_policy=appraise_tcb ima_appraise=fix evm=fixCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 마스터 키를 생성하여 EVM 키를 보호합니다.
keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u 748544121
# keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u 748544121Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmk는 커널 공간 메모리에 전적으로 유지됩니다.kmk의 32바이트 긴 값은/dev/urandom파일에서 임의의 바이트에서 생성되고 사용자(@u) 인증 키에 배치됩니다. 키 일련 번호는 이전 출력의 첫 번째 행에 있습니다.kmk를 기반으로 암호화된 EVM 키를 만듭니다.keyctl add encrypted evm-key "new user:kmk 64" @u 641780271
# keyctl add encrypted evm-key "new user:kmk 64" @u 641780271Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은
kmk를 사용하여 64바이트 긴 사용자 키(evm-key)를 생성하고 암호화하여 사용자(@u) 인증 키에 배치합니다. 키 일련 번호는 이전 출력의 첫 번째 행에 있습니다.중요이 이름은 EVM 하위 시스템 이름이 필요하며 작업 중이므로 사용자 키의 이름을 evm-key 로 지정해야 합니다.
내보낸 키에 사용할 디렉토리를 생성합니다.
mkdir -p /etc/keys/
# mkdir -p /etc/keys/Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmk를 검색하고 암호화되지 않은 값을 새 디렉터리로 내보냅니다.keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmk
# keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmkCopy to Clipboard Copied! Toggle word wrap Toggle overflow evm-key를 검색하고 암호화된 값을 새 디렉터리로 내보냅니다.keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-key
# keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow evm-key는 이전에 커널 마스터 키로 암호화되었습니다.선택 사항: 새로 생성된 키를 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 인증 키(예: 시스템 재부팅 후)에서 키를 제거하면 새 키를 생성하는 대신 이미 내보낸
kmk및evm-key를 가져올 수 있습니다.kmk를 가져옵니다.keyctl add user kmk "$(cat /etc/keys/kmk)" @u 451342217
# keyctl add user kmk "$(cat /etc/keys/kmk)" @u 451342217Copy to Clipboard Copied! Toggle word wrap Toggle overflow evm-key를 가져옵니다.keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u 924537557
# keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u 924537557Copy to Clipboard Copied! Toggle word wrap Toggle overflow
EVM을 활성화합니다.
echo 1 > /sys/kernel/security/evm
# echo 1 > /sys/kernel/security/evmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 전체 시스템의 레이블을 다시 지정합니다.
find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;# find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주의시스템의 레이블을 다시 지정하지 않고 IMA 및 EVM을 활성화하면 시스템의 대부분의 파일에 액세스할 수 없게 될 수 있습니다.
검증
EVM이 초기화되었는지 확인합니다.
dmesg | tail -1 […] evm: key initialized
# dmesg | tail -1 […] evm: key initializedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
29.6. 무결성 측정 아키텍처를 사용하여 파일 해시 수집 링크 복사링크가 클립보드에 복사되었습니다!
측정 단계에서는 파일 해시를 생성하여 해당 파일의 확장 속성(xattrs)으로 저장할 수 있습니다. 파일 해시를 사용하면 RSA 기반 디지털 서명 또는 HMAC-SHA1(HMAC-SHA1)을 생성하고 확장된 속성에 대한 오프라인 변조 공격을 방지할 수 있습니다.
사전 요구 사항
- IMA 및 EVM이 활성화됩니다. 자세한 내용은 무결성 측정 아키텍처 활성화 및 확장 검증 모듈을 참조하십시오.
- 신뢰할 수 있는 유효한 키 또는 암호화된 키는 커널 인증 키에 저장됩니다.
-
ima-evm-utils,attr및keyutils패키지가 설치됩니다.
프로세스
테스트 파일을 생성합니다.
echo <Test_text> > test_file
# echo <Test_text> > test_fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow IMA 및 EVM은
test_file예제 파일에 확장된 속성으로 저장된 해시 값을 할당했는지 확인합니다.파일의 확장 속성을 검사합니다.
getfattr -m . -d test_file file: test_file security.evm=0sAnDIy4VPA0HArpPO/EqiutnNyBql security.ima=0sAQOEDeuUnWzwwKYk+n66h/vby3eD
# getfattr -m . -d test_file # file: test_file security.evm=0sAnDIy4VPA0HArpPO/EqiutnNyBql security.ima=0sAQOEDeuUnWzwwKYk+n66h/vby3eDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에는 IMA 및 EVM 해시 값과 SELinux 컨텍스트가 포함된 확장된 속성이 표시되어 있습니다. EVM은 다른 속성과 관련된
security.evm확장 속성을 추가합니다. 이 시점에서security.evm에서evmctl유틸리티를 사용하여 RSA 기반 디지털 서명 또는 HMAC-SHA1( Hash-based Message Authentication Code)을 생성할 수 있습니다.
30장. RHEL 시스템 역할을 사용하여 커널 매개변수를 영구적으로 구성 링크 복사링크가 클립보드에 복사되었습니다!
kernel_settings RHEL 시스템 역할을 사용하여 여러 클라이언트에서 커널 매개변수를 동시에 구성할 수 있습니다. 동시 구성에는 다음과 같은 이점이 있습니다.
- 효율적인 입력 설정을 갖춘 친숙한 인터페이스를 제공합니다.
- 의도한 모든 커널 매개변수를 한 곳에 유지합니다.
제어 시스템에서 kernel_settings 역할을 실행하면 커널 매개변수가 관리 시스템에 즉시 적용되고 재부팅 시 지속됩니다.
RHEL 채널을 통해 제공되는 RHEL 시스템 역할은 RHEL 고객이 기본 AppStream 리포지토리에서 RPM 패키지로 사용할 수 있습니다. RHEL 시스템 역할은 Ansible Automation Hub를 통해 Ansible 서브스크립션을 통해 고객에게 컬렉션으로 제공됩니다.
30.1. kernel_settings RHEL 시스템 역할을 사용하여 선택한 커널 매개변수 적용 링크 복사링크가 클립보드에 복사되었습니다!
kernel_settings RHEL 시스템 역할을 사용하여 영구 효과를 사용하여 여러 관리 운영 체제에서 다양한 커널 매개 변수를 원격으로 구성할 수 있습니다. 예를 들어 다음을 구성할 수 있습니다.
- 작은 페이지를 관리하는 오버헤드를 줄임으로써 성능을 높이기 위한 투명한 hugepages.
- 루프백 인터페이스를 사용하여 네트워크를 통해 전송할 가장 큰 패킷 크기입니다.
- 동시에 열 수 있도록 파일의 제한입니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다.
프로세스
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
kernel_settings_sysfs: <list_of_sysctl_settings>-
sysctl설정의 YAML 목록과 이러한 설정에 할당할 값입니다. kernel_settings_transparent_hugepages: <value>-
메모리 하위 시스템 THP(Transparent Huge Pages) 설정을 제어합니다. THP 지원(항상 )을 비활성화하거나 시스템 전체(
항상) 또는MAD_HUGEPAGE지역(madvise) 내에서 활성화할 수 있습니다. kernel_settings_reboot_ok: <true|false>-
기본값은
false입니다.true로 설정하면 시스템 역할은 요청된 변경 사항을 적용하고 재부팅하는 데 관리 호스트를 재부팅해야 하는지 여부를 결정합니다.false로 설정하면 역할은 재부팅이 필요함을 나타내는 값이true인kernel_settings_reboot_required변수를 반환합니다. 이 경우 사용자는 관리 노드를 수동으로 재부팅해야 합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의 /usr/share/ansible/roles/rhel-system-roles.kdump/README.md 파일을 참조하십시오.
플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
영향을 받는 커널 매개변수를 확인합니다.
ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu' ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'
# ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu' # ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31장. RHEL 시스템 역할을 사용하여 GRUB 부트 로더 구성 링크 복사링크가 클립보드에 복사되었습니다!
부트로더 RHEL 시스템 역할을 사용하면 GRUB 부트 로더와 관련된 구성 및 관리 작업을 자동화할 수 있습니다.
이 역할은 현재 다음 CPU 아키텍처에서 실행되는 GRUB 부트 로더 구성을 지원합니다.
- AMD 및 Intel 64비트 아키텍처(x86-64)
- 64비트 ARM 아키텍처(ARMv8.0)
- IBM Power Systems, Little Endian (POWER9)
31.1. 부트로더 RHEL 시스템 역할을 사용하여 기존 부트 로더 항목 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
부트로더 RHEL 시스템 역할을 사용하여 자동으로 GRUB 부팅 메뉴에서 기존 항목을 업데이트할 수 있습니다. 이렇게 하면 시스템의 성능 또는 동작을 최적화할 수 있는 특정 커널 명령줄 매개 변수를 효율적으로 전달할 수 있습니다.
예를 들어 커널 및 init 시스템의 자세한 부팅 메시지가 필요하지 않은 시스템을 활용하는 경우 부트로더 를 사용하여 관리형 노드의 기존 부트 로더 항목에 quiet 매개 변수를 적용하여 더 깔끔하고 덜 어셈블하며 더 많은 사용자 친화적인 부팅 환경을 달성합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다. - 업데이트하려는 부트 로더 항목에 해당하는 커널을 확인했습니다.
프로세스
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
kernel- 업데이트하려는 부트 로더 항목과 연결된 커널을 지정합니다.
options- 선택한 부트 로더 항목(커널)에 대해 업데이트할 커널 명령줄 매개 변수를 지정합니다.
bootloader_reboot_ok: true- 이 역할은 변경 사항을 적용하는 데 재부팅이 필요하다는 것을 감지하고 관리 노드를 다시 시작합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
지정된 부트 로더 항목에 업데이트된 커널 명령줄 매개변수가 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.4. 부트 로더 RHEL 시스템 역할을 사용하여 부트 로더 구성 정보 수집 링크 복사링크가 클립보드에 복사되었습니다!
부트로더 RHEL 시스템 역할을 사용하여 자동화된 방식으로 GRUB 부트 로더 항목에 대한 정보를 수집할 수 있습니다. 이 정보를 사용하여 커널 및 초기 RAM 디스크 이미지 경로와 같은 시스템 부팅 매개변수의 올바른 구성을 확인할 수 있습니다.
예를 들면 다음과 같습니다.
- 부팅 실패를 방지합니다.
- 문제 해결 시 알려진 양호한 상태로 되돌립니다.
- 보안 관련 커널 명령줄 매개 변수가 올바르게 구성되었는지 확인합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다.
프로세스
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
제어 노드에서 이전 플레이북을 실행하면 다음 예와 유사한 명령줄 출력이 표시됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령줄 출력에는 부팅 항목에 대한 다음과 같은 주목할 만한 구성 정보가 표시됩니다.
args- 부팅 프로세스 중에 GRUB2 부트 로더에 의해 커널에 전달된 명령줄 매개 변수입니다. 커널, initramfs 및 기타 부팅 시간 구성 요소의 다양한 설정 및 동작을 구성합니다.
id- 부트 로더 메뉴의 각 부트 항목에 할당된 고유 식별자입니다. 머신 ID와 커널 버전으로 구성됩니다.
root- 커널이 부팅 중에 기본 파일 시스템으로 마운트하고 사용할 루트 파일 시스템입니다.
32장. 고급 오류 보고 사용 링크 복사링크가 클립보드에 복사되었습니다!
AER( Advanced Error Reporting )를 사용하면PCIe( Peripheral Component Interconnect Express ) 장치에 대한 오류 이벤트 알림이 표시됩니다. RHEL은 기본적으로 이 커널 기능을 활성화하고 커널 로그에 보고된 오류를 수집합니다. rasdaemon 프로그램을 사용하면 이러한 오류가 구문 분석되어 데이터베이스에 저장됩니다.
32.1. AER 개요 링크 복사링크가 클립보드에 복사되었습니다!
Advanced Error Reporting (AER)은PCIe( Peripheral Component Interconnect Express ) 장치에 대한 향상된 오류 보고를 제공하는 커널 기능입니다. AER 커널 드라이버는 PCIe AER 기능을 지원하는 루트 포트를 연결합니다.
- 포괄적인 오류 정보 수집
- 사용자에게 오류 보고
- 오류 복구 작업 수행
AER 가 오류를 캡처하면 콘솔에 오류 메시지를 보냅니다. 복구 가능한 오류의 경우 콘솔 출력은 경고 입니다.
예 32.1. AER 출력 예
32.2. AER 메시지 수집 및 표시 링크 복사링크가 클립보드에 복사되었습니다!
AER 메시지를 수집하고 표시하려면 rasdaemon 프로그램을 사용합니다.
프로세스
rasdaemon패키지를 설치합니다.yum install rasdaemon
# yum install rasdaemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow rasdaemon서비스를 활성화하고 시작합니다.systemctl enable --now rasdaemon Created symlink /etc/systemd/system/multi-user.target.wants/rasdaemon.service → /usr/lib/systemd/system/rasdaemon.service.
# systemctl enable --now rasdaemon Created symlink /etc/systemd/system/multi-user.target.wants/rasdaemon.service → /usr/lib/systemd/system/rasdaemon.service.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ras-mc-ctl명령을 실행합니다.ras-mc-ctl --summary ras-mc-ctl --errors
# ras-mc-ctl --summary # ras-mc-ctl --errorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 기록된 오류(---
summary옵션)에 대한 요약을 표시하거나 오류 데이터베이스(--errors옵션)에 저장된 오류를 표시합니다.