파일 시스템
이란, 보조 기억 장치의 정보를 파일 및 디렉터리의 형태로 저장하고 관리할 수 있도록 하는 운영체제 내부 프로그램파일
과 디렉터리
가 보조기억장치에 어떻게 저장될 수 있는지 이해해야 한다.파일
은 파일의 이름, 파일을 실행하기 위한 정보, 파일과 관련한 부가 정보로 구성되어 있다.속성
혹은 메타데이터
라고 부른다.
파일의 형싣
, 위치
, 크기
등 이 포함된다.파일
을 다루는 모든 작업은 운영체제에 의해서 이뤄진다.
시스템 콜
을 이용해야 한다.파일 디스크립터
(윈도우는 파일 핸들
) 정보를 사용합니다.파일 디스크립터 관련 글
- 정리가 잘되어 있는 포스팅이 있어, 연관 링크를 통해 소개 드립니다.
파일 디스크립터는 파일만 식별하지 않는다. 파일 디스크립터는, 파일 뿐만 아니라, 입출력 장치, 파이프, 소켓 또한 식별합니다.
번호 용도 C/C++ 매크로 0 표준 입력 STDIN_FILENO
1 표준 출력 STDOUT_FILENO
2 표준 에러 출력 STDERR_FILENO
3↑ 파일, 소켓 등 (사용자가 open 등으로 얻는 디스크립터)
리눅스 기준으로 설명됩니다.
디렉터리
를 이용합니다.
폴더
라고 부릅니다.루트 디렉터리
라고 한다.
슬래시(/)
로 표현bin
폴더와 pi
폴더는, /bin
, /home/pi
로 표현할 수 있다.경로
라고 한다.파일과 디렉터리를 별개인가?
- 그렇지 않고, 디렉터리를 조금 특별한
파일
로 간주합니다.- 데럭터리에 속한 요소의 관련 정보가 테이블의 형태로 표현되고, 테이블 형태로 표현된 정보의 행 하나 하나를
디렉터리 엔트리
라고 한다.- 디렉터리 엔트리에는
파일의 이름
과파일이 저장된 위치
를 유추할 수 있는 정보가 반드시 포함되어 있어야 한다.
블록
이라는 단위로 읽고 쓴다.4096바이트
정도이다.연결 할당
, 색인 할당
등이 있다.색인 블록
이라는 특별한 블록에 모아 관리하는 할당 방식이다.파티셔닝
- 하나의 보조기억 장치 내에는 다양한 종류의 파일 시스템이 사용될 수 있다.
- 그렇게 되려면 보조기억장치 내에 파일 시스템을 적용할 영역이 구분되어야 한다.
- 이때, 영역을 구획하는 작업을
파티셔닝
이라고 한다.
포매팅
은, 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업 흔히 말하는 포멧 작업
각 운영체제별로 지원하는 파일 시스템의 종류는 정말 다양하다. 대표적으로 아래와 같은 종류가 있다.
- 윈도우 : NT 파일 시스템(NTFS), Resilient File System(ReFS)
- 리눅스 : EXT, EXT2, EXT3, EXT4, XFS, ZFS 등
- 맥OS : APFS
아이노드
라는 색인 블록을 기반으로 파일을 할당합니다.아이노드
를 가지고 있다.아이노드
는, 파일이 저장된 위치와 속성 등 사실상 파일의 모든 것이 담겨 있다. (파일의 이름 제외)ls -li
명령어를 통해 확인할 수 있다.ubuntu@ip-10-0-1-85:~$ ls -li
total 8
263266 drwxr-xr-x 7 root root 4096 Jul 3 00:32 server
262601 drwxr-xr-x 2 999 ubuntu 4096 Jul 3 00:32 slowlogs
EXT4
파일 시스템을 통해, 아이노드 기반 파일 시스템의 구성을 살펴보자.EXT4
파일 시스템EXT4
는 아이노드 기반의 색인 할당 방식으로, 위에 소개한 것 처럼, 블록으로 나눠 구성한다.슈퍼 블록
, 그룹 식별자
, 블록 비트맵
, 아이노드 비트맵
, 아이노드 테이블
, 데이터 블록
으로 구성되어있다.블록 하나에는 하나의 파일만 들어가나요?
- 정확하게는 블록의 데이터 블록에는 하나의 파일의 일부만 저장되게 됩니다.
- 쪼개진 데이터는 아이노드 테이블의 블록 포인터 정보를 통해 확인할 수 있다.
하드 링크 파일
: 원본 파일과 같은 아이노드를 공유하는 파일심볼릭 링크 파일
: 원본 파일을 가르키는 파일$ mount -t ext4 -o ro /dev/sda /mnt/test
# /dev/sda 장치에 있는, EXT4 파일 시스템을, 읽기 전용으로(-o ro) /mnt/test 디렉토리에 마운트 해라
윈도우의 마운트(드라이브 연결) 방식 **윈도우에서는 "드라이브 문자(C:, D:, E: ...)"**가 마운트 지점(Mount Point) 역할을 한다. USB나 새 하드디스크, 파티션 등 저장장치를 연결하면 자동으로 드라이브 문자가 할당되고, 바로 접근 가능해진다. 예: USB 연결 → "E:", 외장하드 연결 → "F:" 이 과정을 윈도우에서는 **"자동 마운트(Automount)"**라고 부른다.
리눅스/유닉스 | 윈도우 | |
---|---|---|
마운트 방식 | 원하는 디렉토리(예: /mnt, /media)에 수동 또는 자동 마운트 | 드라이브 문자(C:, D:)로 자동 마운트 |
자동 마운트 | 기본적으로 수동, 일부 상황(USB 등)은 자동 | 거의 모든 경우 자동 마운트 |
마운트 포인트 | 폴더(디렉토리) | 드라이브 문자 |