개요

FFS는 기존의 Simple File System의 한계를 극복하기 위해서 Berkely에서 개발한 파일 시스템이다. FFS는 SFS (Simple FS)와 다르게 디스크에 대한 구조적인 정보를 이용하여 SFS에서 발생하는 파티션된 데이터 구조로 인한 Random Access과정에서 발생하는 디스크 Overhead를 극복하고자 하였다. (하드 디스크에는 잘 작동하지만 Modern SSD나 Ramdisk와 같은 경우에는 필요없기도 하다.)

File system에 실린더 그룹 (블럭 그룹)이라는 Hard Disk의 실린더와 1:1 대응하는 구조를 만들어서, 파일시스템이 여러 block groups들로 접근하도록 하였다. 또한 이러한 각각의 블럭 그룹을 담당하는 group description table이라는 구조를 Superblock뒤에 배치하여, block groups의 몇번 블록에 접근하는지 저장하였다.

(사실, 옜날 윈도우에는 조각 모음이라는 장치가 있었다. 그때는 몰랐지만 조각 모음은 이러한 파편화된 자료 구조를 하나로 합치기 위한 도구 였던 것이다. 또한 조각 모음을 SSD에 쓰지 말라는 것은 이러한 조각 모음이 이점이 없이 SSD 수명만 날리기 때문이었던 것이다!)

원리

  1. 디렉토리의 배치는 inode number의 low number을 사용하였다. 즉 이는 디렉토리 마다 서로 다른 block groups에 배치되도록 하여, 블락 그룹들에 디렉토리들을 균등히 배치하고자 한 것이다.
  2. 아이노드들의 배치를 inode number의 high number을 사용하였다. 즉 이는 연관된 inode들은 같은 block groups에 배치되도록 한 것이다. (물론 이는 Heuristic한 기법으로 다른 기법을 사용할 수도 있다.)
  3. 매우 큰 파일의 경우에는, FFS는 첫 몇몇 블럭만 데이터에 할당하고 그다음 sequential 하게 이어지는 큰 데이터 블럭들을 찾아서 그곳에 배치하도록 하였다. 만약 파일이 여러개의 블럭그룹에 연속적으로 배치되어야 하는 경우에는, FFS는 파일을 여러개의 블럭 그룹에 공평하게 분산시켜서 저장하도록 하였다. 이를 통해서 디스크에서 큰 파일이 최대한 쪼개지지 않고 연속적으로 배치되도록 하였다.