본문 바로가기
엔지니어링

파일 시스템 알아보기

by 당나귀🐴 2022. 4. 15.

파일 시스템을 왜 알아보려고 했을까요?

MySQL 아키텍처

MySQL 아키텍처를 보면 하단에 File system(파일 시스템) 으로 표현된 부분이 있습니다.

 

옆에 있는 Files & Logs 와 연결해서 생각해보면, 아래와 같이 해석이 가능합니다.

  • 데이터베이스를 사용할 때 저장되는 데이터는 파일과 로그(Files & Logs) 가 있다.
  • 파일을 저장할 때 사용하는 파일 시스템은 NTFS, ufs, ext12/3, NFS, SAN, NAS 등을 사용할 수 있다.

여기서 파일 시스템은 무엇일까요?

 

단순하게 "파일을 저장하는 방식이 나누어져 있다."로만 생각했었는데 이 포스팅을 통해서 조금만 더 자세하게 생각해보려합니다.

해당 포스팅은 "파일시스템1 파일시스템의 이해" 라는 글과 위키 백과의 파일 시스템을 읽으면서 작성하였습니다.

 

먼저, 파일 시스템을 단순하게 "파일을 저장하는 방식" 으로 본다면 연결해서 생각해야하는게 운영체제 (OS) 입니다.

우리는 주로 컴퓨터를 사용할 때 운영체제와 연결해서 사용하기 때문입니다.

 

이 글을 읽으시는 분들도 윈도우, 맥, 리눅스, 유닉스 중 하나의 운영체제를 통해 글을 읽으시겠죠..?

현대식 운영체제는 여러 개의 파일시스템을 다룰 수 있지만 가장 초기의 운영체제는 각 운영체제 별로 파일시스템을 하나씩만 다룰 수 있었습니다.

 

그 초기의 운영체제를 유닉스(Unix)도스(Dos) 로만 구분하신다면 더 편히 이해하실 수 있을 것입니다.

두 개의 운영체제의 파일 시스템 특징은 아래와 같습니다. 

 

유닉스 파일 시스템 (UFS, Unix File System)

 

추상화한 UFS 를 표현해봤습니다... 모두 / 라는 루트 디렉토리 아래에서 관리되어야합니다.

  • 유닉스 파일 시스템은 하나의 루트 디렉토리가 있습니다.
  • 운영체제에서 접근할 수 있는 파일들은 모두 루트 디렉토리 아래에서 관리됩니다.
  • 예를 들어, 다른 저장 장치가 연결되더라도 루트 디렉토리 아래에 디렉토리가 있어야합니다.
  • 즉, 루트 디렉토리 아래 어떤 경로에 파일들이 있을지 모두 정해져 있어야합니다.
  • 그리고 운영체제는 모든 경로를 알고있어야 합니다.
루트 디렉토리 아래에 디렉토리가 있고 운영체제 해당 경로를 알게되는 것을 "마운트(Mount)" 라고 합니다.

실제 UFS 를 확인해보면 아래와 같습니다. 

유닉스 계열을 다시 3 가지 OS 로 나눌 수 있습니다. (리눅스, 솔라리스, 맥 OS)

3 개의 OS 별로 많이 사용되는 파일 시스템은 아래와 같습니다.

파일 시스템 별로 구체적인 내용은 적지 않겠습니다.

 

리눅스 계열

- 확장 파일 시스템(ext, ext2, ext3, ext4)

- ZFS

- ResierFS

- XFS

 

솔라리스 파일시스템

- ZFS

- UFS

 

맥 OS 파일 시스템

- 2017년 이전 HFS

- 2017년 이후 APFS

 

DOS 기반 파일 시스템 (Microsoft 가 만든 파일 시스템)

- Unix 와 대비대기 위해서 DOS 로 표현하였습니다..

- DOS 라고 말했지만 Microsoft 가 만든 파일 시스템이 더 정확합니다.

 

DOS 기반 파일 시스템의 특징 중 하나는 "드라이브가 가장 앞에 표기되고 관리된다는 것입니다."

- 예를 들어, A 드라이브 아래 Dos 란 폴더가 있다면 ( A:\Dos ) 로 표기합니다.

- 예를 들어, B 드라이브 아래 User 란 폴더가 있다면 ( B:\User ) 로 표기합니다.

- 예를 들어, C 드라이브 아래 Windows 란 폴더가 있다면 ( C:\Windows ) 로 표기합니다.

 

C:\Windows 표기는 익숙하지 않나요?

현대의 Windows PC 에서 많이 사용하는 표기입니다. 과거에 A, B 드라이브는 플로피 디스크로 표기하고 하드디스크(HDD) 부터 C 드라이브로 표기하였습니다.

 

그리고 DOS 기반 파일 시스템은 크게 두 가지 FATNTFS 가 있습니다.

  • FAT
  • NTFS

두 파일시스템의 두드러진 특징은 파일 데이터를 정적으로 관리할 것인지 동적으로 관리할 것인지가 다릅니다.

정적과 동적에 대해서 이해가 되지 않을 수 있는데요. 우선, 파일 데이터는 클러스터라는 단위로 나누어서 저장됩니다.

 

파일 데이터가 전체 10 KB 라고 했을 때, 정적 클러스터가 3KB 라고 한다면 4개의 클러스터가 필요하다

3개의 클러스터는 3 KB 가 들어가고 4번째 클러스터는 1KB 만들어갈 것이다.
4번째 클러스터의 2KB 는 비워있는 상태가 될 것이다.

만약 동적 클러스터로 5KB 로 변경했다고 한다면, 10KB 를 채우기 위해 2 개의 클러스터가 필요할 것이고 저장 공간도 효율적으로 관리될 것이다. 이게 동적 클러스터로 파일을 관리한다는 뜻이다.

FAT 는 정적 클러스터 방식으로 빠릅니다. 그러나, 변경이 잘되지 않는다는 점에서 한 개의 파일 크기가 크게 저장되기 어렵습니다.

ㅇ 예를 들어, FAT의 계열인 FAT32 은 한 개의 파일 최대 크기는 4GB 이다. 이보다 큰 데이터가 들어오면 저장되지 않더라구요.

  

NTFS 는 동적 클러스터 방식으로 데이터 저장이 효율적입니다.

하지만 동적이라는 말은 정적 이외에 다른 로직이 들어갔다는 뜻이겠죠..? 정적인 방식보다 느립니다

ㅇ NTFS 에 저장되는 한개의 파일의 최대 크기는 16TB 이다.

 

여기까지 파일 시스템에 대해서 정리해보도록 하겠습니다.

이제 내가 어떤 피시를 사용하기 위해 내 저장장치 하드 디스크나 USB 메모리가 어떤 파일 시스템으로 설정되어야하는지 이해할 수 있을 것 같습니다.

 

Windows 에서 사용하는 USB 메모리의 파일 시스템 설정입니다. 취사에 맞게 선택할 수 있겠죠..?