CAB TA 4기 16일차의 기록

Urban Jungle·2025년 4월 2일

CAB TA 4기

목록 보기
16/28

LVM 생성/확장 실습

1. 디스크 확인

lsblk

  • 디스크 이름 확인: /dev/sdb(20G), /dev/sdc(10G), /dev/sdd(10G), /dev/sde(20G)

2. 파티션 생성 (전체 디스크 사용)

각 디스크에 primary 파티션 1개씩 생성 (fdisk, gnw)

fdisk /dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde

이후 시스템 반영

partprobe

3. 물리볼륨(PV) 생성

pvcreate /dev/sdb1 /dev/sdc1

4. 볼륨그룹(VG) 생성 (PE 8M)

vgcreate vg0 /dev/sdb1 /dev/sdc1 -s 8M

5. 논리볼륨(LV) 생성

  • lv01 : 5G (-l 옵션)
  • lv02 : 10G (-L 옵션)
  • lv03 : 5G (-l 옵션)

lvcreate -L 10G -n lv02 vg0
lvcreate -l 640 -n lv01 vg0 # 5G / 8M = 640
lvcreate -l 640 -n lv03 vg0

6. 파일 시스템 생성

mkfs.xfs /dev/vg0/lv02
mkfs.ext4 /dev/vg0/lv03
mkswap /dev/vg0/lv01

7. 수동 마운트 준비 및 마운트

mkdir -p /media/disk{1,2}
mount /dev/vg0/lv02 /media/disk1
mount /dev/mapper/vg0-lv03 /media/disk2
swapon /dev/vg0/lv01

8. 자동 마운트 등록

vim /etc/fstab

추가

/dev/vg0/lv02 /media/disk1 xfs defaults 0 0
/dev/mapper/vg0-lv03 /media/disk2 ext4 defaults 0 0
/dev/vg0/lv01 swap swap defaults 0 0

9. 볼륨 그룹에 디스크 추가

pvcreate /dev/sdd1
vgextend vg0 /dev/sdd1

10. 논리볼륨 확장

  • lv02: +5G 확장

lvextend -L +5G /dev/vg0/lv02
xfs_growfs /media/disk1

  • lv03: 10G로 확장

lvextend -L 10G /dev/vg0/lv03
resize2fs /dev/vg0/lv03

11. 20G 디스크(/dev/sdb1) 제거

  • 예상 에러: 용량 부족
  • 그래서 디스크 하나 더 추가해야 함 (/dev/sde1 사용)

pvcreate /dev/sde1
vgextend vg0 /dev/sde1

데이터 이동

pvmove /dev/sdb1

제거

vgreduce vg0 /dev/sdb1

12. 확인

lsblk
df -Th
lvs
vgs
pvs
swapon -s

핵심

  • PE 계산: 1GB = 1024MB → PE: 8M → 1G = 128 PE
  • resize2fs, xfs_growfs: LV 확장 후 FS 확장 필수
  • pvmove 전: 반드시 충분한 빈 공간 확보
  • swap은 fstabswap 타입 명시해야 자동 마운트됨

systemd

systemd 유닛(Unit)이란?

  • systemd에서 관리하는 서비스 단위 (ex: sshd.service, multi-user.target 등)

유닛 상태 확인

systemctl: 현재 활성 유닛 목록
systemctl -a: 모든 유닛 (비활성 포함)
systemctl -t 서비스유형: 특정 유닛만 확인 (예: -t service)

예시

systemctl -t service
systemctl list-units --type=service

유닛 파일 상태 확인

systemctl list-unit-files

enabled: 부팅 시 자동 실행
disabled: 부팅 시 실행 안 됨
static: 직접 실행 X, 다른 유닛에 의해 실행
masked: 강제 비활성화 (링크를 /dev/null로)
generated: 시스템이 자동 생성한 임시 유닛 (재부팅하면 사라질 수 있음)

유닛 제어 명령어

systemctl sub-command unit

status: 현재 상태 확인
start: 서비스 시작 (일시적)
stop: 서비스 중지
restart: 재시작
reload: 설정 재적용 (프로세스 유지)
enable: 부팅 시 자동 실행 설정
disable: 부팅 시 자동 실행 해제
mask: 실행 자체를 차단
unmask: 마스크 해제
list-dependencies: 의존 유닛 목록 확인

서비스 등록과 자동 실행 설정

방법 1

systemctl start xxxx.service # 지금 실행
systemctl enable xxxx.service # 다음 부팅 때 실행

방법 2 (한 번에 실행 + 등록)

systemctl enable xxxx.service --now

실무에 자주 쓰는 명령

systemctl status sshd
systemctl restart network
systemctl mask bluetooth.service
systemctl list-units --type=service
systemctl list-unit-files | grep enabled

