2025. 9. 12. 16:24ㆍ백엔드/리눅스
파티션
/proc/partitions
→ 파티션 상태 정보 확인 가능
주 파티션, 확장 파티션, 논리 파티션, 스왑 파티션 이 있다.
→ 주 파티션은 부팅이 가능한 기본 파티션이며, 최대 4개까지 분할 가능함
→ 파티션이 4개 이상이 필요한 경우 4개중 1개를 확장 파티션 (1~4번) 으로 설정하여 운용
→ 주 파티션을 4개 이상 생성하여야 확장 파티션 사용 가능
* 참고: 확장파티션 자체는 데이터 저장 불가
→ 확장 파티션 안에 여러 개의 논리 파티션 (5번 이후의 번호) 을 분할하여 데이터 저장
→ 확장 파티션은 물리적 디스크 1개당 단 1개만 생성할 수 있음 (저장X, 논리 파티션 생성용도)
→ 논리파티션은 확장파티션 안에서 만들어지는 실제 사용 가능한 파티션이며
개수 제한은 사실상 없음 (Windows에서는 D:, E:, F:… 식)
→ 스왑 파티션의 ID번호는 82, LVM은 8e , RAID는 fd 이다.
* ID번호 ? MBR(Master Boot Record) 파티션 테이블에서 각 파티션의 타입(Type)
→ 스왑 영역의 반대개념으로 RAM Drive (=RAM Disk 가 있다.)
디스크와 장치
형식
/dev/hd a 3
| sd | SCSI 또는 usb |
| hd | IDE 또는 ATA |
| a | 마스터 |
| b | 슬레이브 |
디바이스명
→ 파티션 생성 후 마운트 시 지정
Master: 케이블에 연결된 첫 번째 장치 (우선 순위가 높은 장치)
Slave: 케이블에 연결된 두 번째 장치 (보조 장치)
| Primary Master | 1번 포트, 첫 번째 장치 | 보통 부팅 디스크로 사용 |
| Primary Slave | 1번 포트, 두 번째 장치 | 보조 디스크 |
| Secondary Master | 2번 포트, 첫 번째 장치 | CD-ROM 드라이브 등에 사용 |
| Secondary Slave | 2번 포트, 두 번째 장치 | 추가 HDD 등 |
→ Master/Slave는 단순히 주소(위치) 구분 역할일 뿐이며, 성능 등 다른 차이는 없다.
| 디바이스 종류 | 디바이스명 | |
| 플로피 디스크 | 첫 번째 | /dev/fd0 |
| 두 번째 | /dev/fd1 | |
| SCSI 디스크 | 첫 번째 | /dev/sda |
| 두 번째 | /dev/sdb | |
| CD-ROM | SCSI CD-ROM | /dev/scd0 |
| /dev/sr0 | ||
| IDE 디스크 | Primary - Master | /dev/hda |
| Primary - Slave | /dev/hdb | |
| Secondary - Master | /dev/hdc | |
| Secondary - Slave | /dev/hdd | |
| XT 디스크 | 첫 번째 | /dev/xda |
| 두 번째 | /dev/xdb |
파티션과 디스크 예시로 이해하기
연결 단계 (IDE 구조)
Primary Master: HDD1 (운영체제 설치용)
Primary Slave: HDD2 (데이터 저장용)
Secondary Master: CD-ROM
…..
파티션 단계 (HDD1 내부 구조)
주파티션1: C: (운영체제 설치)
주파티션2: D: (추가 데이터)
확장파티션: 나머지 공간
→ 논리파티션1: E: (문서 저장)
→ 논리파티션2: F: (멀티미디어 저장)
참고) IDE 연결 구조(Primary/Slave)는 하드웨어 한계점에서 출발한 개념
→ 지금은 SATA, NVMe로 넘어가면서 없어졌음 (이론적으로 참고만 하면 될 듯하다.)
RAID
| RAID 0 | 스트라이핑, 최소2개 이상, 입출력 동시진행 |
| RAID 1 | 미러링 |
| RAID 2 | 스트라이핑, 기록용/복구용 별도, 해밍코드사용, 실무에서 사용되지 않음 |
| RAID 3 | 스트라이핑, 패리티, 디스크최소 3개 이상 필요 패리티 디스크 ( Byte 단위 ) |
| RAID 4 | RAID 3 과 유사 + 2개 이상의 데이터디스크 패리티 디스크 ( Block (섹터) 단위 ) |
| RAID 5 | 스트라이핑, 디스크마다 패리티 정보 가짐(병목현상 ↓), 실무에서 많이 사용 Block (섹터) 단위 저장, 쓰기 작업이 많지 않은 경우 적합 |
| RAID 6 | RAID 5 확장, 듀얼 패리티 → 무정지성 최소 4개 이상의 드라이브 필요 |
| RAID 0+1 | 스트라이핑 후 미러링, 속도빠름, 복구 오래 걸림 |
| RAID 1+0 | 미러링 후 스트라이핑, 손실된 데이터만 빠른 복원 가능 → 운영상 유리 |
부트 매니저
리눅스 부팅 과정
PC Booting
BIOS → MBR (마스터 부트 레코드)
Linux Booting
BOOT Loader (GRUB) → Kernel → Systemd → Login Shell
바이오스 (BIOS)
ROM 에 저장되어 있음. 하드웨어의 상태를 확인함
MBR 에는 Boot Code와 Partition Table에 대한 정보를 가지고 있음.

