컀널 관리

컀널 관리

ν•™μŠ΅ λͺ©ν‘œ

이 λ¬Έμ„œλ₯Ό 톡해 λ‹€μŒμ„ ν•™μŠ΅ν•©λ‹ˆλ‹€:

  • Linux 컀널 ꡬ쑰와 버전 관리
  • 컀널 λͺ¨λ“ˆ 관리 (λ‘œλ“œ, μ–Έλ‘œλ“œ, μ„€μ •)
  • 컀널 컴파일과 μ„€μΉ˜
  • GRUB λΆ€νŠΈλ‘œλ” μ„€μ •

λ‚œμ΄λ„: ⭐⭐⭐⭐ (κ³ κΈ‰)


λͺ©μ°¨

  1. 컀널 κ°œμš”
  2. 컀널 버전 관리
  3. 컀널 λͺ¨λ“ˆ
  4. DKMS
  5. 컀널 컴파일
  6. GRUB λΆ€νŠΈλ‘œλ”
  7. 컀널 νŒŒλΌλ―Έν„°

1. 컀널 κ°œμš”

μ»€λ„μ˜ μ—­ν• 

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     μ‚¬μš©μž 곡간                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚  β”‚ μ• ν”Œλ¦¬μΌ€μ΄μ…˜β”‚  β”‚  μ‰˜     β”‚  β”‚  μ„œλΉ„μŠ€  β”‚  β”‚  GUI    β”‚        β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜        β”‚
β”‚       β”‚            β”‚            β”‚            β”‚              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                   μ‹œμŠ€ν…œ 호좜 μΈν„°νŽ˜μ΄μŠ€                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                      컀널 곡간                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  ν”„λ‘œμ„ΈμŠ€ 관리  β”‚  λ©”λͺ¨λ¦¬ 관리  β”‚  νŒŒμΌμ‹œμŠ€ν…œ  β”‚  λ„€νŠΈμ›Œν¬ β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              λ””λ°”μ΄μŠ€ λ“œλΌμ΄λ²„ (λͺ¨λ“ˆ)                 β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        ν•˜λ“œμ›¨μ–΄                              β”‚
β”‚  CPU  β”‚  λ©”λͺ¨λ¦¬  β”‚  λ””μŠ€ν¬  β”‚  λ„€νŠΈμ›Œν¬ μΉ΄λ“œ  β”‚  기타 μž₯치    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

컀널 ꡬ성 μš”μ†Œ

ꡬ성 μš”μ†Œ μ—­ν• 
ν”„λ‘œμ„ΈμŠ€ 관리 ν”„λ‘œμ„ΈμŠ€ 생성, μŠ€μΌ€μ€„λ§, μ’…λ£Œ
λ©”λͺ¨λ¦¬ 관리 가상 λ©”λͺ¨λ¦¬, νŽ˜μ΄μ§•, 캐싱
νŒŒμΌμ‹œμŠ€ν…œ VFS, ext4, XFS, NFS λ“±
λ„€νŠΈμ›Œν‚Ή TCP/IP μŠ€νƒ, μ†ŒμΌ“, λΌμš°νŒ…
λ””λ°”μ΄μŠ€ λ“œλΌμ΄λ²„ ν•˜λ“œμ›¨μ–΄ 좔상화, λͺ¨λ“ˆ
μ‹œμŠ€ν…œ 호좜 μ‚¬μš©μž 곡간과 컀널 μΈν„°νŽ˜μ΄μŠ€

2. 컀널 버전 관리

ν˜„μž¬ 컀널 정보

# 컀널 버전 확인
uname -r
# 예: 5.15.0-91-generic

# 상세 정보
uname -a
# Linux hostname 5.15.0-91-generic #101-Ubuntu SMP x86_64 GNU/Linux

# 컀널 μ„€μ • 정보
cat /proc/version

