서론
근래 서버 설정을 하면서 NAS를 서버에 마운트(Mount) 해야 하는 상황이 생겼다.
마운트를 하며 든 의문점은 '마운트'와 '심볼릭 링크' 사이의 차이점이었다.
둘 모두 특정 파일 혹은 디렉토리를 가리킨다는 점에서 유사하다고 느꼈기 때문이다.
이후 조사를 한 결과, 내가 마운트에 대해 제대로 이해하지 못한 것 같아 이 글을 빌어 정리하고자 한다.
본론
여김 없이 전지전능하신 ChatGPT님께 자문을 구해보았다.
마운트는 파일 시스템이 운영체제에 인식되고 사용할 수 있게 해주는 과정이기 때문에 디스크 파티션, 외부 저장 장치 또는 네트워크로 공유된 파일 시스템 등에서 자주 사용해.
출처 | OpenAI. (2024). ChatGPT (4o Version) [Large language model]. https://chat.openai.com
기본적으로 리눅스의 파일시스템은 커널(Kernel)에 의해 관리된다.
커널은 하드웨어와 소프트웨어 사이를 중개해 주는 역할로, 일종의 추상화 계층이라고 보면 된다. 때문에 하드웨어의 복잡한 세부 구조를 몰라도 다양한 환경에서 동작하는 소프트웨어를 만들 수 있게 된다.
파일 시스템 마운트 과정도 커널이 담당하여, 하드웨어의 세부 구조를 몰라도 접근할 수 있도록 관리한다.
마운트 (Mount)
리눅스 파일 시스템의 근간이 되는 마운트(Mount)이다.
마운트란, 특정 파일 시스템을 현재 운영 중인 디렉토리 구조의 특정 위치에 연결하여 사용자가 접근할 수 있게 하는 작업을 의미한다. 여기서 포인트가 되는 부분은 '특정 파일 시스템'을 '특정 위치(Mount Point)'와 연결한다는 것이다. '특정 파일 시스템'이라 함은 HDD, SSD, USB, NAS 등을 의미한다.
리눅스의 '/' 디렉토리 또한 루트 파일 시스템이 '/' 디렉토리로 마운트 된 결과이다.
현재 어떠한 파일 시스템이 마운트되었는지는 아래 명령어를 통해 확인할 수 있다.
❯ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1s1 813Gi 13Gi 666Gi 2% 411k 4.3G 0% /
devfs 202Ki 202Ki 0Bi 100% 700 0 100% /dev
/dev/disk1s3 813Gi 4.2Gi 666Gi 1% 3.0k 7.0G 0% /System/Volumes/Preboot
/dev/disk1s5 813Gi 3.0Gi 666Gi 1% 3 7.0G 0% /System/Volumes/VM
/dev/disk1s6 813Gi 76Mi 666Gi 1% 805 7.0G 0% /System/Volumes/Update
/dev/disk1s2 813Gi 124Gi 666Gi 16% 1.9M 7.0G 0% /System/Volumes/DataEXT
리눅스의 대표적인 파일 시스템으로, 리눅스의 파일 시스템을 관리하기 위해 만들어졌다.
버전이 발전됨에 따라 EXT2, 3, 4 까지 존재한다.
EXT2 inode
리눅스의 대표적인 파일 시스템인 EXT(Extended File System)는 데이터 관리를 위해 inode라는 개념을 사용한다.
inode는 파일 시스템의 '인덱스 노드'로, 모든 파일과 디렉토리의 메타데이터를 담고 있는 핵심 요소이다. 여기에는 다음과 같은 정보가 포함된다.
- 파일의 소유자 및 접근 권한
- 파일 크기
- 파일이 마지막으로 수정된 시간
- 데이터 블록의 위치 (파일의 실제 데이터가 저장된 위치)

