SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

Linux·서버·스토리지 운영

Linux 파일·프로세스·서비스·권한과 서버 자원, 파일시스템·스토리지·RAID 운영 기초를 학습한다.

예상 읽기 9

1. Linux 시스템 구성

Linux 계열 시스템은 하드웨어 위에서 커널이 자원을 관리하고, 셸과 시스템 도구가 사용자·프로그램의 요청을 전달한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
사용자·응용프로그램
        │
        ▼
  셸·라이브러리·유틸리티
        │ 시스템콜
        ▼
      커널
┌────────┼────────┬─────────┐
│프로세스│메모리  │파일·I/O │네트워크
└────────┴────────┴─────────┘
        │
        ▼
      하드웨어
  • 커널: CPU, 메모리, 파일, 장치, 네트워크 자원 관리
  • 셸: 명령을 해석하고 프로그램 실행
  • 유틸리티: 파일·프로세스·네트워크·관리 도구
  • 데몬: 백그라운드에서 서비스 제공
  • 시스템콜: 사용자 프로그램이 커널 기능을 요청하는 인터페이스

2. 파일시스템과 inode

Linux 파일시스템은 루트(/)를 기준으로 계층 구조를 가진다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
/
├─ etc      설정 파일
├─ var      로그·가변 데이터
├─ home     사용자 홈
├─ usr      프로그램·라이브러리
├─ tmp      임시 파일
├─ dev      장치 파일
├─ proc     프로세스·커널 가상 정보
└─ boot     부팅 관련 파일

inode는 파일의 소유자, 권한, 크기, 시간, 데이터 블록 위치 등의 메타데이터를 저장한다. 파일 이름은 디렉터리 엔트리가 inode 번호와 연결한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
디렉터리 엔트리
"report.txt" ─► inode 1204 ─► 데이터 블록들
                   ├─ 소유자
                   ├─ 권한
                   ├─ 크기
                   └─ 시간 정보

하드링크는 같은 inode를 가리키고, 심볼릭 링크는 다른 경로명을 담는 별도 파일이다.

3. 파일·디렉터리 기본 명령

BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
pwd                         # 현재 경로
ls -al                      # 숨김 파일·상세 정보
cd /var/log                 # 디렉터리 이동
cp source target            # 복사
mv old new                  # 이동·이름 변경
rm file                     # 파일 삭제
mkdir -p app/data           # 중간 경로 포함 생성
find /var/log -name "*.log" # 파일 탐색
grep -R "ERROR" /var/log/app

삭제 명령은 휴지통을 거치지 않을 수 있으므로 경로와 와일드카드를 확인한다.

4. 파일 권한

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
-rwxr-x---
 │││ │││ │││
 │││ │││ └── others
 │││ └────── group
 │└───────── owner
 └────────── 파일 종류
  • r=4: 읽기
  • w=2: 쓰기
  • x=1: 실행 또는 디렉터리 진입
BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
chmod 750 deploy.sh
chown appuser:appgroup deploy.sh

디렉터리에서 권한 의미는 파일과 다르다.

권한디렉터리에서의 의미
r내부 이름 목록 조회
w파일 생성·삭제·이름 변경
x디렉터리 통과·진입

특수권한에는 setuid, setgid, sticky bit가 있다. 공유 임시 디렉터리에서는 sticky bit로 다른 사용자의 파일 삭제를 제한할 수 있다.

5. 프로세스와 서비스

BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
ps -ef
top
pgrep -a java
kill -TERM 1234
kill -KILL 1234        # 정상 종료가 불가능할 때 최후 수단

일반적인 종료 순서:

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
정상 종료 요청(SIGTERM)
      ↓
애플리케이션 정리·연결 종료·상태 저장
      ↓
제한시간 내 종료 확인
      └─ 실패 시 원인 분석 후 강제 종료 검토

서비스 관리 예:

BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
systemctl status nginx
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl enable nginx
journalctl -u nginx --since "1 hour ago"

무조건 재시작하기 전에 로그, 포트, 자원, 의존 서비스, 최근 변경을 확인해야 한다.

6. CPU·메모리·디스크 점검

자원대표 확인해석 포인트
CPUtop, uptime, mpstat사용자·시스템·I/O 대기, load average
메모리free -h, vmstat사용량, 캐시, swap, paging
디스크 용량df -h, du -sh파일시스템 사용률과 큰 디렉터리
디스크 I/Oiostat지연, 큐, 사용률
네트워크ss, ip, ping포트, 주소, 연결, 손실

Linux의 남는 메모리는 파일 캐시로 활용될 수 있으므로 단순 used 값만 보고 메모리 부족을 단정하지 않는다. swap 사용, 페이지 교환, 응답 지연, OOM 로그를 함께 본다.

7. 파일시스템 용량 문제

df는 파일시스템 블록 사용량을, du는 특정 경로에서 보이는 파일 크기를 합산한다. 두 값이 크게 다르면 다음을 점검한다.

  • 삭제되었지만 프로세스가 계속 열고 있는 파일
  • 마운트된 경로 아래 숨겨진 파일
  • 예약 블록
  • sparse 파일
  • inode 고갈
BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
df -h
df -i
du -xsh /var/* | sort -h
lsof +L1

파일 개수가 매우 많으면 용량이 남아도 inode가 소진되어 새 파일을 만들지 못할 수 있다.

8. 디스크·볼륨·파일시스템 계층

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
물리 디스크
   ↓
파티션 또는 RAID
   ↓
논리 볼륨
   ↓
파일시스템
   ↓
마운트 지점
   ↓
애플리케이션 파일

확장 시 어느 계층의 용량을 늘렸는지 확인해야 한다. 디스크만 늘리고 파일시스템을 확장하지 않으면 애플리케이션에서 공간을 사용할 수 없다.

9. RAID 기초

수준구성장점주의
RAID 0스트라이핑성능·용량장애 허용 없음
RAID 1미러링단순한 복제사용 가능 용량 감소
RAID 5분산 패리티 1개용량 효율쓰기 패널티, 2개 장애에 취약
RAID 6분산 패리티 2개2개 디스크 장애 허용계산·쓰기 비용
RAID 10미러링+스트라이핑성능·복구 균형디스크 수·비용 증가

RAID는 가용성을 높이지만 백업이 아니다. 실수로 삭제하거나 랜섬웨어가 데이터를 변경하면 RAID 복제본에도 반영된다.

10. 서버 운영 점검 순서

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
증상 확인
  ↓
최근 변경·배포 확인
  ↓
서비스 상태·프로세스·포트
  ↓
CPU·메모리·디스크·네트워크
  ↓
애플리케이션·시스템 로그
  ↓
의존 서비스·DB·외부 API
  ↓
원인 가설 검증
  ↓
조치·검증·기록

한 번에 여러 설정을 바꾸면 원인과 효과를 구분하기 어렵다. 변경 전 상태와 명령 결과를 기록한다.

11. Linux 권한과 umask 계산

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
기본 최대권한: 파일 666, 디렉터리 777
최종권한 = 기본 최대권한에서 umask 비트를 제거

예를 들어 umask가 027이면 일반 파일은 640, 디렉터리는 750이 된다. chmod 4750 app의 앞자리 4는 setuid다. setuid·setgid·sticky bit는 일반 rwx와 분리해 해석한다.

BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
find /srv/app -type f -perm -0002     # 모든 사용자 쓰기 가능 파일 탐색
find / -xdev -perm -4000 2>/dev/null  # setuid 파일 탐색

12. inode·링크·삭제 상태

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
디렉터리 항목: 이름 → inode
hard link A ─┐
hard link B ─┴→ 같은 inode → 데이터 블록
symbolic link → 경로 문자열 → 다른 이름 탐색

열려 있는 파일을 삭제하면 디렉터리 이름은 사라져도 프로세스가 파일 기술자를 닫을 때까지 블록이 유지될 수 있다. dfdu 차이가 크면 lsof +L1로 삭제됐지만 열린 파일을 찾는다.

13. 프로세스·서비스 상태 판독

  • R: 실행 중 또는 실행 가능
  • S: interruptible sleep
  • D: uninterruptible sleep, 주로 I/O 대기
  • Z: 종료됐지만 부모가 회수하지 않은 zombie
  • T: 정지·추적 상태
BASH코드 영역 안에서 좌우로 이동할 수 있습니다.
systemctl status app.service
journalctl -u app.service --since '10 min ago'
ps -eo pid,ppid,state,%cpu,%mem,cmd --sort=-%cpu | head

SIGTERM은 정상 종료 기회를 주고 SIGKILL은 즉시 종료하므로 정리 작업을 수행할 수 없다.

14. RAID·스토리지 계산

n개의 동일 용량 디스크가 있을 때 대표 가용용량은 다음과 같다.

RAID가용용량최소 디스크일반적인 장애 허용
0n×S20
1미러 집합에 따라 보통 S2미러당 1
5(n-1)×S31
6(n-2)×S42
10(n/2)×S4서로 다른 미러 쌍이면 복수 가능

6개×2TB RAID 6의 원시 가용용량은 8TB다. 파일시스템·예약·메타데이터를 적용한 실제 사용 가능량은 더 작다.

15. 병목 진단 순서

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
증상 확인 → CPU(run queue·steal) → 메모리(reclaim·swap)
 → 디스크(latency·IOPS·queue) → 네트워크(loss·retransmit)
 → 프로세스·로그 → 최근 변경

load average는 CPU 사용률과 같지 않으며 실행 가능·일부 I/O 대기 작업을 포함한다. 캐시를 포함한 used만 보고 메모리 부족으로 단정하지 말고 available, swap in/out, major fault를 함께 본다.

확인 문제

  1. umask 027에서 새 일반 파일의 대표 권한은?
  2. 열린 파일을 삭제했는데 df 공간이 즉시 줄지 않을 수 있는 이유는?
  3. D 상태 프로세스는?
  4. 6개 2TB 디스크 RAID 6의 원시 가용용량은?
  5. load average가 CPU 사용률과 같지 않은 이유는?