systemd 유닛 관련 주요 디렉토리 3개

  1. /etc/systemd/system/
    → 커스터마이징 유닛, override 설정
    → 이곳에 있으면 항상 우선 적용됨

  2. /run/systemd/system/
    → 일시적인 유닛 설정이 생성됨 (재부팅하면 사라짐)

  3. /usr/lib/systemd/system/
    → 서비스가 설치되면 기본 유닛 파일이 여기에 저장됨
    → 시스템 업데이트로 변경될 수 있음

실무 팁

  • sshd 서비스 유닛 파일 위치 확인
    systemctl status sshd

  • override 설정 만들기 (수정하려면 etc에 덮어쓰기)
    systemctl edit sshd

  • 이 명령을 사용하면 /etc/systemd/system/sshd.service.d/override.conf 파일이 생성되어 override 됨


systemd 실습

1. 서비스 즉시 중지 + 부팅 시 비활성화

systemctl disable sshd --now

  • --now: 현재 상태 중지
  • disable: 부팅 시 실행되지 않음
  • status 확인 시 → inactive (dead)

2. 서비스 시작

systemctl start sshd
systemctl status sshd

  • statusactive (running) 이 뜸
  • PID 확인 가능

3. 서비스 부팅 시 자동 시작 설정

systemctl enable sshd

  • /etc/systemd/system/multi-user.target.wants/에 심볼릭 링크 생성됨

4. 서비스 중지

systemctl stop sshd

  • status: inactive

5. 비활성화

systemctl disable sshd

  • enable된 자동 시작도 제거

6. 서비스 잠금 (mask)

systemctl mask sshd

  • sshd.service/dev/null에 링크됨
  • 절대 실행 불가
  • start 시도해도 아래와 같은 에러 발생
    Failed to start sshd.service: Unit is masked.

7. 잠금 해제

systemctl unmask sshd

8. 서비스 시작 + PID 확인

systemctl start sshd
systemctl status sshd

  • Main PID: XXXX 확인

9. 서비스 리로드

systemctl reload sshd
systemctl status sshd

  • reload: 설정만 다시 읽음
  • PID: 변하지 않음

10. 서비스 재시작

systemctl restart sshd

  • PID: 변경됨
  • 즉, stopstart 효과 = 프로세스 재생성

핵심 정리

명령어			설명 					PID 변화
start:		 서비스 시작					새로 생성
stop:		 서비스 중지					PID 제거
reload:	    설정 재적용 (무중단)			  유지
restart:	중단 후 재시작				  변경
enable:	    부팅 자동 실행 등록			  유지
disable:	자동 실행 해제				  유지
mask:		서비스 완전 차단 (/dev/null)	  유지
unmask:		차단 해제					  유지

활용 팁

  • 현재 실행 여부만 확인
    systemctl is-active sshd

  • 부팅 자동 여부 확인
    systemctl is-enabled sshd

  • 서비스에 의존하는 다른 유닛 확인
    systemctl list-dependencies sshd


로그 시스템 개요

