Super Kawaii Cute Cat Kaoani
본문 바로가기
{Bootcamp}/KT Cloud Tech up 클라우드 인프라

[KT Cloud] 리눅스 관리자 실습 (4)

by wonee1 2026. 9. 9.
728x90

 

 

1. 메모리 관리 

 

1-1. 디바이스 스왑 추가 

 

임시 vs 영구 정리

 

  임시 (재부팅 시 풀림) 임시 (재부팅 시 풀림
방법 swapon /dev/장치 fstab 등록 + swapon -a
대응(디스크) mount /dev/장치 /폴더 fstab 등록 + mount -a

 

 

 

vi /etc/fstab       # fstab에 swap 줄 추가
swapon -s           # 현재 swap 확인 (등록 전엔 비었을 수 있음)
swapon -a           # fstab의 swap 전부 켜기
swapon -s           # 다시 확인 → nvme0n2p3 활성화됨

 

  • -a : all. /etc/fstab에 등록된 모든 swap을 한 번에 켠다
  • 앞서 마운트에서 배운 mount -a의 swap 버전이다

 

부팅할 때 시스템이 자동으로 swapon -a를 실행한다. 그래서 fstab에 swap을 등록해두면 재부팅해도 자동으로 켜진다.

 

 

 

 

1-2. 파일 스왑 추가 

 

  파티션 swap 파일 swap
대상 디스크 파티션 (/dev/nvme0n2p3) 일반 파일 (/var/tmp/swapfile)
준비 파티션을 먼저 나눠야 함 파일만 만들면 됨
유연성 낮음 높음 (파티션 안 건드림)

chmod로 권한 주고 스왑 추가

 


 

2. 시스템 시작과 종료 

 

부팅은 크게 Hardware boot(하드웨어가 시동)와 Software boot(OS가 뜨는 것) 두 단계로 나뉜다.

Power on
  ↓
Firmware (BIOS/UEFI)      ← 하드웨어 점검
  ↓
Boot loader (GRUB)        ← 커널 선택·로딩
─────────────────────
Linux kernel + initrd     ← 커널 실행, 임시 파일시스템
  ↓
init 또는 systemd         ← 첫 프로세스, 서비스 시작
  ↓
System ready              ← 사용 준비 완료

 

 

 

 

dnf upate -y를 하면 커널을 포함한 업데이트를 진행한다. 

 

 

2-1. GRUB2 부트로더

커널을 메모리에 올리고, 어떤 OS(커널)로 부팅할지 고르는 프로그램이다.

  • 이름 뜻: Grand Unified Bootloader
  • 역할 1: 커널을 메모리에 로딩 (부팅의 핵심)
  • 역할 2: 여러 운영체제/커널 버전 선택 메뉴 표시

 

💡 새 커널로 업데이트했다가 문제가 생기면, GRUB 메뉴에서 이전 커널을 골라 부팅할 수 있다.

 

 

구성 파일은 다음과 같다. 

 

파일  역할 직접 수정
/boot/grub2/grub.cfg 메인 설정 (실제 부팅에 쓰임)  안 됨
/etc/default/grub 사용자 설정 (타임아웃 등) 여기 수정
/etc/grub.d/ 메뉴 항목 생성 스크립트 고급

 

 

부트 로더 구성파일 업데이트

 
# 1. 사용자 설정 파일 수정
vi /etc/default/grub

# 2. 기존 grub.cfg 백업 (안전장치)
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bk

# 3. grub.cfg 재생성
grub2-mkconfig -o /boot/grub2/grub.cfg

 

grub2-mkconfig로 재생성했다가 뭔가 잘못되면 부팅이 안 될 수 있다. 그래서 재생성 전에 기존 grub.cfg를 .bk로 복사해둔다. 문제 생기면 백업본으로 되돌리면 된다.

 

 

 

2-2.기본 부팅 커널 변경

grubby란

 

부팅 커널 설정을 간편하게 다루는 명령어다. /etc/default/grub 수정 + grub2-mkconfig 재생성 과정을 거치지 않고, 명령 한 줄로 기본 커널을 바꿀 수 있다.

여러 커널 버전이 설치돼 있을 때(업데이트하면 옛 커널이 남는다고 했던 그거), 그중 어느 걸 기본으로 부팅할지 grubby로 고른다.

 

 

1) 현재 기본 커널 확인

grubby --default-kernel
/boot/vmlinuz-4.18.0-301.1.el8.x86_64
  • --default-kernel : 지금 기본으로 부팅되는 커널이 뭔지 보여준다
  • vmlinuz-... : 리눅스 커널 파일. 숫자가 버전이다 (4.18.0-301)

 

