=> 사용자는 파일을 관리하고 파일 내부에서 각 블록을 관리.
하나의 디스크는 여러 개의 파티션으로 나뉠 수 있다. 각 파티션 내에는 하나의 super 블록, 해당 파티션 내의 모든 inode 블록들을 담고 있는 ilist, 실제 데이터들을 가지고 있는 data 블록들과 디렉토리를 나타내는 directory 블록들이 있다.
super 블록 : 파일 시스템 및 파티션 관련 정보가 들어가며 inode들을 관리하는 블록이기에 그에 대한 내용들을 보관하고 있다. 상세 내용은 아래와 같다.
inode 블록 : Index node의 준말이며 권한, 소유자, 크기 등 파일에 대한 메타데이터와 해당 파일을 구성하는 실제 데이터가 있는 블록들의 위치를 보관한다.
data 블록 : 실제 데이터
Inode 블록 내에 실제 데이터 블록들의 주소부는 크게 direct/indirect 방식으로 나뉘어있는데, direct 방식은 해당 주소를 찾아가면 바로 실제 데이터 블록이 나온다. 반면, indirect 방식은 해당 주소를 찾아가면 실제 데이터 블록의 주소를 가지고 있는 리스트가 나오고, 해당 리스트의 각 요소들이 각각 하나의 실제 데이터 블록을 가리킨다. Double indirect 방식이라면 리스트를 2번 거치고 실제 데이터 블록을 찾아가게 된다.
왜 이렇게 하는가?
파일의 크기가 커짐에 따라 Inode의 실데이터 블록 주소부도 무작정, 무한정 커지게 한다면 파일 크기에 따라 Inode 블록크기가 제각각이 되어 그 관리를 위해 추가적인 데이터를 또다시 필요로 하게 된다. 제한된 크기의 Inode 블록 안에 최대한의 정보를 욱여넣을 때 indirect 방식을 사용한다면 Inode 블록 외부에 연관된 리스트를 만들어 두는 것으로 간단히 해결할 수 있다. 물론, 이것도 무한정 커지는 파일 크기에 대한 완벽한 해결책은 될 수 없기 때문에 모든 파일 시스템은 maximum file size를 가진다. 예를 들어, FAT32구조에서는 파일을 2GB 밑으로 잘라넣으라고 하는 말이 그래서 나오는 말이다.
사용자의 탐색 위치는 디렉토리(폴더) 기반으로 이루어지는데 반해, Super block에도, Inode block에도, Data block에도 어떤 폴더 내에 어떤 파일이 있는 지에 대한 정보는 존재하지 않는다. 그래서 이를 따로 관리하는 녀석이 있는데, 그게 Directory Entry이다.
Dentry에는 파일 이름, inode 포인터, 다른 디렉토리 항목 등이 저장된다. inode와는 다르게 메모리 내에 존재하며 커널에 의해 유지/관리 되므로 directory entry cache라고도 한다.
파일의 내용을 그대로 긁어다가 붙여넣는 복사와는 다르게 파일의 접근 경로를 추가하는 방법을 link라고 한다. linking 파일이 목표 inode에 직접/간접적으로 접근하는가에 따라 2종류로 나뉜다.
Link 파일이 원본 파일이 가리키고 있던 inode를 그대로 가리킨다. 결국 동일한 데이터를 가리키는 것이기에 원본이던 Link이던 한 쪽으로 수정하면 다른 쪽으로 확인해봐도 수정된 데이터가 보인다. 최종 데이터에 접근 할 수 있는 경로 자체가 늘어난 것이므로 원본 파일을 삭제해도 여전히 데이터에 접근 할 수 있다. 백업 등의 용도로 사용된다.
데이터에 대한 접근 경로 자체를 추가하는 Hard link와는 다르게 접근 경로는 여전히 하나이지만, 그 접근 경로로 접근하는 경로를 추가하는 것이 soft link이다. 바로가기 생성을 생각하면 이해가 빠르다. 역시 최종적으로는 같은 데이터에 접근하므로 한 쪽을 수정하면 다른 한 쪽도 수정되지만, 이 경우 원본 파일을 삭제하면 linking file입장에서는 최종 데이터로 갈 수 있는 접근로가 사라진 것이므로 최종 데이터로의 접근이 불가하다. 바로가기 생성 용도로 사용된다.
모든 것을 파일로 다루기에 I/O 디바이스마저 파일로 취급되고 조작이 이루어진다. 이 디바이스 파일을 특수 파일로 취급하며 크게 block device와 character device로 나뉜다.
File Systems: https://web.eecs.utk.edu/~smarz1/courses/cosc361/notes/llfs/
File Systems: https://www.csie.ntu.edu.tw/~pangfeng/System%20Programming/Lecture_Note_2.htm
Linux — File System Deep Dive: https://medium.com/geekculture/linux-file-system-deep-dive-fff99c738187