리눅스 파일시스템에 대해 질문해봅니다.

embeddeds0의 이미지

안녕하세요~ 현재 컴공 3학년이구요~ 1학기를 마치고 휴학을 해서 오프라인 스터디에 참여도 하고 공부를 하려고 하는데요.

제가 리눅스 커널 파일시스템 쪽에 관심이 많은데 어떻게 시작해야 할지 갈피를 잡지 못해서 여러분께 물어보고자 이렇게 글을 올리게되었습니다

현재 C언어를 마치고 자료구조를 공부하고 있는데요. 최종적으로는 간단한 FAT 파일시스템을 설계 및 구현을 해보고 싶습니다

jw8704의 이미지

리눅스에서 ls 명령 쳤을때 커널에서 fill_dir (콜백 함수이므로 이름이 고정된건아니지만.. 하여간 현재는 fill_dir 로 정해져있습니다.) 함수가 ls 와 어떤 호출순서도로 이뤄져있는지와

지금은 deprecate 되었지만 ll_rw_block 함수 , 그리고 joinc 에서 ext2 파일시스템 분석을 dump 를 통해서 해석한것.

이렇게 분석하시면 일단 파일시스템 작동에 대해서는 어느정도 감이잡히실테고,, 그외에 이제 성능을 위해 cache 기능 , 그외 저널링기능이있는데 , 일단 처음보실땐 이런거 다제외하고 보시면 도움될듯..

inode,superblock,datablock,blockgroup 이런 용어가 실제로 어떻게 구현되는지 유저레벨에서 ls 를 쳤을때, rm 을 했을때 vi 를 했을때 어떻게 작동하는지 그림을 그려보시면 좋습니다.

또 근본적으로 파일시스템이 왜 존재하여야 하는가? 만약 파일시스템이 없으면 어떻게되는가? 라는 질문을 갖고 한번 접근해보신뒤, 그런 문제점을 해결하기위해 현재의 과학자들이 이런구조를 표준으로 사용하고있다.. 이렇게 생각하시고 공부하시면 괜찮을것같네요..

현재의 파일시스템 개발은 , 무에서 유를 창조한다기보다 fill_dir 을 보시면 아시겠지만.. 이미 어떤 규격은 정해져있습니다. 이 규격을 아예 바꾸려면 VFS 를 거치지않는 파일시스템을 만들어야하죠..

VFS 의 규격은 파일시스템에서 요구되는 거의 모든 연산이 고려된것이므로.. VFS 규격에 맞춰서 fill_dir 을 사용하듯이 코딩해주는건데,, 그과정에서 어떤 알고리즘의 성능을 개선한다거나 저널링정책을 개선한다던가.. 네트워크 기능을 집어넣는다던가.. 분산개념을 도입한다던가.. 하는것같습니다.

rider7979의 이미지

저도 대학원때 리눅스 커널과 파일시스템을 공부했었습니다
예로 리눅스에서 파일 시스템을 구현해보고자 하신다면 먼저 깊지는 않아도 전반적인 리눅스커널의
Overview 정도는 공부를 하셔야 할 것입니다
오렐리 리눅스커널 책을 제일 많이 보는데 그런 책들을 통해서 전반적인 리눅스 커널의 구성등을 먼저 파악하시는게 필요할 것 같습니다. 그리고 거기서 파일시스템에 대해서 inode 구성 등 관련 내용에 대해서 깊이 들어가시는 것이 필요하겠네요
특히 FAT 파일시스템 같은 경우에는 Open 소스들도 많이 있고 도서도 많이 있으니
참고하시면 될 것 입니다.