이번 문서의 목표: 이 파일을 다 읽으면 새 디스크를 파일시스템으로 포맷하고 마운트해서 재부팅 후에도 자동으로 연결되게 설정할 수 있고, df·du·fsck 명령의 출력을 정확히 해석할 수 있다.
왜 “파일시스템”이라는 개념이 따로 필요한가
하드디스크나 SSD 같은 저장장치는 그 자체로는 그냥 자기(磁氣) 신호나 전기 신호가 저장된 커다란 저장 공간일 뿐이다. “어느 위치부터 어느 위치까지가 하나의 파일이다”, “이 파일의 이름은 무엇이다”, “이 디렉터리 안에는 어떤 파일들이 있다” 같은 정보를 어떤 형식으로 저장할지 정해 두지 않으면, 운영체제는 그 저장장치에서 아무것도 읽어낼 수 없다.
파일시스템(filesystem)은 이 “저장 형식의 약속”이다. 09편에서 다룬 /etc, /var 같은 디렉터리 구조가 “논리적으로 어떻게 정리할 것인가”를 정한 것이라면, 파일시스템은 그보다 한 단계 아래에서 “디스크의 물리적인 저장 공간에 파일과 디렉터리 정보를 실제로 어떤 형식으로 써넣을 것인가”를 정한다.
쉽게 말하면: 파일시스템은 디스크라는 백지 위에 “여기부터 여기까지 한 페이지, 페이지 번호는 이런 식으로 매긴다”처럼 규칙을 정해 두는 것이다. 그 규칙이 있어야 나중에 다시 찾아 읽을 수 있다.
파일시스템의 종류: ext4와 xfs
리눅스에서 만들어진 파일시스템은 여러 세대를 거쳐 발전해 왔다. 시험에서 실제로 자주 등장하는 두 가지를 중심으로 정리한다.
| 파일시스템 | 특징 |
|---|---|
ext4 | 리눅스의 표준 파일시스템 계보(ext2 → ext3 → ext4)의 4세대. 저널링(journaling) 기능을 갖춰 안정적이며, 데스크톱과 범용 서버에서 널리 쓰인다 |
xfs | 대용량 파일과 대규모 파일시스템 처리에 강점이 있는 파일시스템. RHEL·CentOS 최신 버전의 기본 파일시스템으로 채택되었다 |
btrfs | 스냅숏(특정 시점 상태를 그대로 저장), 데이터 무결성 검사 등 고급 기능을 갖춘 차세대 파일시스템 |
여기서 저널링(journaling)이라는 용어를 짚고 넘어가야 한다. 저널링은 파일시스템에 어떤 변경을 가하기 전에, “지금부터 이런 작업을 하겠다”는 계획을 저널(journal, 일지)이라는 별도 영역에 먼저 기록해 두는 방식이다. 만약 정전이나 시스템 다운으로 작업이 중간에 끊기더라도, 재부팅 시 이 저널을 읽고 “어디까지 진행되었는지”를 파악해 미완성 작업을 정리할 수 있다. 저널링이 없던 옛 파일시스템(ext2 등)은 비정상 종료 시 디스크 전체를 처음부터 끝까지 검사해야 했지만, 저널링 파일시스템은 저널만 확인하면 되므로 복구 시간이 훨씬 짧다.
새 파티션을 특정 파일시스템 형식으로 만드는 것을 포맷(format) 또는 mkfs(make filesystem)라 부른다. 명령어는 파일시스템 종류에 따라 다음처럼 쓴다.
# /dev/sdb1을 ext4로 포맷
mkfs.ext4 /dev/sdb1
# 또는 -t 옵션으로 파일시스템 종류를 지정
mkfs -t ext4 /dev/sdb1
# /dev/sdb1을 xfs로 포맷
mkfs.xfs /dev/sdb1mkfs -t ext4와 mkfs.ext4는 결과가 같다. mkfs는 뒤에 -t 옵션으로 파일시스템 종류를 받는 방식과, mkfs.종류처럼 아예 실행 파일 이름 자체에 종류를 붙여 호출하는 방식 두 가지를 모두 지원하기 때문이다. reference 기출에서 “mke2fs -j /dev/sdb1”처럼 옵션만 있고 파일시스템 종류가 빠진 명령이나, “mke2fs.ext4”처럼 존재하지 않는 형식의 명령을 오답으로 섞는 경우가 있으니, mkfs.종류 또는 mkfs -t 종류 형식만 유효하다는 점을 정확히 기억해야 한다.
마운트: 파일시스템을 트리에 연결하기
포맷을 마친 파일시스템은 아직 사용할 수 없다. 09편에서 설명했듯 리눅스는 /라는 하나의 트리 구조만 쓰기 때문에, 새 파일시스템을 이 트리의 어느 지점에 “끼워 넣는” 작업이 필요하다. 이 작업을 마운트(mount)라 하고, 끼워 넣는 지점이 되는 디렉터리를 마운트 포인트(mount point)라 부른다.
쉽게 말하면: 마운트는 새 책장(파일시스템)을 도서관(디렉터리 트리)의 특정 칸(마운트 포인트)에 끼워 넣어, 그 칸을 열면 새 책장 내용이 보이게 만드는 작업이다.
mount 명령의 기본 형식
# 형식: mount [옵션] 장치 마운트포인트
mount /dev/sdb1 /backup이 명령을 실행하면, /dev/sdb1이라는 파티션의 내용이 이제 /backup 디렉터리 안에서 보이게 된다. 주의할 점은 마운트하기 전 /backup 디렉터리가 이미 존재해야 한다는 것이다(mkdir로 미리 만들어 둔다). 또한 이미 파일이 들어 있던 디렉터리를 마운트 포인트로 쓰면, 마운트되어 있는 동안에는 그 안의 기존 파일이 가려져 보이지 않게 된다(디스크에서 삭제되는 것은 아니다).
마운트를 해제할 때는 umount를 쓴다. 철자에 주의해야 한다 — “un-mount”가 아니라 u-mount다.
umount /backup
# 또는 장치 이름으로 지정해도 된다
umount /dev/sdb1umount가 “장치가 사용 중입니다(device is busy)“라는 오류로 실패하는 경우가 자주 나온다. 이는 그 마운트 포인트 아래 어딘가에 현재 작업 디렉터리를 두고 있는 셸이 있거나, 그 안의 파일을 열어 둔 프로세스가 있을 때 발생한다. 이럴 때는 해당 디렉터리에서 빠져나오거나, 그 파일을 사용 중인 프로세스를 먼저 종료해야 한다.
/etc/fstab — 부팅할 때 자동으로 마운트하기
mount 명령으로 마운트한 파일시스템은 재부팅하면 그 연결이 사라진다. 매번 부팅할 때마다 손으로 mount 명령을 입력해야 한다면 번거롭다. 그래서 “부팅 시 자동으로 마운트할 목록”을 미리 적어 두는 파일이 /etc/fstab이다. fstab은 “filesystem table(파일시스템 표)“의 줄임말이다.
/etc/fstab의 한 줄은 공백으로 구분된 6개의 필드로 이루어진다.
UUID=abcd-1234 /home ext4 defaults 1 2| 순서 | 필드명 | 의미 |
|---|---|---|
| 1 | 장치(device) | 마운트할 파티션. /dev/sdb1처럼 장치 이름을 직접 쓰거나, 디스크 순서가 바뀌어도 안전하게 식별되는 UUID= 형식을 쓴다 |
| 2 | 마운트 포인트(mount point) | 이 파일시스템을 연결할 디렉터리 경로 |
| 3 | 파일시스템 종류(type) | ext4, xfs, swap 등 |
| 4 | 마운트 옵션(options) | defaults(기본 옵션 묶음), ro(읽기 전용), noexec(실행 금지) 등을 쉼표로 나열 |
| 5 | dump 여부 | dump라는 백업 도구의 대상 여부. 1이면 백업 대상, 0이면 대상 아님(대부분 0으로 둔다) |
| 6 | fsck 검사 순서(pass) | 부팅 시 fsck로 검사할 순서. 0은 검사 안 함, 1은 가장 먼저(루트 파일시스템 전용), 2는 그다음 순서 |
여섯 번째 필드가 reference 자료에서 특히 자주 오답 함정으로 등장한다. 0은 검사하지 않음, 1은 루트 파일시스템처럼 가장 먼저 검사, 2는 그 외 파일시스템을 그다음 순서로 검사한다는 뜻이다. 이를 “숫자가 클수록 더 여러 번 백업한다”거나 “마운트 옵션의 우선순위”라거나 “재시도 횟수”로 잘못 서술하는 오답이 반복 출제된다. 6번째 필드는 오직 fsck 검사 순서만을 의미하며, 5번째 필드(dump)와 헷갈리지 않아야 한다.
새 디스크를 마운트하는 전체 절차
reference 모의고사에서 “새 디스크를 포맷해서 자동 마운트까지 설정하라”는 절차형 문제가 나온다. 순서는 다음과 같다.
- 파티션 준비:
fdisk또는parted로 디스크에 파티션을 만든다 (2급 1차는 이 절차 자체보다 다음 단계들이 더 중요하다). - 포맷:
mkfs.ext4 /dev/sdc1처럼 원하는 파일시스템으로 포맷한다. - 임시 마운트로 확인:
mkdir /backup후mount /dev/sdc1 /backup으로 정상 마운트되는지 확인한다. - /etc/fstab에 등록: 재부팅 후에도 자동 마운트되도록 fstab에 한 줄을 추가한다.
- 검증:
mount -a명령으로 fstab에 오타가 없는지 재부팅 없이 미리 확인한다.
여기서 순서가 뒤바뀐 오답, 예를 들어 “/etc/fstab에 먼저 등록한 뒤 포맷한다”거나 “mount 후 mkfs.ext4를 실행한다”(마운트할 대상이 아직 파일시스템 형식조차 없는데 마운트부터 시도) 같은 선택지가 함정으로 나온다. 포맷이 항상 마운트보다 먼저라는 순서를 기억해야 한다.
df와 du — 용량을 확인하는 두 명령의 차이
df와 du는 이름이 비슷해 혼동하기 쉽지만 확인하는 대상의 단위가 완전히 다르다.
쉽게 말하면:
df(disk free)는 “파일시스템 전체가 얼마나 찼는가”를 보고,du(disk usage)는 “특정 디렉터리 하나가 얼마나 차지하는가”를 본다.
df — 마운트된 파일시스템 전체의 사용량
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 32G 18G 64% /
/dev/sdb1 100G 10G 90G 10% /backup-h(human-readable): 바이트 단위 숫자를 사람이 읽기 쉬운 K, M, G 단위로 바꿔 보여 준다.Use%열이 64퍼센트면, 그 파일시스템 전체 용량 중 64퍼센트가 이미 사용되었다는 뜻이다.Mounted on열은 그 파일시스템이 현재 트리의 어느 지점에 연결되어 있는지를 보여 준다. 위 예시에서/dev/sda1은 루트(/)에,/dev/sdb1은/backup에 마운트된 상태다.
df -i 옵션을 쓰면 용량이 아니라 inode(파일 하나하나에 대한 메타데이터를 저장하는 자료구조 — 파일 이름을 제외한 소유자·권한·크기·저장 위치 등을 담는다) 사용 현황을 보여 준다. 디스크 용량은 남아 있는데 “더 이상 파일을 만들 수 없다”는 오류가 나는 드문 경우가 있는데, 이는 inode를 모두 소진했기 때문이다. inode 개수는 파일시스템을 만들 때 미리 정해지므로, 작은 파일을 수백만 개 만들면 용량은 남아도 inode가 먼저 바닥날 수 있다.
du — 디렉터리·파일 단위의 실제 사용량
$ du -sh /home/work
850M /home/work-s(summarize): 하위 디렉터리를 낱낱이 나열하지 않고 지정한 디렉터리의 합계만 한 줄로 보여 준다.-h:df와 마찬가지로 사람이 읽기 쉬운 단위로 표시.--max-depth=1: 하위 디렉터리별 합계는 보여주되, 그 안의 개별 파일까지는 나열하지 않고 딱 한 단계 깊이까지만 펼쳐 보여 준다.-s(0단계, 합계만)와-a(모든 파일까지 전부 나열)의 중간 지점이다.
df와 du의 결과가 서로 다르게 느껴지는 경우가 있다. 예를 들어 큰 파일을 삭제했는데도 df상의 여유 공간이 늘어나지 않는 경우가 있는데, 이는 그 파일을 아직 사용 중인 프로세스가 있어 실제 디스크 공간이 아직 반환되지 않았기 때문이다(파일은 삭제 표시만 되고, 그 파일을 열고 있던 프로세스가 완전히 종료되어야 공간이 실제로 회수된다).
fsck — 파일시스템 검사와 복구
fsck(file system check)는 파일시스템 내부의 구조적 오류(예: 어느 파일에도 연결되지 않은 데이터 블록, 잘못된 inode 정보)를 검사하고 가능하면 복구하는 명령이다. 정전이나 강제 종료 후 파일시스템이 비정상 상태로 남았을 때 주로 사용한다.
# 파일시스템 종류를 -t로 지정
fsck -t ext4 /dev/sdb1
# ext 계열 전용 명령을 직접 호출해도 된다
fsck.ext4 /dev/sdb1
e2fsck /dev/sdb1여기서 시험에 자주 나오는 함정이 하나 있다. mke2fs -t ext4 /dev/sdb1은 검사 명령이 아니라 포맷(생성) 명령이다. fsck, fsck.ext4, e2fsck는 모두 이미 있는 파일시스템을 “검사·복구”하는 명령이지만, mke2fs는 파일시스템을 “새로 만드는” 명령이라는 점에서 목적 자체가 다르다. “다음 중 검사·복구 명령이 아닌 것은?”이라는 형태의 문제에서 mke2fs 계열이 정답(즉, 검사 명령이 아닌 것)으로 섞여 나온다.
중요한 주의사항: fsck는 원칙적으로 마운트되지 않은 상태의 파일시스템에 실행해야 한다. 마운트된 채로 검사·복구를 시도하면, 그 순간에도 다른 프로세스가 파일시스템을 계속 변경하고 있으므로 검사 결과가 부정확해지거나 파일시스템이 손상될 위험이 있다. 루트 파일시스템처럼 마운트를 해제할 수 없는 경우에는 부팅 과정 중 자동으로 검사가 이루어지거나, 복구 모드로 부팅해 검사한다.
직접 해보기(선택)
이 편은 읽는 것만으로 시험 대비가 됩니다. 아래는 실제로 해 보면 이해가 깊어지는 선택 과정이고, 컨테이너로는 안 되므로 00편의 가상 머신이 필요합니다.
04편 실습에서 만든 /dev/sdb1 파티션에 실제로 파일시스템을 만들고 마운트·검사까지 전체 절차를 손으로 밟아 봅니다.
mkfs.ext4 /dev/sdb1
mkdir /backup
mount /dev/sdb1 /backup
df -h
umount /backup
fsck -t ext4 /dev/sdb1무엇을 보아야 하나: df -h 출력의 Mounted on 열에 /backup이 나타나는지, fsck가 “마운트되지 않은 상태”에서 오류 없이 검사를 마치는지 봅니다. umount 전에 fsck를 먼저 실행해 보면 어떤 메시지가 나오는지도 비교해 보세요.
왜 이걸 해보나: 90편 절차형 문제의 함정은 “포맷 → 마운트” 순서를 뒤바꾸는 것과,
fsck를 마운트된 채로 실행해도 된다고 착각하는 것입니다. 직접 순서를 밟아 보면mount전에 파일시스템이 없으면 오류가 나고, 마운트된 채로fsck를 돌리면 경고가 뜨는 것을 눈으로 확인할 수 있습니다.
이어서 /etc/fstab의 6개 필드를 실제 파일에서 확인합니다.
cat /etc/fstab무엇을 보아야 하나: 한 줄이 공백으로 6칸 나뉘어 있는지, 6번째 필드(fsck 검사 순서)가 루트 파일시스템 줄은 1, 나머지는 2나 0인지 확인합니다.
왜 이걸 해보나: 6번째 필드를 “재시도 횟수”나 “백업 우선순위”로 잘못 외우는 함정이 반복 출제됩니다. 실제 파일에서 숫자를 눈으로 보면 5번째(dump)와 6번째(fsck 순서) 필드가 헷갈리지 않습니다.
자주 틀리는 점
reference 기출·모의고사를 분석하면 이 단원은 크게 세 가지 함정이 반복된다.
- df와 du의 대상 혼동. “현재 마운트된 디스크 전체 사용량을 확인하는 명령”에는
df가, “특정 디렉터리 하나의 실제 사용량을 확인하는 명령”에는du가 답이다. 둘 다 이름에 “disk”가 들어가 헷갈리지만,df는 파일시스템 단위,du는 디렉터리·파일 단위라는 점으로 구분한다. - fstab 6번째 필드(fsck 순서)를 dump 주기나 마운트 옵션 우선순위로 잘못 서술. 6번째 필드는 오직 부팅 시 fsck 검사 순서(0=검사 안 함, 1=최우선, 2=그다음)만을 의미한다.
- mkfs 계열과 fsck 계열 명령의 목적 혼동.
mkfs·mke2fs는 “새로 만들기(포맷)”,fsck·e2fsck는 “검사·복구”로 목적이 정반대다. 이름이 비슷한mke2fs와e2fsck를 문제 지문에서 슬쩍 바꿔치기하는 함정이 자주 나온다.
핵심 정리
- 파일시스템은 디스크에 파일과 디렉터리 정보를 저장하는 형식의 약속이며,
ext4·xfs가 리눅스에서 널리 쓰인다. - 마운트는 파일시스템을 디렉터리 트리의 한 지점(마운트 포인트)에 연결하는 작업이고,
/etc/fstab에 등록해야 재부팅 후에도 자동으로 연결된다. /etc/fstab의 6개 필드는 장치·마운트 포인트·파일시스템 종류·옵션·dump 여부·fsck 검사 순서다.df는 파일시스템 전체 사용량을,du는 디렉터리·파일 단위 사용량을 보여 준다.fsck는 파일시스템을 검사·복구하는 명령이며, 원칙적으로 마운트 해제 상태에서 실행해야 한다.