# 컀널 λΉŒλ“œ μ„€μ • (μ„€μ •μœΌλ‘œ 컴파일된 경우)
cat /boot/config-$(uname -r) | head -20

컀널 버전 체계

5.15.0-91-generic
β”‚ β”‚  β”‚ β”‚  └──────── 배포판 νŠΉμ • 이름
β”‚ β”‚  β”‚ └────────── ABI 버전 (배포판 패치)
β”‚ β”‚  └──────────── 패치 레벨
β”‚ └─────────────── λ§ˆμ΄λ„ˆ 버전
└───────────────── 메이저 버전

μ„€μΉ˜λœ 컀널 λͺ©λ‘

# Ubuntu/Debian
dpkg --list | grep linux-image

# RHEL/CentOS
rpm -qa | grep kernel

# λ˜λŠ” /boot 확인
ls -la /boot/vmlinuz-*

컀널 μ—…λ°μ΄νŠΈ

# Ubuntu/Debian
sudo apt update
sudo apt upgrade linux-image-generic

# νŠΉμ • 버전 μ„€μΉ˜
sudo apt install linux-image-5.15.0-92-generic

# RHEL/CentOS
sudo yum update kernel

# νŠΉμ • 버전 μ„€μΉ˜
sudo yum install kernel-5.14.0-362.el9

이전 컀널 제거

# Ubuntu - μžλ™ 제거
sudo apt autoremove

# Ubuntu - νŠΉμ • 버전 제거
sudo apt remove linux-image-5.15.0-88-generic

# ν˜„μž¬ 컀널 μ œμ™Έν•˜κ³  이전 컀널 제거
sudo apt purge $(dpkg --list | grep -E 'linux-(image|headers|modules)' | \
    grep -v $(uname -r | sed 's/-generic//') | awk '{print $2}')

# RHEL/CentOS - 였래된 컀널 제거 (2개 μœ μ§€)
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)

3. 컀널 λͺ¨λ“ˆ

λͺ¨λ“ˆ 정보 확인

# λ‘œλ“œλœ λͺ¨λ“ˆ λͺ©λ‘
lsmod

# νŠΉμ • λͺ¨λ“ˆ 정보
modinfo ext4
modinfo nvidia

# λͺ¨λ“ˆ μ˜μ‘΄μ„± 확인
modprobe --show-depends ext4

# λͺ¨λ“ˆ 파일 μœ„μΉ˜
ls /lib/modules/$(uname -r)/kernel/

λͺ¨λ“ˆ λ‘œλ“œ/μ–Έλ‘œλ“œ

# λͺ¨λ“ˆ λ‘œλ“œ
sudo modprobe nouveau
sudo modprobe snd-hda-intel

# λͺ¨λ“ˆ μ–Έλ‘œλ“œ
sudo modprobe -r nouveau
sudo rmmod nouveau

# κ°•μ œ μ–Έλ‘œλ“œ (μœ„ν—˜)
sudo rmmod -f nouveau

# μ˜μ‘΄μ„± 포함 λ‘œλ“œ
sudo modprobe -v nvidia

λͺ¨λ“ˆ νŒŒλΌλ―Έν„°

# λͺ¨λ“ˆ νŒŒλΌλ―Έν„° 확인
modinfo -p e1000e

# ν˜„μž¬ 적용된 νŒŒλΌλ―Έν„°
cat /sys/module/e1000e/parameters/IntMode

# νŒŒλΌλ―Έν„°μ™€ ν•¨κ»˜ λ‘œλ“œ
sudo modprobe e1000e IntMode=2

# /etc/modprobe.d/ μ„€μ • 파일
echo "options e1000e IntMode=2" | sudo tee /etc/modprobe.d/e1000e.conf

λͺ¨λ“ˆ μžλ™ λ‘œλ“œ μ„€μ •

# λΆ€νŒ… μ‹œ μžλ™ λ‘œλ“œ
echo "vhost_net" | sudo tee /etc/modules-load.d/vhost_net.conf

