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) |
| 준비 | 파티션을 먼저 나눠야 함 | 파일만 만들면 됨 |
| 유연성 | 낮음 | 높음 (파티션 안 건드림) |


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'{Bootcamp} > KT Cloud Tech up 클라우드 인프라' 카테고리의 다른 글
| [kt cloud] 리눅스 관리자 실습 (6) (0) | 2026.09.11 |
|---|---|
| [kt cloud] 리눅스 관리자 실습 (5) (0) | 2026.09.10 |
| [KT Cloud] 리눅스 관리자 실습 (3) (0) | 2026.09.08 |
| [KT Cloud] 리눅스 관리자 실습 (2) (0) | 2026.09.07 |
| [KT Cloud] 리눅스 관리자 실습 (1) (0) | 2026.08.28 |