Linux·서버·스토리지 운영
Linux 파일·프로세스·서비스·권한과 서버 자원, 파일시스템·스토리지·RAID 운영 기초를 학습한다.
1. Linux 시스템 구성
Linux 계열 시스템은 하드웨어 위에서 커널이 자원을 관리하고, 셸과 시스템 도구가 사용자·프로그램의 요청을 전달한다.
사용자·응용프로그램
│
▼
셸·라이브러리·유틸리티
│ 시스템콜
▼
커널
┌────────┼────────┬─────────┐
│프로세스│메모리 │파일·I/O │네트워크
└────────┴────────┴─────────┘
│
▼
하드웨어
- 커널: CPU, 메모리, 파일, 장치, 네트워크 자원 관리
- 셸: 명령을 해석하고 프로그램 실행
- 유틸리티: 파일·프로세스·네트워크·관리 도구
- 데몬: 백그라운드에서 서비스 제공
- 시스템콜: 사용자 프로그램이 커널 기능을 요청하는 인터페이스
2. 파일시스템과 inode
Linux 파일시스템은 루트(/)를 기준으로 계층 구조를 가진다.
/
├─ etc 설정 파일
├─ var 로그·가변 데이터
├─ home 사용자 홈
├─ usr 프로그램·라이브러리
├─ tmp 임시 파일
├─ dev 장치 파일
├─ proc 프로세스·커널 가상 정보
└─ boot 부팅 관련 파일
inode는 파일의 소유자, 권한, 크기, 시간, 데이터 블록 위치 등의 메타데이터를 저장한다. 파일 이름은 디렉터리 엔트리가 inode 번호와 연결한다.
디렉터리 엔트리
"report.txt" ─► inode 1204 ─► 데이터 블록들
├─ 소유자
├─ 권한
├─ 크기
└─ 시간 정보
하드링크는 같은 inode를 가리키고, 심볼릭 링크는 다른 경로명을 담는 별도 파일이다.
3. 파일·디렉터리 기본 명령
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. 파일 권한
-rwxr-x---
│││ │││ │││
│││ │││ └── others
│││ └────── group
│└───────── owner
└────────── 파일 종류
r=4: 읽기w=2: 쓰기x=1: 실행 또는 디렉터리 진입
chmod 750 deploy.sh
chown appuser:appgroup deploy.sh
디렉터리에서 권한 의미는 파일과 다르다.
| 권한 | 디렉터리에서의 의미 |
|---|---|
| r | 내부 이름 목록 조회 |
| w | 파일 생성·삭제·이름 변경 |
| x | 디렉터리 통과·진입 |
특수권한에는 setuid, setgid, sticky bit가 있다. 공유 임시 디렉터리에서는 sticky bit로 다른 사용자의 파일 삭제를 제한할 수 있다.
5. 프로세스와 서비스
ps -ef
top
pgrep -a java
kill -TERM 1234
kill -KILL 1234 # 정상 종료가 불가능할 때 최후 수단
일반적인 종료 순서:
정상 종료 요청(SIGTERM)
↓
애플리케이션 정리·연결 종료·상태 저장
↓
제한시간 내 종료 확인
└─ 실패 시 원인 분석 후 강제 종료 검토
서비스 관리 예:
systemctl status nginx
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl enable nginx
journalctl -u nginx --since "1 hour ago"
무조건 재시작하기 전에 로그, 포트, 자원, 의존 서비스, 최근 변경을 확인해야 한다.
6. CPU·메모리·디스크 점검
| 자원 | 대표 확인 | 해석 포인트 |
|---|---|---|
| CPU | top, uptime, mpstat | 사용자·시스템·I/O 대기, load average |
| 메모리 | free -h, vmstat | 사용량, 캐시, swap, paging |
| 디스크 용량 | df -h, du -sh | 파일시스템 사용률과 큰 디렉터리 |
| 디스크 I/O | iostat | 지연, 큐, 사용률 |
| 네트워크 | ss, ip, ping | 포트, 주소, 연결, 손실 |
Linux의 남는 메모리는 파일 캐시로 활용될 수 있으므로 단순 used 값만 보고 메모리 부족을 단정하지 않는다. swap 사용, 페이지 교환, 응답 지연, OOM 로그를 함께 본다.
7. 파일시스템 용량 문제
df는 파일시스템 블록 사용량을, du는 특정 경로에서 보이는 파일 크기를 합산한다. 두 값이 크게 다르면 다음을 점검한다.
- 삭제되었지만 프로세스가 계속 열고 있는 파일
- 마운트된 경로 아래 숨겨진 파일
- 예약 블록
- sparse 파일
- inode 고갈
df -h
df -i
du -xsh /var/* | sort -h
lsof +L1
파일 개수가 매우 많으면 용량이 남아도 inode가 소진되어 새 파일을 만들지 못할 수 있다.
8. 디스크·볼륨·파일시스템 계층
물리 디스크
↓
파티션 또는 RAID
↓
논리 볼륨
↓
파일시스템
↓
마운트 지점
↓
애플리케이션 파일
확장 시 어느 계층의 용량을 늘렸는지 확인해야 한다. 디스크만 늘리고 파일시스템을 확장하지 않으면 애플리케이션에서 공간을 사용할 수 없다.
9. RAID 기초
| 수준 | 구성 | 장점 | 주의 |
|---|---|---|---|
| RAID 0 | 스트라이핑 | 성능·용량 | 장애 허용 없음 |
| RAID 1 | 미러링 | 단순한 복제 | 사용 가능 용량 감소 |
| RAID 5 | 분산 패리티 1개 | 용량 효율 | 쓰기 패널티, 2개 장애에 취약 |
| RAID 6 | 분산 패리티 2개 | 2개 디스크 장애 허용 | 계산·쓰기 비용 |
| RAID 10 | 미러링+스트라이핑 | 성능·복구 균형 | 디스크 수·비용 증가 |
RAID는 가용성을 높이지만 백업이 아니다. 실수로 삭제하거나 랜섬웨어가 데이터를 변경하면 RAID 복제본에도 반영된다.
10. 서버 운영 점검 순서
증상 확인
↓
최근 변경·배포 확인
↓
서비스 상태·프로세스·포트
↓
CPU·메모리·디스크·네트워크
↓
애플리케이션·시스템 로그
↓
의존 서비스·DB·외부 API
↓
원인 가설 검증
↓
조치·검증·기록
한 번에 여러 설정을 바꾸면 원인과 효과를 구분하기 어렵다. 변경 전 상태와 명령 결과를 기록한다.
11. Linux 권한과 umask 계산
기본 최대권한: 파일 666, 디렉터리 777
최종권한 = 기본 최대권한에서 umask 비트를 제거
예를 들어 umask가 027이면 일반 파일은 640, 디렉터리는 750이 된다. chmod 4750 app의 앞자리 4는 setuid다. setuid·setgid·sticky bit는 일반 rwx와 분리해 해석한다.
find /srv/app -type f -perm -0002 # 모든 사용자 쓰기 가능 파일 탐색
find / -xdev -perm -4000 2>/dev/null # setuid 파일 탐색
12. inode·링크·삭제 상태
디렉터리 항목: 이름 → inode
hard link A ─┐
hard link B ─┴→ 같은 inode → 데이터 블록
symbolic link → 경로 문자열 → 다른 이름 탐색
열려 있는 파일을 삭제하면 디렉터리 이름은 사라져도 프로세스가 파일 기술자를 닫을 때까지 블록이 유지될 수 있다. df와 du 차이가 크면 lsof +L1로 삭제됐지만 열린 파일을 찾는다.
13. 프로세스·서비스 상태 판독
- R: 실행 중 또는 실행 가능
- S: interruptible sleep
- D: uninterruptible sleep, 주로 I/O 대기
- Z: 종료됐지만 부모가 회수하지 않은 zombie
- T: 정지·추적 상태
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 | 가용용량 | 최소 디스크 | 일반적인 장애 허용 |
|---|---|---|---|
| 0 | n×S | 2 | 0 |
| 1 | 미러 집합에 따라 보통 S | 2 | 미러당 1 |
| 5 | (n-1)×S | 3 | 1 |
| 6 | (n-2)×S | 4 | 2 |
| 10 | (n/2)×S | 4 | 서로 다른 미러 쌍이면 복수 가능 |
6개×2TB RAID 6의 원시 가용용량은 8TB다. 파일시스템·예약·메타데이터를 적용한 실제 사용 가능량은 더 작다.
15. 병목 진단 순서
증상 확인 → CPU(run queue·steal) → 메모리(reclaim·swap)
→ 디스크(latency·IOPS·queue) → 네트워크(loss·retransmit)
→ 프로세스·로그 → 최근 변경
load average는 CPU 사용률과 같지 않으며 실행 가능·일부 I/O 대기 작업을 포함한다. 캐시를 포함한 used만 보고 메모리 부족으로 단정하지 말고 available, swap in/out, major fault를 함께 본다.
확인 문제
- umask 027에서 새 일반 파일의 대표 권한은?
- 열린 파일을 삭제했는데 df 공간이 즉시 줄지 않을 수 있는 이유는?
- D 상태 프로세스는?
- 6개 2TB 디스크 RAID 6의 원시 가용용량은?
- load average가 CPU 사용률과 같지 않은 이유는?