# λͺ¨λ“ˆ λΈ”λž™λ¦¬μŠ€νŠΈ (λ‘œλ“œ λ°©μ§€)
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf

# initramfs μž¬μƒμ„± ν•„μš”
sudo update-initramfs -u  # Ubuntu/Debian
sudo dracut -f            # RHEL/CentOS

λͺ¨λ“ˆ 별칭

# 별칭 확인
modprobe --show-depends -a pci:v00008086d00001502sv*sd*bc*sc*i*

# ν•˜λ“œμ›¨μ–΄ ID둜 λͺ¨λ“ˆ μ°ΎκΈ°
lspci -nn  # PCI μž₯μΉ˜μ™€ ID 확인
lspci -k   # μ‚¬μš© 쀑인 λͺ¨λ“ˆ 확인

# USB μž₯치
lsusb
lsusb -t  # 트리 ν˜•νƒœ

4. DKMS

DKMS κ°œμš”

DKMS (Dynamic Kernel Module Support)λŠ” 컀널 μ—…λ°μ΄νŠΈ μ‹œ μ™ΈλΆ€ λͺ¨λ“ˆμ„ μžλ™μœΌλ‘œ μž¬λΉŒλ“œν•©λ‹ˆλ‹€.

# DKMS μ„€μΉ˜
sudo apt install dkms  # Ubuntu/Debian
sudo yum install dkms  # RHEL/CentOS

DKMS μƒνƒœ 확인

# λ“±λ‘λœ λͺ¨λ“ˆ λͺ©λ‘
dkms status

# μ˜ˆμ‹œ 좜λ ₯:
# nvidia/535.154.05, 5.15.0-91-generic, x86_64: installed
# nvidia/535.154.05, 5.15.0-92-generic, x86_64: installed
# virtualbox/7.0.12_Ubuntu, 5.15.0-91-generic, x86_64: installed

DKMS λͺ¨λ“ˆ 관리

# λͺ¨λ“ˆ μΆ”κ°€
sudo dkms add -m module-name -v version

# λͺ¨λ“ˆ λΉŒλ“œ
sudo dkms build -m module-name -v version

# λͺ¨λ“ˆ μ„€μΉ˜
sudo dkms install -m module-name -v version

# λͺ¨λ“ˆ 제거
sudo dkms remove -m module-name -v version --all

# λͺ¨λ“  컀널에 λŒ€ν•΄ μž¬λΉŒλ“œ
sudo dkms autoinstall

DKMS λͺ¨λ“ˆ 생성 μ˜ˆμ‹œ

# λͺ¨λ“ˆ 디렉토리 ꡬ쑰
/usr/src/mymodule-1.0/
β”œβ”€β”€ dkms.conf
β”œβ”€β”€ Makefile
└── mymodule.c
# dkms.conf μ˜ˆμ‹œ
PACKAGE_NAME="mymodule"
PACKAGE_VERSION="1.0"
BUILT_MODULE_NAME[0]="mymodule"
DEST_MODULE_LOCATION[0]="/kernel/drivers/misc"
AUTOINSTALL="yes"
# Makefile μ˜ˆμ‹œ
obj-m := mymodule.o

KVERSION := $(shell uname -r)
KDIR := /lib/modules/$(KVERSION)/build

all:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean
# DKMS에 등둝
sudo dkms add -m mymodule -v 1.0
sudo dkms build -m mymodule -v 1.0
sudo dkms install -m mymodule -v 1.0

5. 컀널 컴파일

μ†ŒμŠ€ λ‹€μš΄λ‘œλ“œ

# kernel.orgμ—μ„œ λ‹€μš΄λ‘œλ“œ
cd /usr/src
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.tar.xz
tar -xvf linux-6.7.tar.xz
cd linux-6.7

# λ˜λŠ” git으둜
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
cd linux
git checkout v6.7

λΉŒλ“œ μ˜μ‘΄μ„± μ„€μΉ˜