구성요소					역할					저장 위치
systemd-journald	  로그 수집			/run/log/journal (비영구)
rsyslogd			  로그 저장			/var/log/* (영구)
  • systemd-journald는 RAM 기반이 기본이며, /var/log/journal/로 옮겨야 영구 저장

주요 로그 파일

/var/log/messages: 대부분의 시스템 로그 (보안, 메일, 부팅, 디버그 등 제외)
/var/log/secure: 인증 관련 (로그인, su, sudo 등)
/var/log/maillog: 메일 관련 로그
/var/log/cron: crontab, at 등의 예약 작업
/var/log/boot.log: 부팅 관련 로그

rsyslog 포맷

logger -p facility.priority "메시지"

예시

logger -p authpriv.info "사용자 로그인 테스트"

facility 예

authpriv, auth, cron, daemon, mail, user, kern, local0~7

priority 예

  • 0: emerg
  • 1: alert
  • 2: critical
  • 3: error
  • 4: warning
  • 5: notice
  • 6: info
  • 7: debug

실시간 로그 확인

tail -f /var/log/messages
tail -f /var/log/secure

journalctl 사용법 요약

journalctl: 전체 로그 출력
journalctl -n 50: 최근 50줄
journalctl -f: 실시간 로그 출력
journalctl -p err: error 이상만 보기
journalctl --since yesterday: 어제부터 지금까지
journalctl --since 2024-03-28 --until 2024-03-29: 특정 기간 보기

  • notice ~ warning: 노란색
  • err 이상: 빨간색

journal 로그 영구 저장 설정

mv /run/log/journal /var/log/
systemctl restart systemd-journald

  • 이 후부터는 journalctl이 재부팅 후에도 로그 유지 가능

보충: 저장 용량 제한 설정 (/etc/systemd/journald.conf)

SystemMaxUse=100M
SystemKeepFree=50M

변경 후

systemctl restart systemd-journald

실전 팁

  • 문제 발생 시 가장 먼저 볼 파일은?
    /var/log/messages + /var/log/secure

  • logger 명령어는?
    ➤ 임의 로그를 남기고 로그 설정 확인 시 매우 유용

  • systemctl restart rsyslog vs systemd-journald의 차이?
    ➤ 전자는 로그 저장 데몬 재시작, 후자는 로그 수집 서비스 재시작


log 실습

1. rsyslog.conf 수정

vim /etc/rsyslog.conf

아래 한 줄 추가 (위치: #### RULES #### 아래)

cron.err /var/log/cron1

  • 의미: facility=cron 이고 priority ≥ err인 로그를 /var/log/cron1에 따로 저장

2. 설정 반영

systemctl restart rsyslog

  • rsyslog는 수동으로 재시작해야 설정 적용됨

3. 테스트용 로그 메시지 전송

logger -p cron.info "cronlog1"
logger -p cron.crit "cronlog2"

4. 결과 확인

tail -2 /var/log/cron

-> 출력

... cronlog1
... cronlog2


tail -2 /var/log/cron1

-> 출력

... cronlog2

  • cronlog1: info/var/log/cron에는 남지만, /var/log/cron1에는 안 감
  • cronlog2: crit/var/log/cron/var/log/cron1 둘 다 기록

5. journald 로그 영구 저장 설정

mv /run/log/journal /var/log/
systemctl restart systemd-journald

  • /var/log/journal 디렉토리가 존재하면 systemd-journald는 로그를 RAM이 아닌 디스크에 저장하게 됨
    즉, 재부팅해도 로그가 유지됨

추가 팁

  • 로그 확인
    journalctl -u rsyslog

  • 영구 저장 여부 확인
    journalctl --disk-usage

실무 팁

  • 여러 레벨을 동시에 기록하려면?
    cron.err;cron.crit /var/log/cronX

  • 특정 사용자 로그를 따로 관리하려면 user.* facility 사용


부팅 단계 요약

BIOS/UEFI: 부트 장치 로딩
GRUB2: 커널 선택 화면 (grub.cfg 참고)
Kernel: 커널 로드, initramfs 실행
systemd: default.target 실행

systemd 타겟 관리

현재 기본 타겟 확인

systemctl get-default

기본 타겟 설정

systemctl set-default multi-user.target # CLI (텍스트 모드)
systemctl set-default graphical.target # GUI (X윈도우)

즉시 타겟 전환

systemctl isolate multi-user.target
systemctl isolate graphical.target

  • 부팅은 안 하고 바로 런레벨 바꾸는 것과 같음

GRUB 설정 파일 (/etc/default/grub)

GRUB_TIMEOUT=5: 부팅 대기 시간 (초)
GRUB_DEFAULT=saved: 이전 커널 기억
GRUB_DISABLE_SUBMENU=true: 서브메뉴 사용 안 함
GRUB_CMDLINE_LINUX: 커널 부팅 파라미터 지정
GRUB_TERMINAL_OUTPUT="console": 출력 장치 설정
GRUB_DISABLE_RECOVERY=true: 복구 모드 숨김

설정 적용

grub2-mkconfig -o /boot/grub2/grub.cfg

루트 비밀번호 재설정 (구급 모드)

  1. 부팅 시 GRUB 화면에서 아무 키

  2. rescue 또는 기본 커널에 e → 편집 모드

  3. linux 줄 끝에 rd.break 추가

  4. Ctrl + X → 구급 쉘 진입

  5. 루트 마운트 및 chroot
    mount -o remount,rw /sysroot
    chroot /sysroot
    passwd
    touch /.autorelabel
    exit
    exit

부트로더 비밀번호 설정 (grub2)

vi /etc/grub.d/00_header

맨 아래에 추가

cat << EOF
set superusers="admin"
password admin 1234
EOF

변경 반영

grub2-mkconfig -o /boot/grub2/grub.cfg

실습 루틴 정리

# 1. 타겟 확인
systemctl get-default

# 2. 타겟 변경
systemctl set-default multi-user.target

# 3. GUI 모드로 전환
systemctl isolate graphical.target

# 4. GRUB 부트 시간 변경
vim /etc/default/grub
GRUB_TIMEOUT=3
:wq
grub2-mkconfig -o /boot/grub2/grub.cfg

실전 팁

GRUB에서 멈춤: e 눌러 rd.break로 진입
GUI 부팅 안 됨: systemctl get-defaultgraphical.target 확인
GRUB 비밀번호 설정 오류: grub.cfg 권한 또는 superusers 오타 확인


profile
똑똑해지고 싶은 공학도

3개의 댓글

comment-user-thumbnail
2025년 4월 2일

데브반에서 감찰 나왔습니다

2개의 답글