2) 현재 실행 중인 커널 확인

uname -a
Linux ... 4.18.0-301.1.el8.x86_64 ...
  • uname -a : 지금 돌아가는 중인 커널 버전 확인
  • 기본 커널(301)과 실행 커널(301)이 같은 걸 확인

 

3) 커널 업데이트 확인

dnf check-update kernel
kernel.x86_64    4.18.0-305.0.1.el8    baseos
  • 새 커널 버전(305)이 저장소에 있는 걸 발견
  • 현재(301)보다 최신(305)이 나와 있다는 뜻

 

 

4) 설치된 커널 파일 목록

ls -al /boot/vmlinuz*

/boot에 있는 커널들을 보여준다:

  • vmlinuz-0-rescue-... : 복구용(rescue) 커널 (문제 생겼을 때 쓰는 것)
  • vmlinuz-4.18.0-301... : 현재 커널

 

5) 기본 커널 변경

grubby --set-default ...
  • --set-default 커널경로 : 그 커널을 기본 부팅 커널로 설정
  • 예: grubby --set-default /boot/vmlinuz-4.18.0-305.0.1.el8.x86_64

 

grubby 주요 옵션

grubby --default-kernel 현재 기본 커널 확인
grubby --info=ALL 설치된 모든 커널 정보
grubby --set-default 커널경로 기본 커널 변경
grubby --default-index 기본 커널의 번호 확인

 

grubby vs 수동 편집

 

앞서 배운 방법이랑 비교하면 grubby가 얼마나 편한지 보인다.

  수동 방식 grubby
방법 /etc/default/grub 수정 → grub2-mkconfig 재생성 grubby --set-default 한 줄
난이도 여러 단계 간단
용도 전반적 설정 변경 커널 선택만 빠르게

커널만 바꿀 거면 grubby가 훨씬 빠르다. /etc/default/grub 방식은 타임아웃이나 커널 옵션 같은 전반적 설정을 바꿀 때 쓴다.

 

 

 

2-3. Root 비밀번호 초기화

 

GRUB 메뉴에서 커널 편집 → init을 bash로 바꿔치기 → 비번 변경 → 정상 부팅으로 복귀

 

 

 

1) RUB에서 커널 편집 모드 진입

 

부팅 시 GRUB 메뉴에서 e 키를 눌러 편집 모드로 들어간다. 그리고 커널 줄(linux로 시작하는 줄) 끝에 추가한다. 

init=/bin/bash
  • 원래는 부팅 끝에 systemd(또는 init)가 실행되는데, 이걸 bash 셸로 바꿔치기한다. 
  • 그러면 시스템이 로그인 절차 없이 바로 root 셸로 떨어진다 

 

2) 파일시스템을 쓰기 가능하게 재마운트

mount -o remount,rw /

 

3) 비밀번호 변경

passwd root

 

4) SELinux 처리 (Rocky/RedHat 필수)

touch /.autorelabel
# 또는 /etc/selinux/config에서 SELINUX=disabled로 변경
  • SELinux는 RedHat 계열의 보안 기능인데, 비번 파일이 바뀌면 라벨이 안 맞아서 문제가 생길 수 있다
  • touch /.autorelabel : 다음 부팅 때 SELinux 라벨을 자동으로 다시 매기라는 표시
  • 이걸 안 하면 비번 바꿔도 로그인이 막힐 수 있다 (RedHat 계열 특유의 함정)

 

 

5) 정상 부팅으로 복귀

 
exec /sbin/init
  • 지금 bash로 떠 있는 상태를 정상 부팅 프로세스로 전환한다
  • exec : 현재 프로세스를 새 명령으로 교체한다

 

지금 PID 1(첫 프로세스) 자리에 bash가 앉아 있다(init=/bin/bash로 바꿨기 때문에) 이걸 정상 부팅하려면 그 자리를 원래 init(systemd)로 바꿔야 한다.

  • 그냥 /sbin/init을 실행하면 → bash 밑에 자식으로 생겨서 꼬인다
  • exec /sbin/init → 현재 bash를 init으로 통째로 교체한다. bash가 사라지고 그 자리에 init이 앉는다

 

bash → (exec) → /sbin/init

 

exec로 bash를 init으로 바꾸는 것이다. 자식 프로세스를 새로 만드는(fork) 게 아니라, 자기 자신을 갈아치우는 거다.

 