# Ubuntu/Debian
sudo apt install build-essential libncurses-dev bison flex \
    libssl-dev libelf-dev bc dwarves

# RHEL/CentOS
sudo yum groupinstall "Development Tools"
sudo yum install ncurses-devel bison flex elfutils-libelf-devel \
    openssl-devel bc dwarves

컀널 μ„€μ •

# ν˜„μž¬ 컀널 μ„€μ • 볡사
cp /boot/config-$(uname -r) .config

# 메뉴 기반 μ„€μ •
make menuconfig

# λ˜λŠ” κ·Έλž˜ν”½ μ„€μ • (X11 ν•„μš”)
make xconfig

# λ˜λŠ” ν…μŠ€νŠΈ 질의 방식
make config

# κΈ°μ‘΄ μ„€μ • 기반으둜 μƒˆ μ˜΅μ…˜λ§Œ 질의
make oldconfig

# κΈ°λ³Έκ°’μœΌλ‘œ μƒˆ μ˜΅μ…˜ μ„€μ •
make olddefconfig

μ£Όμš” μ„€μ • μ˜΅μ…˜

General setup --->
    Local version - append to kernel release: -custom
    [*] Automatically append version information

Processor type and features --->
    Processor family (Core 2/newer Xeon) --->
    [*] Symmetric multi-processing support

Device Drivers --->
    [M] Network device support --->
    [M] SCSI device support --->

File systems --->
    <*> Ext4 POSIX Access Control Lists
    <M> XFS filesystem support
    <M> Btrfs filesystem support

컴파일 및 μ„€μΉ˜

# 컴파일 (병렬 λΉŒλ“œ)
make -j$(nproc)

# λͺ¨λ“ˆ 컴파일
make modules

# λͺ¨λ“ˆ μ„€μΉ˜
sudo make modules_install

# 컀널 μ„€μΉ˜
sudo make install

# initramfs 생성 (μžλ™μœΌλ‘œ λ˜μ§€ μ•Šμ€ 경우)
sudo update-initramfs -c -k 6.7.0-custom

# GRUB μ—…λ°μ΄νŠΈ
sudo update-grub

λΉ λ₯Έ ν…ŒμŠ€νŠΈ λΉŒλ“œ

# μ΅œμ†Œ μ„€μ •μœΌλ‘œ μ‹œμž‘
make tinyconfig

# λ˜λŠ” ν˜„μž¬ ν•˜λ“œμ›¨μ–΄μ— λ§žλŠ” μ΅œμ†Œ μ„€μ •
make localmodconfig

# λΉŒλ“œ
make -j$(nproc)

6. GRUB λΆ€νŠΈλ‘œλ”

GRUB μ„€μ • 파일

# 메인 μ„€μ • (μˆ˜μ •ν•˜μ§€ μ•ŠμŒ)
/boot/grub/grub.cfg

# μ‚¬μš©μž μ„€μ • (이것을 μˆ˜μ •)
/etc/default/grub

# μ»€μŠ€ν…€ 슀크립트
/etc/grub.d/

/etc/default/grub μ„€μ •

# /etc/default/grub

# κΈ°λ³Έ λΆ€νŒ… ν•­λͺ© (0λΆ€ν„° μ‹œμž‘, λ˜λŠ” "saved")
GRUB_DEFAULT=0

# 메뉴 ν‘œμ‹œ μ‹œκ°„ (초)
GRUB_TIMEOUT=5

# 메뉴 μˆ¨κΉ€ (λΆ€νŒ… λΉ λ₯΄κ²Œ)
GRUB_TIMEOUT_STYLE=menu  # menu, countdown, hidden

# 컀널 νŒŒλΌλ―Έν„°
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# 해상도
GRUB_GFXMODE=1920x1080

# 볡ꡬ λͺ¨λ“œ ν•­λͺ© λΉ„ν™œμ„±ν™”
GRUB_DISABLE_RECOVERY="false"

