[에스넷시스템 부트캠프] TIL Day15 - 리눅스 프로세스 모니터링, 장치 인식부터 마운트 디스크 관리

2025. 6. 10. 23:42·TIL
728x90

1. 프로세스 모니터링

1) top

실시간으로 프로세스의 상태나 CPU, 메모리, 접속한 사용자의 수 등을 알 수 있는 명령어이다. 

top            # 전체 보기
top -u 사용자명    # 특정 사용자 프로세스만 보기
top -p PID       # 특정 PID 보기
top -d 1         # 새로고침 간격 1초로 설정

 

확인 포인트 

  • Cpu(s): 96.3% id → CPU 유휴 상태(Idle) 비율
  • Tasks, Mem, Swap 영역에서 프로세스 수와 메모리 상태 확인 가능

top 명령어 수행 결과

💡 버퍼 vs 캐시 
버퍼는 디스크에 쓰기 전 데이터를 일시 저장하는 공간 (메타데이터 중심)
캐시는 디스크에서 읽은 파일을 다시 사용하기 위해 메모리에 저장하는 공간 (실제 데이터 중심)

 

2) 메모리 실사용량 계산

top의 메모리 정보에서 보이는 used는 캐시와 버퍼까지 포함되어 실제 사용량보다 많아 보일 수 있다. 

 

실제 사용 메모리 계산식

real used = total - free - buff/cache

 

❓ 왜 이런 차이가 생길까?

운영체제는 남는 메모리를 캐시/버퍼로 활용하여 성능을 높이기 때문에, used에 포함되지만 실제로는 언제든 회수 가능한 메모리이다. 

 

3) 프로세스 실행 우선권 - nice, renice

리눅스에서는 CPU 자원을 어느 프로세스에 우선적으로 할당할지 nice 값으로 조정할 수 있다.

  • # nice : 프로그램 실행시 프로세스 우선순위 설정
  • # renice [PID] : 실행 중인 프로그램의 우선순위를 조정할 수 있는 명령어

 

nice 값 범위

값 범위 우선순위 설명
-20 가장 높음 중요한 작업
0 기본값 일반 작업
19 가장 낮음 비중요 작업 (ex. 백업)
📌 PRI 값은 변경될 수 있음
프로세스가 새로 생성되면 커널 스케줄러가 동적으로 PRI(Priority)를 조절한다. 신규 프로세스가 우선 배치되며 기존 프로세스의 PRI는 조정된다. 

 

2. 디스크

하드디스크 구조

디스크 타입
장치 파일 이름 예시 특징 및 설명
SCSI 디스크 /dev/sda, /dev/sdb 현재 가장 많이 사용되는 디스크 표준. SATA, SAS, USB 저장장치도 이 방식으로 인식됨
IDE 디스크 /dev/hda, /dev/hdb 예전 PC에서 주로 사용되던 방식. 현재는 거의 사용하지 않음
NVMe 디스크 /dev/nvme0n1, /dev/nvme1n1 고속 SSD 저장장치에서 사용. 이름 형식이 다소 다름 (n = 컨트롤러 번호, 1 = 장치 번호)
가상 디스크 /dev/vda, /dev/vdb 가상 머신(KVM, QEMU 등)에서 사용되는 디스크. 'v'는 virtual의 약자

 

3. 장치인식

1) 장치 인식의 두 가지 상황

리눅스 서버나 가상 환경에서 디스크와 같은 하드웨어 장치를 인식하는 방식에는 부팅 시 인식과 Hot Swap 두가지로 나뉜다. 

  • 부팅시 자동 인식 
    • 시스템이 부팅 또는 재부팅 되는 과정에서 커널이 모든 장치를 자동 탐지하여 /dev 아래에 장치 파일을 생성
    • 일반적인 SSD/HDD, 메모리, CPU 등이 이 방식으로 자동 인식됨
  • Hot Swap
    • 서버나 가상화 환경에서 시스템을 종료하지 않고도 장치를 추가/제거할 수 있는 기능
    • Hot Plug / Plug and Play라고도 부름

 

4. 파티션

1) 파티션이란

파티션은 디스크와 같은 저장 장치를 용도나 목적에 따라 나누는 논리적인 단위이다. 하드디스크처럼 용량이 큰 저장 매체를 효율적으로 관리하고, 운영체제와 데이터의 분리를 위해 꼭 필요한 작업이다. 

 

2) 파티션의 장점

  • 루트 파티션 파괴시 다중 파티션 자료 보호 & 자료 백업 및 업그레이드 수월
  • 다중 운영체제 설치시 다중 파티션 필요
  • 파일 시스템 점검 시간을 줄여 부팅 시간 감소 

 

3) 파티션 종류