exec 없이 실행 = 내가 대리인을 부르는 것
exec 실행 = 내가 그 사람으로 변신하는 것.  PID 1 자리는 하나뿐이라 변신(exec)해야 한다.

 

# [GRUB 편집모드에서]
init=/bin/bash          # 커널 줄에 추가 → Ctrl+X

# [bash 셸로 떨어진 후]
mount -o remount,rw /   # 1. 쓰기 가능하게
passwd root             # 2. 비번 변경
touch /.autorelabel     # 3. SELinux 라벨 재설정 (RedHat)
exec /sbin/init         # 4. 정상 부팅으로 전환

 

 

2-4. Kernel

 

리눅스 커널은 항상 메모리에 올라가는 부분과 필요할 때만 붙였다 떼는 부분으로 나뉜다. 

 

구분 Core 커널 Dynamic 커널 (모듈)
위치 /boot/vmlinuz* /lib/modules/$(uname -r)
특징 부팅 시 메모리에 로딩 (고정) 필요할 때 붙였다 뗌 (동적)
예 커널 핵심 기능 드라이버, 파일시스템 모듈

 

모듈 관리 명령어

lsmod 현재 로딩된 모듈 목록 보기
modinfo 특정 모듈의 상세 정보
modprobe 모듈 로딩 (의존성 자동 처리)
depmod 모듈 간 의존성 정보 생성
insmod 모듈 로딩 (의존성 처리 안 함)
rmmod 모듈 제거

 

 

 

 

 

 

 

커널 파라미터 제어 

 

/proc 이란

커널의 현재 상태를 파일처럼 보고 바꿀 수 있는 가상 공간이다. 디스크 파일이 아니라 커널이 메모리에서 실시간으로 보여주는 것이라, 읽으면 설정 확인, 쓰면 재부팅 없이 즉시 변경된다.

 

ip_forward 의미

  • 1 : 리눅스가 라우터처럼 동작 (패킷을 다른 곳으로 전달)
  • 0 : 포워딩 안 함

/proc 방식 vs sysctl 방식

 

같은 파라미터를 두 방식으로 다룬다.

방식 확인 변경
/proc 직접 cat /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl sysctl net.ipv4.ip_forward sysctl -w net.ipv4.ip_forward=1

 

 

sysctl 명령

sysctl -a 전체 파라미터 보기
sysctl 이름 특정 값 확인
sysctl -w 이름=값 값 변경
sysctl -p 설정 파일 다시 읽기

 

echo나 sysctl -w로 바꾼 건 재부팅하면 원복된다. 영구 적용하려면 설정 파일에 써야 한다.

# /etc/sysctl.conf 에 추가
net.ipv4.ip_forward = 1
# 적용
sysctl -p

 

 

 

 

sysctl --system

모든 sysctl 설정 파일을 한꺼번에 다시 읽어서 적용하는 명령이다.

앞서 sysctl -p는 특정 파일 하나(기본 /etc/sysctl.conf)만 읽는데, --system은 여러 위치의 설정 파일을 순서대로 전부 적용한다.

 

설정 파일을 여러 개 만들었거나, 시스템 전체 sysctl 설정을 처음부터 다시 적용하고 싶을 때 쓴다. 예를 들어 /etc/sysctl.d/에 새 설정 파일을 추가하고 나서 --system을 치면 그게 반영된다.

 

 

 

 

2-5. Systemd, Shutdown 

 

systemd는 리눅스 부팅과 서비스를 관리하는 핵심 시스템이다.

 

 

systemd target

0 poweroff.target 종료
1 / S / s rescue.target 단일 사용자(복구)
2,3,4 multi-user.target 텍스트 다중 사용자
5 graphical.target GUI
6 reboot.target 재부팅
(없음) emergency.target 최소 응급 모드

 

shutdown은 시스템 종료 명령이다.

 
shutdown [옵션] [시간] [메시지]
  • 옵션 : 종료/재부팅/취소 등 동작 지정
  • 시간 : 언제 실행할지 (now, +2, 시각 등)
  • 메시지 : 접속 중인 사용자에게 보낼 경고 문구

 

주요 옵션

-H --halt 시스템 정지 (전원은 안 꺼질 수 있음)
-P --poweroff 전원 완전 차단
-r --reboot 재부팅
-h poweroff와 동일 (전원 끔)
-k 실제로 안 끄고 경고만 보냄
--no-wall 경고 메시지 안 보내고 실행
-c 예약된 종료 취소

 

# 즉시 종료 (전원 끔)
shutdown -h now

# 즉시 재부팅
shutdown -r now