부트로더 (부트 매니저)
디스크 또는 플래시에 저장된 운영체제를 읽어 주기억장치에 적재해 주는 프로그램
운영체제 실행에 필요한 환경을 설정하고 이미지를 메모리에 복사함
크기가 512 Byte 로, 하드디스크의 첫 번째 섹터인 MBR (마스터 부트 레코드) 에 위치함
→ MBR : 부트 매니저 프로그램과 파티션 정보를 저장함
주 파티션마다 부트 섹터가 할당되며, 분할된 주 파티션들은 자신의 부트 레코드를 MBR에 기록하여 실행된다.
LILO 와 GRUB
→ x86 아키텍처에서 많이 사용되는 부트로더
→ System 전원 공급시 ROM-BIOS 에서 시스템 제어권을 가지고 장착된 HW에 대한 기본적인 점검과 인식을 수행함.
→ ROM BIOS 는 MBR 에 있는 Boot Loader 에게 제어권을 넘김
GRUB
대화형 설정이므로 커널의 경로와 커널 이미지 파일명만 알면 부팅할 수 있다.
부트 정보를 사용자가 임의로 변경해 부팅 가능하다
| GRUB 1 (Legacy) | GRUB 2 | |
| 설정 파일 | /boot/grub/menu.list | /boot/grub2/grub.cfg |
| 파티션 | 파티션 0부터 시작 | 파티션 1부터 시작 |
| root 파티션 지정 | root (hd0,0) → root 파티션 위치 지정 |
set root=(hd0,msdos1) |
| 커널 이미지 설정 | kernel=옵션 | linux=옵션 |
| 환경 설정 파일 | /boot/grub.grub.conf /etc/grub.conf (링크 파일) |
/boot/grub2/grub.cfg (Read-Only) → 최종 실행 파일 /etc/grub2.cfg (링크 파일) |
| 기타 파일 및 명령어 |
kernel/boot/vmlinuz → 커널에 전달할 인수 지정 옵션 initrd/boot/initrd → 이미지 파일의 경로 지정 옵션 |
명령어 grub2-mkconfig → 설정 내용 적용 함 /etc/default/grub → grub.cfg를 생성할 때 반영됨 /etc/grub.d → grub.cfg를 생성할 때 자동 실행되는 스크립트 모음 |
전체 흐름 (GRUB 2 기준)
ⓐ 관리자가 /etc/default/grub 과 /etc/grub.d/* 파일을 수정 및 적용함
ⓑ grub2-mkconfig -o /boot/grub2/grub.cfg 수행
ⓒ /etc/default/grub (사용자 정의 기본 설정 파일) + /etc/grub.d/* (자동 실행 스크립트)
→ 최종 grub.cfg 생성됨
참고 ) /etc/grub2.cfg는 단순 링크 (실제 부팅에 쓰이는 건 /boot/grub2/grub.cfg)
[관리자 편집]
└─ /etc/default/grub ← 기본 설정
└─ /etc/grub.d/* ← 스크립트 (부트 메뉴 항목들)
[자동 생성]
└─ grub2-mkconfig ───▶ /boot/grub2/grub.cfg
↑
└─ /etc/grub2.cfg (심볼릭 링크)
GRUB 2 사용자 정의 기본 설정 파일
[root@localhost /]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$<,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
| GRUB_TIMEOUT | 자동 부팅 시간 설정 (초 단위) |
| GRUB_DISTRIBUTOR | 부팅 화면의 각 엔트리 앞에 명시되는 이름 지정 |
| GRUB_DEFAULT | GRUB 2 의 기본 부트 엔트리 지정 시 사용 |
| GRUB_DSABLE_SUBMENU | 서브 메뉴 사용 여부 설정 |
| GRUBGRUB_TERMINAL_OUTPUT | GRUB 표시 방법을 명시(gfxterm 는 GUI, console) |
| GRUB_CMDLINE_LINUX | 부팅시 커널에 전달할 파라미터 지정 |
| GRUB_DISABLE_RECOVERY | Recovery mode 화면 명시 유무 표시 |
GRUB 2 작업 모드
명령 모드: 초기화면에서 ‘c’
편집 모드: 초기화면에서 ‘e’ , 키로 여러 기능 사용 가능
a (append) → grub.conf 에서 커널과 관련된 매개변수 추가
b (boot) → 선택된 부트메뉴로 부팅
e (edit) → 부트메뉴 명령어 편집
c (command) → 대화식
o , O (open) → 커서 다음, 앞 행에 새로운 행 삽입
d (delete), ESC 등
커널 초기화
커널은 장치 검사 등 기본적인 초기화 과정이 끝나면 프로세스와 스레드를 생성함
→ 커널 프로세스 (스케줄링, 메모리 관리) : [ ] 표시되어 일반 프로세스와 구분됨
→ 커널 프로세스가 생성되면 작업이 마무리되며 system 서비스 동작됨
Systemd
기존 init 스크립트를 대체한 것
/etc/inittab
→ 호환성 때문에 설정파일은 유지하나 systemd를 사용
Linux 시스템의 런레벨 (시스템의 7가지 상태)
→ init은 이 런레벨에 따라 해당하는 셀 스크립트를 실행함
→ init 프로세스가 실행하는 스크립트 파일 위치 ? /etc/rc.d/init.d 디렉터리
→ 런레벨 확인 명령어 runlevel
| 런레벨 | 의미 | 관련 스크립트 |
| 0 | 시스템 종료 | /etc/rc0.d |
| 1, S | 단일 사용자 모드 | /etc/rc1.d |
| 2 | 다중 사용자 모드 (NFS 실행X) | |
| 3 | 다중 사용자 모드 | |
| 4 | 사용하지 않음 (예비 번호) | |
| 5 | X11 상태로 부팅 (GUI) | |
| 6 | 재시작 |
Systemd 서비스와 런레벨
런레벨 관련 파일
/usr/lib/system/system
장점
소켓 기반으로 동작하여 inetd 와 호환성을 유지함
셀과 독립적으로 부팅 가능
마운트와 fsck (복구 용도) 제어가 가능
시스템 상태 스냅숏 유지
SELinux 와의 통합이 가능
→ SELinux : 정책 기반 제어 커널 보안 모듈 (추가적인 보안 레이어)
서비스에 시그널을 전달 가능
셧다운 전 세션의 안전한 종료 가능
Systemd 는 시스템 관리시 ‘유닛(Unit)’ 을 사용함
→ 서비스명.유닛종류 형태로 관리 대상 이름을 사용함
| 유닛 | 기능 | 예 |
| service | 데몬 시작/종료/재시작/로드 | atd.service |
| target | 유닛 그루핑 multi-user.target → 런레벨5 |
basic.target |
| automount | 자동 마운트 포인트 관리 | proc-sys-fs-binfmt_misc.automount |
| device | 장치 트리에 있는 장치 관리 | sys-module-fuse.device |
| mount | 마운트 포인트 관리 | boot.mount |
| path | 경로 관리 | cups.path |
| scope | 외부에서 생성된 프로세스 관리 | init.scope |
| slice | 시스템의 프로세스를 계층적으로 관리함 | system-getty.slice |
| socket | 소켓 관리 유닛 소켓 스트림과 데이터그램, FIFO 지원 |
dbus.socket |
| swap | 스왑 장치 관리 | dev-mapper-fedora\x2dswap.swap |
| timer | 타이머 관련 기능 관리 | dnf-makecache.timer |
Systemd 기반 서비스 제어 명령어
systemctl -a | status | stop | start | restart
런레벨과 target 유닛
→ systemd가 도입되면서 런레벨 개념이 target 단위로 대체됨
| 런레벨 | target 파일 (심볼릭 링크) | target 원본 파일 |
| 0 | runlevel0.target | poweroff.target |
| 1 | runlevel1.target | rescue.target |
| 2 | “ | multi-user.target |
| 3 | “ | |
| 4 | “ | |
| 5 | “ | graphical.target |
| 6 | “ | reboot.target |
target - 런레벨 관련 명령
| 명령 | 설명 | 예 |
| systemctl get-default | 현재 타겟 확인 | 동일 |
| systemctl get-default <타겟>.target |
기본 타겟(레벨) 지정 | systemctl get-default rescue.target systemctl get-default multi-user.target systemctl get-default graphical.target |
| systemctl isolate 런레벨 | 타겟(레벨) 변경 | systemctl isolate rescue 또는 systemctl isolate runlevel1 |
| init , telinit | 런레벨 변경 | init 1 init S |
'백엔드 > 리눅스' 카테고리의 다른 글
| RAID 복구하기 (0) | 2026.06.27 |
|---|---|
| 리눅스 :: 웹 서비스 접속 지연 트러블슈팅 (DNS, curl, DevTools 활용) (0) | 2026.06.22 |
| 리눅스 :: 라이선스 (0) | 2025.09.12 |
| 리눅스 :: 기출문제 (0) | 2025.09.11 |
| 리눅스 :: 활용 기술 (3) | 2025.09.10 |