종류  설명
주 파티션(Primary) 최대 4개까지 만들 수 있는 기본 파티션. /dev/sda1 ~ /dev/sda4
확장 파티션(Extended) 주 파티션 중 하나를 확장 파티션으로 설정해, 그 안에 논리 파티션을 생성
논리 파티션(Logical) 확장 파티션 안에 만들어지는 파티션. /dev/sda5부터 시작

 

4)  tmpfs

  • tmpfs는 메모리를 디스크처럼 사용하는 임시 파일 시스템
  • 마운트된 디렉토리처럼 보이지만 실제 저장은 RAM(휘발성)에 이루어짐
  • 특징:
    • 전원이 꺼지면 내용이 사라짐
    • 스왑 공간 사용 가능 (→ ramfs와 차이점)
    • 파일 시스템 크기와 inode 제한 설정 가능

 

 

5) fdisk 명령어를 통한 디스크 파티션 구성

fdisk를 이용해 새로운 파티션의 생성, 기존 파티션 삭제, 파티션 타입 결정 등의 작업을 수행할 수 있다. 

fdisk /dev/sdb          # 대상 디스크 선택

# 내부 명령어 요약
n   → 새 파티션 생성  
d   → 파티션 삭제  
t   → 파티션 타입 변경  
p   → 파티션 정보 보기  
w   → 저장 후 종료  
q   → 저장하지 않고 종료

 

fdisk는 한 번에 한 디스크에 대해서만 작업을 수행한다.

디스크 초기화시에는 fdisk로 삭제한 뒤에 # dd if=/dev/zero of=/dev/sdb를 통해 확실하게 비워주는 것이 좋다. 

 

4. 파일 시스템

1) 파일 시스템이란?

파일 시스템은 데이터를 저장하고 관리하는 구조 체계입니다.

  • 디스크를 장착하고 → 파티션을 만든 뒤
  • 그 파티션 안에 파일 시스템을 생성해야
  • 디렉토리 생성, 파일 저장 등의 작업이 가능

📌 즉, 디스크 > 파티션 > 파일 시스템 > 파일/디렉토리 순으로 구성이 이루어집니다.

 

2) 파일 시스템 종류

종류  설명
ext2 초창기 리눅스 파일 시스템, 저널링 기능 없음
ext3 CentOS 5.x 기본, 저널링 기능 추가됨
ext4 CentOS 6.x 이후 기본, ext3 대비 성능 향상
xfs 고성능 64비트 저널링 파일 시스템, CentOS 7 이후 기본 채택

 

3) xfs 파일 시스템의 주요 특징

xfs는 CentOS 7부터 기본으로 사용되는 고성능 파일 시스템이다. 

 

  • 저널링: 시스템 다운 후에도 빠른 복구 가능
  • 빠른 트랜잭션: 읽기/쓰기 속도가 빠르며 성능 저하가 적음
  • 고용량 지원: 최대 100만 TB 크기의 파일도 처리 가능
  • 비동기 I/O 최적화: 병렬 처리에 유리해 고성능 시스템에 적합
  • Delayed Allocation: 실제 쓰기 전에 블록 할당을 지연해 단편화 방지
  • Online Defragmentation: 시스템 동작 중에도 조각 모음 수행 가능

 

 

4) 리눅스 파일 시스템의 구조 - VFS 이해

 

VFS (Virtual File System)

  • 리눅스 커널이 여러 파일 시스템을 통합적으로 관리하기 위해 사용하는 가상 파일 시스템 인터페이스
  • 실제 디스크와는 별개로 커널 내부에서 파일 시스템 기능을 추상화해 제공
  • VFS는 다양한 파일 시스템(ext4, xfs 등)을 동일한 방식으로 처리하도록 중재
  • 커널은 Block Device Driver만 관리하며, 세부 파일 구조는 VFS와 각 파일 시스템이 담당

 

5) 파일 시스템 생성 – mkfs

mkfs 명령은 한 장치를 리눅스 파일 시스템으로 만드는데 사용한다. 성공적으로 끝나면 0, 실패하면 1을 리턴한다.

옵션  설명
-f 기존에 파일 시스템이 있어도 강제로 생성
-K 빠른 포맷 (데이터 블록은 유지, 메타데이터만 초기화)
⚠️ 실수로 중요한 디스크에 포맷하면 복구가 어렵기 때문에 주의해야 한다!!

 

4. 마운트

1) 마운트란?

마운트(mount)는 특정 디스크나 장치를 사용자가 접근할 수 있도록 디렉토리와 연결하는 작업입니다.

  • 예: /dev/sdb1을 /mnt/data에 마운트 → 사용자는 /mnt/data를 통해 접근 가능
  • 마운트된 장치가 사용 중일 경우, 강제로 언마운트할 수 없음
  • 시스템 부팅 시 자동으로 마운트되게 하려면 /etc/fstab 파일에 설정을 추가해야 함

 

2) mount 명령어 

# mount /dev/sdb1 /mnt/data