# 예약 취소
shutdown -c

 

3. 백업과 복구 

 

 

파일시스템마다 백업과 복구 도구가 있다.

파일시스템  백업  복구
ext2/3/4 dump restore
XFS xfsdump xfsrestore

 

 

공통 개념: dump level (증분 백업)

 

두 도구 다 0~9 레벨로 백업 범위를 정한다. 이게 핵심 개념이다.

  • level 0 : 전체 백업 (전부 다)
  • level 1 : level 0 이후 바뀐 것만 (증분)
  • level 2 : level 1 이후 바뀐 것만

매번 전체를 백업하면 시간 용량 낭비다. 처음 한 번 전체(0)를 뜨고, 그 뒤엔 바뀐 것만(1, 2...) 백업해서 효율을 높인다. 

 

3-1. ext 계열: dump / restore

 

백업 (dump)

# level 0 전체 백업
dump -0uf /bk/home.dump /home

# level 1 증분 백업 (원격지로)
dump -1uf root@remote_host:/host1/host1.dump /

 

-0 -1 dump level (0=전체, 1=증분)
-u 백업 기록 갱신 (/etc/dumpdates에 기록)
-f 백업 파일 지정
  • -u가 중요: 백업한 날짜를 기록해둬야, 다음 증분(1)이 언제 이후 바뀐 것인지 안다

 

복구 (restore)

cd /home
restore -tvf /bk/home.dump      # 목록 확인
restore -xvf /bk/home.dump      # 전체 복구

 

-t 백업 내용 목록만 보기 (test)
-x 추출(복구) (extract)
-v 진행 표시 (verbose)
-f 백업 파일 지정
-i 대화형 부분 복구 (interactive)

 

대화형 부분 복구 (restore -i)

 

일부 파일만 골라 복구할 때.

restore -ivf /bk/home.dump
> ls          # 백업 안의 파일 목록
> add 파일명   # 복구할 파일 선택
> extract     # 선택한 것만 복구
  • ls → 뭐가 있나 보고
  • add → 필요한 것만 표시
  • extract → 표시한 것만 꺼냄

 

3-2. XFS: xfsdump / xfsrestore

XFS는 앞서 계속 나온 그 파일시스템이라 전용 도구를 쓴다.

백업 (xfsdump)

# level 0 전체 백업
xfsdump -l 0 -f /bk/home.xfsdump0 /home
> session label       ← 백업 세션 이름 물어봄
: none
> label
: 날짜나 dump level    ← 라벨 지정

# level 1 증분 백업
xfsdump -l 1 -f /bk/home.xfsdump1 /home

 

-l 0 dump level (소문자 L)
-f 백업 파일 지정

xfsdump는 실행하면 session label과 media label을 물어본다. 백업을 구분하는 이름표라, 날짜나 레벨을 적어두면 나중에 알아보기 좋다.

 

복구 (xfsrestore)

cd /home
xfsrestore -tf /bk/home.xfsdump0        # 목록 확인
xfsrestore -rf /bk/home.xfsdump0 .      # 전체 복구
xfsrestore -rf /bk/home.xfsdump1 .      # 증분 복구
xfsrestore -if /bk/home.xfsdump1 .      # 대화형 부분 복구
-t 목록 보기
-r 복구 (restore)
-i 대화형 부분 복구
-f 백업 파일 지정

 

대화형 부분 복구 (xfsrestore -i)

 

dump와 동일하게 ls/add/extract.

xfsrestore -if /bk/home.xfsdump1 .
> ls
> add 파일명
> extract

 

 

두 도구 비교표

같은 작업을 도구별로 정리하면 대응이 보인다.

  ext (dump/restore) XFS (xfsdump/xfsrestore)
전체 백업 dump -0uf 파일 /home xfsdump -l 0 -f 파일 /home
증분 백업 dump -1uf ... xfsdump -l 1 -f ...
목록 보기 restore -tvf 파일 xfsrestore -tf 파일
전체 복구 restore -xvf 파일 xfsrestore -rf 파일 .
부분 복구 restore -ivf 파일 xfsrestore -if 파일 .

 

복구 흐름 

 

두 도구 다 대화형 복구는 똑같다.

ls       → 백업 안 목록 보기
add      → 복구할 것 선택
extract  → 선택한 것만 꺼내기

 

증분 복구 순서 

 

증분 백업을 복구할 땐 순서가 있다.

# 반드시 level 0 먼저 → 그다음 level 1
xfsrestore -rf home.xfsdump0 .    # 1. 전체 먼저
xfsrestore -rf home.xfsdump1 .    # 2. 증분 나중

 

