리눅스 :: 파티션과 디스크, 부트로더

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