: 수동 마운트

 

# umount /mnt/data

: 마운트 해제 

 

# mount -a

: /etc/fstab에 정의된 항목 전체 마운트

 

# mount -o noatime

 

Access Time(접근 시간)을 기록하지 않음. 성능 개선

 

# mount -o nosuid
: setuid 및 setgid 비활성화. 보안 강화

 

3) 사용중인 파일 시스템 언마운트

어떤 프로세스가 디스크를 점유하고 있다면 강제로 언마운트할 수 없다.

아래 절차를 통해 점유 중인 프로세스를 확인하고 정리해야 한다.

 

# 1. 사용 중인 유저 확인
fuser -v /mnt/data

# 2. 사용자에게 경고 메시지 전송 (가상 터미널 기준 예시)
echo "디스크 사용 중지 요청" > /dev/pts/1

# 3. 사용자 강제 종료 및 언마운트
fuser -ck /mnt/data ; umount /mnt/data
⚠️fuser -ck는 연결된 프로세스를 강제 종료하므로 주의 필요!! 

 

4) 오버마운트

오버마운트(Over-mount)란, 파일이 존재하는 디렉토리에 다른 파일 시스템을 마운트해서 기존 파일이 보이지 않게 덮어씌워지는 현상이다. 마운트 전에 디렉토리가 비어 있는지 확인하는 습관을 들이자!

예: /home/user에 파일이 존재하는데 /dev/sdb1을 마운트해버리면 해당 파일은 접근 불가

 

 

5) 시스템 마운트 정보 확인

 

  • /proc/mounts: 현재 시스템에서 마운트된 파일 시스템의 실시간 정보
  • /etc/mtab: 마운트 정보 파일이지만, 상황에 따라 실시간 정보가 아닐 수도 있음

 

 

6) 파일 시스템 사용량 확인

# df -h

: 파티션 단위 사용량을 사람이 보기 쉽게(-h) 표시

 

# du -sh /var/log

: 특정 디렉토리(-s)의 총 사용량을 사람이 보기 쉽게(-h) 표시

 

✍️ 하루 회고

장치, 파티션, 파일 시스템, 마운트 개념이 실습 과정에서 한 번에 등장하다 보니 흐름이 복잡하게 느껴졌다. 

또, lsblk, df, du 같은 명령어들이 각각 어디에 쓰이는지 처음엔 헷갈렸지만 반복하면서 어느 정도 감이 잡혔다.

 

장치 → 파티션 → 파일 시스템 → 마운트 → 사용의 흐름을 머릿속에 자연스럽게 그릴 수 있도록 복습이 필요할 것 같다. 

실수 방지를 위해 마운트 전 디렉토리 비어 있는지 확인, fstab 설정시 오타 주의 등 작은 실수가 시스템에 영향을 줄 수 있는 부분인 만큼 주의 사항도 꼼꼼히 숙지하여 반복 복습해야겠다.

728x90

'TIL' 카테고리의 다른 글

[에스넷시스템 부트캠프] TIL Day17 - NTP, DNF  (0) 2025.06.12
[에스넷시스템 부트캠프] TIL Day16 - LVM  (0) 2025.06.12
[에스넷시스템 부트캠프] TIL Day14 - diff, sort, file, 압축과 아카이빙, 프로세스  (0) 2025.06.09
[에스넷시스템 부트캠프] TIL Day13 - EIGRP, OSPF  (0) 2025.06.06
[에스넷시스템 부트캠프] TIL Day12 - RIP, RIPv2  (0) 2025.06.05
'TIL' 카테고리의 다른 글
  • [에스넷시스템 부트캠프] TIL Day17 - NTP, DNF
  • [에스넷시스템 부트캠프] TIL Day16 - LVM
  • [에스넷시스템 부트캠프] TIL Day14 - diff, sort, file, 압축과 아카이빙, 프로세스
  • [에스넷시스템 부트캠프] TIL Day13 - EIGRP, OSPF
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    오늘
    어제
    • 전체 글 (131) N
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • 기타 (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • TIL (24) N
      • Book (39)
        • 자바의 신 (32)
        • 스프링 입문을 위한 자바 객체 지향의 원리와 이해 (7)
      • ETC (4)
        • Blog (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    문제풀이
    C++
    에스넷시스템 부트캠프
    객체지향
    스터디
    EC2
    부트캠프후기
    클라우드 활용 네트워크 엔지니어 부트캠프
    알고리즘
    TiL
    백준
    자바의 신
    자바
    에스넷시스템
    boj
    GodOfJava
    멀티캠퍼스it부트캠프
    1일1백준
    Java
    스프링 입문
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
yulee_to
[에스넷시스템 부트캠프] TIL Day15 - 리눅스 프로세스 모니터링, 장치 인식부터 마운트 디스크 관리
상단으로

티스토리툴바