level 0(전체)을 먼저 복구하고, 그 위에 level 1(변경분)을 덮어야 최신 상태가 된다. 순서 바뀌면 안 된다.

 

  Incremental (증분) Differential (차등)
기준 직전 백업 이후 최초 Full 이후
백업 크기 작음 (매번 조금) 점점 커짐 (누적)
백업 속도 빠름 느려짐
복구 Full + 모든 증분 필요 Full + 마지막 것만
복구 속도 느림 (여러 개 순서대로) 빠름 (2개만)

 

현업에선 netBackup을 많이 사용한다 

 

xfsrestore 대화형 개별 파일 복구

xfsrestore -if /bk/xfs.dump0 .
  • -i : interactive(대화형). 파일을 골라서 복구
  • -f : 백업 파일 지정
  • . : 현재 디렉토리로 복구

 

 

복구 확인

 

 

 

3-3. Rsync

 

rsync란

파일/폴더를 복사하고 동기화하는 명령이다. cp와 비슷하지만 훨씬 똑똑하다. 특히 원격 서버로 백업할 때 강력하다.

이름 뜻: remote sync (원격 동기화)

cp와 뭐가 다른가

rsync의 강점은 바뀐 부분만 전송한다는 거다.

  • cp : 매번 전부 복사
  • rsync : 이미 있는 건 건너뛰고, 바뀐 것만 전송

그래서 큰 폴더를 반복 백업할 때 훨씬 빠르다. 처음엔 다 보내지만, 두 번째부터는 변경분만 가서 순식간이다. 앞서 배운 증분 백업과 비슷한 원리다.

 

기본 형식

rsync [옵션] source dest
rsync -azvh /xfs root@로키:/bk
       ↑     ↑원본  ↑목적지

source(원본) → dest(목적지) 순서는 앞서 배운 그대로다.

 

자주 쓰는 옵션

rsync -azvh /xfs s1:/bk
-a archive. 권한·소유자·시간 등 속성 보존하며 복사 (가장 중요)
-z 전송 시 압축 (네트워크 절약)
-v verbose. 진행 상황 표시
-h human-readable. 크기를 읽기 좋게(KB/MB)

 

-avz가 백업 기본 세트다. 이거만 알면 웬만한 백업은 된다.

 

유용한 추가 옵션

-P 진행률 표시 + 중단된 전송 이어받기
--delete 원본에서 지운 파일을 목적지에서도 삭제 (완전 동기화)
-n dry-run. 실제로 안 하고 뭐가 될지 미리보기
-e ssh SSH로 전송 (원격 백업 시)

 

 

실습 

 


4. 로그 관리 

rsyslogd란

시스템 로그를 수집·분류·저장하는 데몬(서비스)이다. 시스템에서 일어나는 온갖 일(로그인, 에러, 커널 메시지 등)을 받아서, 규칙에 따라 알맞은 파일에 저장한다.

  • rsyslogd : 로그를 처리하는 프로그램(데몬)
  • /etc/rsyslog.conf : 그 데몬이 따르는 규칙을 적은 설정 파일
# 1. 설정 파일 편집
vi /etc/rsyslog.conf

# 2. 규칙 추가 (주변 형식에 맞춰)
#    local0.notice action(type="omfile" file="/var/log/local0.log")

# 3. rsyslog 재시작 (필수!)
systemctl restart rsyslog

# 4. 테스트
logger -p local0.notice "test message"
cat /var/log/local0.log

 

 

 

 

 중앙 로그 서버 구축 실습

Rocky(클라이언트)의 로그를 우분투(서버)로 전송하는 구성

# ===== Rocky10 (클라이언트) =====
vi /etc/rsyslog.conf
#   추가: local0.notice    @u1
systemctl restart rsyslog

# ===== Ubuntu (서버) =====
vi /etc/rsyslog.d/50-default.conf
#   추가: local0.notice    /var/log/local0.log

vi /etc/rsyslog.conf
#   주석해제: module(load="imudp")
#            input(type="imudp" port="514")
systemctl restart rsyslog

테스트 확인 결과

 

 

journald 로그를 영구 저장하도록 설정하는 실습

 

# 1. 영구 저장 폴더 생성 (완료됨)
mkdir -m 2775 /var/log/journal

# 2. 권한 설정 (완료됨)
chown root:systemd-journal /var/log/journal

# 3. 서비스 재시작 (이름 정확히!)
systemctl restart systemd-journald
728x90