파티션 정보를 디스크 어디에 어떤 형식으로 적느냐가 파티션 테이블 방식이고, 크게 둘이다.
항목
MBR (DOS)
GPT
등장
1983 (BIOS 시대)
2000s (UEFI)
최대 디스크 크기
2TB
사실상 무제한(~9.4ZB)
주 파티션 수
최대 4개 (확장+논리로 우회)
128개 (기본)
백업
단일 (디스크 첫 섹터)
주+백업 (앞뒤 이중)
식별
섹터 번호 기반
GUID/UUID 기반
펌웨어
BIOS
UEFI(+호환 BIOS)
MBR의 "주 파티션 4개 제한"은 파티션 테이블 공간이 64바이트(16바이트×4)뿐이기 때문이다. 더 쪼개려면 주 파티션 하나를 확장 파티션(extended) 으로 만들고 그 안에 논리 파티션(logical) 을 여러 개 둔다. 그래서 MBR에서 논리 파티션 번호는 항상 5번부터 시작한다(sda5, sda6…). "MBR에서 5번째 파티션의 정체는?" → 첫 논리 파티션이 정답.
⚠️ 함정: 2TB가 넘는 디스크는 MBR로는 전체를 쓸 수 없다 — 2TB 이후 공간이 주소 표현 범위를 벗어난다. 대용량 디스크는 반드시 GPT여야 한다. 그리고 GPT는 UEFI 펌웨어와 짝을 이루는 게 정석이다.
MBR(Master Boot Record)은 디스크 첫 512바이트에 부트로더 코드 + 파티션 테이블 + 시그니처를 욱여넣은 1983년의 설계다. 40년 전 PC의 제약이 오늘날 "주 파티션 4개" 같은 화석 규칙으로 남았다. GPT는 이 한계를 걷어내며 각 파티션에 고유 GUID를 부여해, 디스크 순서가 바뀌어도 파티션을 안정적으로 식별한다.
fdisk /dev/sdb# 명령 모드에서:# p : 현재 파티션 테이블 출력(print)# n : 새 파티션 생성(new)# d : 파티션 삭제(delete)# t : 파티션 타입(시스템 ID) 변경 — 예: 82=swap, 83=Linux, 8e=LVM# l : 알려진 타입 코드 목록# w : 변경 저장 후 종료(write) — 이걸 눌러야 디스크에 반영# q : 저장 없이 종료(quit)
fdisk에서 w를 누르기 전까지는 디스크에 아무것도 쓰이지 않는다. 모든 편집은 메모리상에서만 일어나고, w가 커밋, q가 롤백이다. 실수했다면 q로 빠져나오면 원상복구된다. 시험에서 "fdisk 변경사항을 디스크에 반영하는 명령은?" → w.
parted는 비대화형으로 한 줄에 끝낼 수 있어 자동화에 유리하다. 예: parted /dev/sdb --script mklabel gpt mkpart primary ext4 0% 100%. 또 parted는 파티션 타입 라벨(mklabel msdos / mklabel gpt)로 MBR/GPT를 선택한다. fdisk가 단위를 섹터·실린더로 다루는 반면 parted는 %나 GB 같은 사람 친화적 단위를 쓴다.
⚠️ 함정: 파티션 타입 코드를 헷갈리지 말 것. 83=Linux 일반, 82=Linux swap, 8e=Linux LVM, fd=Linux RAID autodetect. swap 파티션을 만들 때 타입을 82로 바꾸지 않아도 동작은 하지만, 시스템이 swap임을 자동 인식하는 데 도움을 준다. "LVM용 파티션 타입 코드는?" → 8e.
# 직접 쳐보기 — 파티션 생성 흐름 (실습 디스크에서만!)fdisk /dev/sdb # n→p→번호→크기 지정→wpartprobe /dev/sdb # 커널에 파티션 테이블 재읽기 요청lsblk /dev/sdb # 새 파티션 확인
파티션을 만들었다고 끝이 아니다. 그 안을 특정 파일시스템 구조로 초기화해야 파일을 담을 수 있다. 이게 mkfs(make filesystem)다.
mkfs.ext4 /dev/sdb1 # ext4로 포맷mkfs -t ext4 /dev/sdb1 # 위와 동일 (-t로 타입 지정)mkfs.xfs /dev/sdb1 # xfs로 포맷mkfs.vfat /dev/sdb1 # FAT (USB 등)mke2fs -t ext4 /dev/sdb1 # ext 계열 저수준 도구
mkfs.ext4 file ≡ mkfs -t ext4 file이다. mkfs는 사실상 mkfs.<타입> 도우미를 호출하는 프론트엔드다. 포맷은 inode 테이블·슈퍼블록·블록 그룹을 디스크에 새로 쓰는 작업이므로 기존 데이터를 모두 날린다. 시험에서 "ext4로 포맷하는 명령" 단답으로 묻는다.
mkfs를 마운트된 파티션이나 사용 중인 파티션에 실행하면 큰 사고다. 또 디스크 전체(/dev/sdb)에 포맷하면 파티션 테이블째 날아간다 — 반드시 파티션(/dev/sdb1)을 지정한다. "이미 데이터가 있는 파티션에 mkfs 하면?" → 전부 삭제된다.
# 직접 쳐보기 — 포맷 후 확인mkfs.ext4 /dev/sdb1blkid /dev/sdb1 # 새로 생긴 UUID와 TYPE 확인tune2fs -L data /dev/sdb1 # 볼륨 라벨 부여 (선택)
리눅스에는 윈도우의 "C:", "D:" 같은 드라이브 문자가 없다. 모든 저장 공간은 단 하나의 디렉터리 트리(/) 어딘가에 붙는다.
파일시스템을 특정 디렉터리(마운트 포인트)에 연결하는 게 mount다.
mount /dev/sdb1 /mnt/data # sdb1을 /mnt/data에 마운트mount -t ext4 /dev/sdb1 /mnt/data # 타입 명시mount -o ro /dev/sdb1 /mnt/data # 읽기 전용으로mount # 현재 마운트된 모든 것 출력umount /mnt/data # 마운트 해제 (경로 또는 장치로)umount /dev/sdb1
마운트 포인트로 쓰는 디렉터리에 원래 파일이 있었다면, 마운트하는 동안 그 파일들은 가려져서 보이지 않는다(사라진 게 아니라 덮인 것). umount하면 다시 나타난다. 그래서 마운트 포인트는 빈 디렉터리를 쓰는 게 관례다.
어떤 프로세스가 그 파일시스템 안의 파일을 쓰고 있으면 umount가 "target is busy" 로 거부된다. 누가 쓰는지는 lsof /mnt/data 또는 fuser -m /mnt/data로 찾는다. 정 안 되면 umount -l(lazy, 새 접근 차단 후 마지막 사용 끝나면 해제)을 쓴다. "마운트 중인 파티션 umount 거부 원인은?" → 사용 중인 프로세스 존재.
# 직접 쳐보기 — 마운트 진단mount | grep sdb1 # sdb1이 어디 붙었나findmnt /mnt/data # 마운트 정보 트리 형태로fuser -m /mnt/data # 사용 중인 프로세스 PIDumount /mnt/data
6번째 필드(pass/순서)가 함정이 되기 쉽다. 루트 파일시스템(/)은 1, 그 외 검사할 파일시스템은 2, 검사 안 할 것(swap, 네트워크 FS 등)은 0이다. 1번을 먼저 검사하고 2번들을 병렬로 검사한다. "fstab 6번째 필드에서 루트 파일시스템 값은?" → 1.
1번 필드에 /dev/sdb1 같은 장치명을 쓰면 위험하다. 디스크를 추가/제거하면 커널이 부여하는 이름(sdb → sdc)이 바뀌어 엉뚱한 디스크가 마운트될 수 있다. UUID는 파일시스템에 고정된 고유 식별자라 순서가 바뀌어도 안전하다. blkid로 UUID를 확인해 UUID=... 형태로 적는 게 정석이다.
5번(dump)과 6번(pass)을 헷갈리지 말 것. 5번은 백업 도구 dump용 플래그(거의 0), 6번은 부팅 시 fsck 검사 순서. 또 4번 옵션의 noauto 는 "부팅 시 자동 마운트 안 함, 수동 mount만 허용"이고, defaults 는 rw,suid,dev,exec,auto,nouser,async의 묶음이다.
주요 마운트 옵션:
옵션
의미
defaults
rw, suid, dev, exec, auto, nouser, async 묶음
ro / rw
읽기 전용 / 읽기쓰기
noexec
이 FS의 실행 파일 실행 금지(보안)
nosuid
SUID/SGID 비트 무시(보안)
noauto
부팅 시 자동 마운트 안 함
usrquota,grpquota
디스크 쿼터 활성화 (Day4 연계)
fstab을 잘못 편집하면(존재하지 않는 장치, 오타) 부팅이 emergency mode로 떨어질 수 있다. 그래서 fstab을 고친 뒤에는 재부팅 전에 반드시 mount -a로 검증하는 게 철칙이다. 오류 없이 모두 마운트되면 안전, 에러가 나면 그 줄을 고쳐야 한다.
# 직접 쳐보기 — fstab 작성과 검증blkid /dev/sdb1 # UUID 확보# /etc/fstab에 줄 추가 후:mount -a # fstab 전체를 적용 (오류 검증!)findmnt --verify # fstab 문법/논리 검증systemctl daemon-reload # systemd가 fstab 변경 인식