Direct Block는 실제 파일이 저장된 데이터 블록의 주소를 가리키는 포인터 변수로,
각 데이터 블록을 4KB라고 할 때, 12개의 Direct Block으론 최대 48KB의 파일만 가질 수 있다.
때문에 Indirect Block을 사용하는데, 데이터 블록을 가리키는 중계 테이블을 끼는 것이다.
마찬가지로 4KB(4,096Byte)의 테이블은 1,024개의 포인터를 갖게 되므로 4,096KB의 파일을 가질 수 있게 된다.
Single Indirect Block - 1,024 X 4KB = 4MB
Double Indirect Block - 1,024 X 1,024 X 4KB = 4GB
Triple Indirect Block - 1,024 X 1,024 X 1,024 X 4KB = 4TB
이론상 하나의 inode는 48KB + 4MB + 4GB + 4TB로 최대 4TB의 파일을 지원할 수 있으나,
당시 32bit 운영체제의 한계로 인해 실질적으론 최대 4GB의 파일만을 지원하며, 이는 EXT3, 4에서 확장되었다.
EXT2 Superblock (슈퍼블록)
EXT2 파일 시스템에서의 슈퍼 블록은 해당 파일 시스템의 전반적인 메타 정보를 저장하기 위한 블록으로, 파일 시스템의 상태와 구조를 저장하며, 파일 시스템이 마운트 될 때 슈퍼블록에 담겨 있는 메타 정보가 커널에 의해 읽혀 관리된다.
슈퍼블록은 아래와 같은 정보를 포함한다.
- 파일 시스템 크기
- 파일 시스템 상태
- 블록 그룹 정보
- 매직 넘버 (파일 시스템 식별용)
- 유효한 inode 및 블록 수
- 마운트 횟수 및 마지막 검사 정보
- 파일 시스템 이름
VFS (Virtual File System)

리눅스 파일 시스템이 다양한 파일 시스템을 지원하는 비결은 가상 파일 시스템(Virtual File System, VFS) 구조 덕분이다.
VFS는 추상화된 파일 시스템 인터페이스로, EXT와 마찬가지로 inode, superblock으로 구성된다.
리눅스 시스템은 부팅 과정에서 마운트할 파일 시스템 목록들을 불러들은 뒤, 이를 VFS를 통해 실제로 커널에 등록한다. 보다 구체적으론 아래 순서대로 진행된다.
- 커널과 루트 파일 시스템(/) 마운트
- init 프로세스 실행과 파일 시스템(/etc/fstab) 마운트
- 필요한 파일 시스템 드라이버 모듈 로드
- 마운트 된 파일 시스템과 커널의 연결
읽어 들일 파일 시스템 목록은 아래 명령어를 통해 확인할 수 있다.
> cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=1234-5678 / xfs defaults 0 0
UUID=8765-4321 /boot xfs defaults 0 0VFS를 통해 읽어 들일 수 있는 파일 시스템 형식 목록도 조회가 가능하다
> cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev mqueue
xfs
nodev xenfs
nodev binfmt_misc
nodev overlay
squashfs
nodev rpc_pipefs
nodev nfs
nodev nfs4마운트(Mount) VS 심링크(Symlink)
사실 최초 관심사는 이 부분이었는데 굉장히 돌아온 것 같다.
앞서 언급하였듯이, 마운트는 파일 시스템 자체를 커널에 등록하여 루트 파일 시스템에 통합되어 사용할 수 있게 된다.
반면 심볼릭 링크는 해당 파일이나 디렉토리에 대한 참조 포인터를 생성하는 것으로, 단순한 '바로가기'라고 볼 수 있다.
주요 차이점으로는 아래와 같이 정리할 수 있다.
| 구분 | 마운트 (Mount) | 심볼릭 링크 (Symlink) |
|---|---|---|
| 기능 | 파일 시스템을 디렉토리 구조에 통합 | 파일/디렉토리에 대한 참조 포인터 생성 |
| 적용 대상 | 파일 시스템 전체, 장치, 네트워크 파일 시스템 | 개별 파일 또는 디렉토리 |
| 작동 방식 | 운영 체제가 장치를 인식하고 연결 | 가상 경로로 원본 파일을 가리킴 |
| 영향 | 마운트 해제 시 데이터 접근 불가 | 원본 삭제 시 깨진 링크 발생 |
| 성능 | 직접 접근으로 빠름 | 간접 접근으로 다소 느릴 수 있음 |
참고자료