# OS ν”„λ‘œλ²„ (λ‹€λ₯Έ OS 감지)
GRUB_DISABLE_OS_PROBER=false

GRUB μ—…λ°μ΄νŠΈ

# μ„€μ • λ³€κ²½ ν›„ 적용
sudo update-grub  # Ubuntu/Debian
sudo grub2-mkconfig -o /boot/grub2/grub.cfg  # RHEL/CentOS

# BIOS μ‹œμŠ€ν…œ
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# UEFI μ‹œμŠ€ν…œ
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

GRUB μž¬μ„€μΉ˜

# BIOS μ‹œμŠ€ν…œ
sudo grub-install /dev/sda
sudo update-grub

# UEFI μ‹œμŠ€ν…œ
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi
sudo update-grub

λΆ€νŒ… ν•­λͺ© μˆ˜λ™ μΆ”κ°€

# /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0

menuentry "Custom Kernel" {
    set root='hd0,msdos1'
    linux /boot/vmlinuz-6.7.0-custom root=/dev/sda2 ro quiet
    initrd /boot/initrd.img-6.7.0-custom
}

menuentry "Recovery Mode" {
    set root='hd0,msdos1'
    linux /boot/vmlinuz-6.7.0-custom root=/dev/sda2 ro single
    initrd /boot/initrd.img-6.7.0-custom
}

κΈ°λ³Έ λΆ€νŒ… 컀널 λ³€κ²½

# μ‚¬μš© κ°€λŠ₯ν•œ 메뉴 ν•­λͺ© 확인
grep -E "^menuentry|^submenu" /boot/grub/grub.cfg

# κΈ°λ³Έκ°’ μ„€μ • (인덱슀)
sudo grub-set-default 2

# κΈ°λ³Έκ°’ μ„€μ • (이름)
sudo grub-set-default "Ubuntu, with Linux 5.15.0-92-generic"

# μΌνšŒμ„± λΆ€νŒ… 선택
sudo grub-reboot "Ubuntu, with Linux 5.15.0-91-generic"

# /etc/default/grubμ—μ„œ GRUB_DEFAULT μ„€μ •
GRUB_DEFAULT="1>2"  # μ„œλΈŒλ©”λ‰΄ 1번의 3번째 ν•­λͺ©

7. 컀널 νŒŒλΌλ―Έν„°

λΆ€νŒ… μ‹œ νŒŒλΌλ―Έν„°

# /etc/default/grubμ—μ„œ μ„€μ •
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root"

# λ˜λŠ” GRUB λ©”λ‰΄μ—μ„œ 'e'λ₯Ό 눌러 μΌμ‹œμ  νŽΈμ§‘
linux /boot/vmlinuz-... root=... quiet splash nouveau.modeset=0

일반적인 컀널 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° μ„€λͺ…
quiet λΆ€νŒ… λ©”μ‹œμ§€ μ΅œμ†Œν™”
splash κ·Έλž˜ν”½ μŠ€ν”Œλž˜μ‹œ ν™”λ©΄
single 단일 μ‚¬μš©μž λͺ¨λ“œ
init=/bin/bash 직접 μ‰˜λ‘œ λΆ€νŒ…
nomodeset λΉ„λ””μ˜€ λͺ¨λ“œ μ„€μ • λΉ„ν™œμ„±ν™”
acpi=off ACPI λΉ„ν™œμ„±ν™”
noapic APIC λΉ„ν™œμ„±ν™”
mem=4G μ‚¬μš© λ©”λͺ¨λ¦¬ μ œν•œ
maxcpus=2 CPU 수 μ œν•œ

λŸ°νƒ€μž„ νŒŒλΌλ―Έν„° (sysctl)

# ν˜„μž¬ κ°’ 확인
sysctl -a
sysctl net.ipv4.ip_forward

# μž„μ‹œ λ³€κ²½
sudo sysctl -w net.ipv4.ip_forward=1

# 영ꡬ μ„€μ •
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-custom.conf
sudo sysctl -p /etc/sysctl.d/99-custom.conf

# λ˜λŠ” /etc/sysctl.conf νŽΈμ§‘ ν›„
sudo sysctl -p

μ£Όμš” sysctl νŒŒλΌλ―Έν„°

# /etc/sysctl.d/99-custom.conf

# λ„€νŠΈμ›Œν¬
net.ipv4.ip_forward = 1
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# λ©”λͺ¨λ¦¬
vm.swappiness = 10
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10

# 파일 μ‹œμŠ€ν…œ
fs.file-max = 2097152
fs.inotify.max_user_watches = 524288

# λ³΄μ•ˆ
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2

initramfs 관리

# ν˜„μž¬ μ»€λ„μ˜ initramfs μž¬μƒμ„±
sudo update-initramfs -u

# νŠΉμ • 컀널 버전
sudo update-initramfs -u -k 5.15.0-92-generic

# μƒˆλ‘œ 생성
sudo update-initramfs -c -k 5.15.0-92-generic

# RHEL/CentOS (dracut)
sudo dracut -f
sudo dracut -f /boot/initramfs-$(uname -r).img $(uname -r)

# λ‚΄μš© 확인
lsinitramfs /boot/initrd.img-$(uname -r) | head -50

μ—°μŠ΅ 문제

문제 1: λͺ¨λ“ˆ 관리

  1. nouveau λ“œλΌμ΄λ²„λ₯Ό λΈ”λž™λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•˜κ³  ν™•μΈν•˜μ„Έμš”.
  2. NVIDIA 독점 λ“œλΌμ΄λ²„ μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€λ₯Ό κ°€μ •ν•©λ‹ˆλ‹€.

문제 2: GRUB μ„€μ •

λ‹€μŒ μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜λŠ” GRUB 섀정을 μž‘μ„±ν•˜μ„Έμš”: - λΆ€νŒ… νƒ€μž„μ•„μ›ƒ 10초 - κΈ°λ³Έ 컀널: 두 번째 ν•­λͺ© - λ©”λͺ¨λ¦¬ 4GB μ œν•œ - μ‘°μš©ν•œ λΆ€νŒ…

문제 3: sysctl μ„€μ •

μ›Ή μ„œλ²„μ— μ΅œμ ν™”λœ sysctl 섀정을 μž‘μ„±ν•˜μ„Έμš”: - μ—°κ²° 백둜그 증가 - 파일 λ””μŠ€ν¬λ¦½ν„° μ œν•œ 증가 - TCP νŠœλ‹


μ •λ‹΅

문제 1 μ •λ‹΅

# nouveau λΈ”λž™λ¦¬μŠ€νŠΈ
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf

# initramfs μ—…λ°μ΄νŠΈ
sudo update-initramfs -u  # Ubuntu
sudo dracut -f            # RHEL

# 확인
cat /etc/modprobe.d/blacklist-nouveau.conf

# μž¬λΆ€νŒ… ν›„ 확인
lsmod | grep nouveau  # 좜λ ₯ μ—†μ–΄μ•Ό 함

문제 2 μ •λ‹΅

# /etc/default/grub
GRUB_DEFAULT=1
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mem=4G"
GRUB_CMDLINE_LINUX=""
# 적용
sudo update-grub

문제 3 μ •λ‹΅

# /etc/sysctl.d/99-webserver.conf

# μ—°κ²° 백둜그
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 파일 λ””μŠ€ν¬λ¦½ν„°
fs.file-max = 2097152

# TCP νŠœλ‹
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15

# λ©”λͺ¨λ¦¬ 버퍼
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_wmem = 4096 12582912 16777216
# 적용
sudo sysctl -p /etc/sysctl.d/99-webserver.conf

λ‹€μŒ 단계


참고 자료

to navigate between lessons