[yummyHitOS] 23 day (2017.08.09)

6 분 소요

여러분!! 쩌번에 제가 뭐 말씀드린다고 해놓고 말씀 안드린게 있었네여!!!

이번엔 초장에 말씀드려야 안까먹을 것 같아서 미리 말씀드릴게여!!

야미가 강의를 진행해볼까 해여!! 아직은 계획중에 있지만... 조만간 계획을 다 짜면 요기조기 홍보를 해야져!


자 여기까지는 그냥 야미의 소소한 개인생활 소식이었지여!! 오늘은 우리 파일시스템을 구현하는 날이예요!!

크오오... 스게... 여러분 파일시스템 ㅜㅠㅜ 이거 리눅스 입문자라면 얼마나 고생많이하는건지 아시나여?!?ㅜㅠ 외울거리도 많아여... 저널리즘이라는 용어가 파일시스템의 전환점이었는데 엄청나게 중요하다고... 저널리즘 뭔가 그냥 기자분들께 쓰는 용어인 줄 알았는데...

쓸데없는 말은 이제 그만하고 바로 본론으로 슝슝 들어가볼게영 ㅎㅎㅎ


여러분은 윈도우를 처음 써본게 무슨 버젼부터인가여? 저는 윈도우 95부터 써봤었는데, 이 때엔 FAT 파일시스템을 이용했어요. 플로피디스크를 사용했던 시기이죠!


Filesystem

FAT

FAT(File Allocation Table)이란, MS-DOS 시절부터 사용되어지던 파일시스템의 종류예요. 도대체 파일시스템이 뭐길래...!!


File System은 크기가 일정한 블록들의 배열(Sector라고도 불리며 512Bytes, 1KB, 2KB 등의 2의 제곱수 크기를 가져요!!)에 접근할 수 있는 자료 보관 장치 위에 생성되어 이러한 배열들을 이용해서 파일이나 디렉터리를 만들며 어느 부분이 파일이고 어느 부분이 공백인지를 구분하기 위하여 각 배열에 표시를 해둬요. 또한 자료를 '클러스터' 또는 '블록'이라고 불리는 일정한 단위(각 디스크 배열들에 대한 식별할 수 있는 번호를 제공하는 것을 의미하죠!!)에 새겨 넣는데 이것이 바로 파일 하나가 필요로 하는 디스크의 최소 공간이 되어요.



디스크 드라이브에 파티션을 나누면(파티션은 C드라이브, D드라이브, 이동식 디스크 등을 말해요!) 그 파티션 내에 부트섹터부터 슈퍼블록, 각 실린더가 존재하며, 그 실린더 내에 I-node 를 통한 파일 및 디렉터리의 번호가 매겨져 위치를 검색하게 되어있지요!

리눅스를 처음 입문하게 되면 파일시스템 구조에 대해 공부하게 되는데, /(root directory) 내에 boot, var, usr, bin, etc, tmp 등의 디렉터리가 존재하고, 그 내부에 또 각 유틸리티 혹은 디렉터리로 점점 뻗어져 나가는 "트리 구조" 라고 배우게 되지요! 이 트리 구조의 발판이 된 파일시스템이 Ext 랍니다!


Ext

Ext(Extended File System)는 리눅스의 기반이 되는 파일시스템이예요! 위 그림과 같은 파일시스템이 쪼오~금 확장되어서 트리구조를 이루게 되었지요! 각 I-node 를 통해 파일과 디렉터리를 식별하며, 리눅스에서 사용되는 "Permission" 에 큰 기여를 하게 되어요. 그렇다면 리눅스 이전인 유닉스에는 어떤 파일시스템이 사용되었을지 궁금해지지 않나여!? 얼른 FAT 으로 돌아가자구여? 그래도 궁금하잖아여!!


유닉스의 시초인 Multics 는 자체적인 파일시스템을 사용하다가, 1985년 매킨토시에서 발표한 파일시스템인 HFS(Hierarchical File System)를 지원하게 되었어요! 그리고 리눅스의 창시자라고 불리우는 리누스 토발즈가 처음 운영체제를 만든 Minix 는 자체적인 파일시스템인 Minix File System을 계속 이용하였죠!


아직 리눅스와 윈도우의 파일시스템은 시작도 안했는데 벌써부터 파일시스템이 너무 많지 않나여?! ㅜㅠ 하지만 한 번 공부하고나면 더 이상 신경쓰지 않아도 이해되실거예여!!


이제 다시 여러분이 원하시는 FAT 파일시스템으로 넘어갈게요!!



FAT 파일시스템은 처음 2바이트가 F8FFFFFF 로 시작한다고 해요. 루트디렉터리를 위해 예약된 위치라서 만약 HxD 와 같은 헥사에디터로 열어보니 F8FFFFFF 라는 이미지 파일이면 FAT 파일시스템이구나! 할 수 있다는 거 아닐까여? 헤헿 이 후 클러스터들은 위 사진과 같이 되어있어요.


딱히 외우실 필요는 없어요! 윈도우 PE 파일의 첫 시작이 MZ(Mark Zbikowski) 인 것 처럼, 그냥 정해진 포맷이구나~ 싶으면 뙇!! 끝~!


FAT 파일시스템은 FAT12, FAT16, FAT32, exFAT 으로 점차 발전해 나아가는데, FAT 뒤에 붙는 숫자는 비트 수를 의미해요.

그렇다면 FAT12는 12비트만큼의 클러스터를, FAT16은 16비트만큼의 클러스터를 이용할 쑤 있는겁니까!?? 아아아니요오오~!!

갑자기 'PD대정령' 이라는 아프리카TV 게임방송 BJ의 멘탈 털리는 영상이 생각나네옇ㅎㅎㅎㅎ 여기서 아아아아니요오오!! 라고 소리치는 부분이 있거든여 ㅎㅎ 짤로 남겨드릴게영 나중에 한 번 찾아서 보세여! '대정령 멘붕모음' 이라고 치시면 나올거예여!



000h, 001h, FF6h~FFFh 값은 사용하지 않거나 다른 목적으로 예약되어서 빼주셔야해요! 즉 FAT12를 예로들면, 12비트는 2^12 이기 때문에 4,096이 되는데 여기서 12를 빼주시면(000h, 001h, FF6h, FF7h, FF8h, FF9h, FFAh, FFBh, FFCh, FFDh, FFEh, FFFh) 4,084가 되겠죠? 즉, 4,084개의 클러스터를 표현할 수 있게 되는거죠!

그렇게 FAT16은 16비트만큼, FAT32는 32비트만큼 클러스터 개수를 표현하지 않을까여? ㅜㅠㅜ아쉽게도 FAT32는 28비트만큼의 클러스터 개수를 표현해여... 4비트는 이미 예약이 되어있다고 해요. 포맷할 경우에만 잠시 사용되어 진다고 하네요.


뭔가 다 비슷해 보이면서 각자 다르니 참 복짭하네여.. T^T 짜중짜중..


exFAT

그리고 exFAT 파일시스템은 현재에도 NTFS와 같이 널~리널리 쓰이는 파일시스템의 종류로써 Extended FAT 을 의미하는데, FAT64라고도 불리우죠! 오호... FAT64 라고 하니 조금 이해가 되시나여?!

exFAT에서는 새로운 기능으로 비트맵 관리가 추가되는데, 이 기능으로 클러스터를 효율적으로 관리하게 되었고, 이 외에도 많은 기능이 추가되었어요!! 더 자세한 FAT 에 대해서는 위키백갓의 자매 포렌식위키님의 URL을 드릴게여!!

(참고 : http://www.forensicswiki.org/wiki/FAT)


자, 그럼 이제 본격적으로 현재 윈도우에서 사용되는 파일시스템 형식인 NTFS로 넘어가볼까여!?


NTFS

NTFS(New Technology File System)는 윈도우 NT 3.1버전부터 적용된 파일시스템이예요. 윈도우 NT 3.1을 본 적 없으시다구여? 저두 윈도우 95부터 사용해서 본 적은 없네여ㅜㅠ 구할 생각조차 안해봤어여...

윈도우 NT 3.1은 1993년 7월 27일에 등장했다고 하네요.. 아장아장 걸어다닐때 나와꾼 훗.. 어린녀석 이 전까지만해도 16비트 운영체제를 사용중이었는데, NT님이 NTFS 파일시스템과 함께 빠밤! 하면서 32비트까지 같이 가져오셨어요!! 쿠오오 완전 혁명아닌가여 레볼루샨!!

뭐.. 오늘 컴퓨터의 역사를 다루는 주제가 아니기 때문에 윈도우 NT 3.1에 대해서 알고싶으신 분은 우리의 만능 위키백갓님께 찾아가보셔요!

(참고 : https://en.wikipedia.org/wiki/Windows_NT_3.1)


다시 NTFS로 돌아가면, NTFS는 4KB 크기만큼의 클러스터 사이즈부터 최대 64KB 크기의 클러스터 사이즈를 지원해줘요. 64KB라니... 2^64 - 1 만큼의 클러스터 수를 생각하면 엄청나지않나여!? 네? 현대는 64비트 시대니까 당연한거 아니냐구여? 그런데 93년도에 나왔다잖아여!!! 32비트가 겨우 등장하던 그시절에!!

4KB 크기의 클러스터 사이즈라면 NTFS 파일시스템으로 포맷된 볼륨의 최대 크기는 16TB - 4KB예요. 16TB만큼 쓸 일이... 빅데이터와 같은 데이터 센터 외에 필요한 곳 없지 않을까여? ㅎㅎㅎㅎ

그런데 64KB 크기의 클러스터 사이즈라면... 키야 최대 256TB - 64KB 라니.. 제가 94^4 ~ 94^16 까지(ASCII 코드로 33부터 126까지 문자이니 총 94개이고, 비밀번호는 4자리부터 최대 16자리까지 지원하니...) Dictionary File 만들 때 4일동안 컴퓨터 폭발하기 직전까지 돌렸을 때에도 총 900GB에 달했는데... 물논 컴퓨터 터질까봐 중간에 멈췄어여 ㅜㅠ 진행은 10%도 안되었던 걸로 기억해요! 3년 전이라 기억이 가무리가무리해서여...


그래서 NTFS에서 엄청엄청 중요한 기술이 나와여! 바로 저널링(Journaling) 기술이져! Unix/Linux는 93년도에 ext2 파일시스템을 도입하였지만 저널링 기술이 없었어요. 그래서 2001년에 ext3 로 확장하면서 저널링 기술을 도입했는데 윈도우가 그보다 한 발 앞서서 저널링기술을 도입했다는 거예요!! 제가 윈도우를 좋아하진 않지만 이러한 점은 넘나 멋지지 않나여?!


Journaling 기술은 쉽게말하자면 로그를 이용해 복원을 시키는 방법이라고 할 수 있어요. 파일 혹은 디렉터리 등이 변경되었을 때, I-node 값을 통해 파일시스템에 변경사항을 저장하는데, 이 때 오류가 나면 뒤엉키기 마련이겠죠? 그래서 미리 저널이라는 파일시스템이 지정한 원형 로그에 적어두고, 변경사항을 추적해서 조금 더 빠르게 수행할 수 있도록 도와주며, 중간에 Collision이라도 일어나면 적어두었던 로그를 통해 손상을 최소화 시키는 짱짱기술이예요!


오늘 복잡한 역사공부를 하려니 머리아프신가여? 원래아프셨다구여? 역사같지만 역사같지않은 재밌는 사진 몇 장 보고갈게요 :D


Windows history


약간 YummyHitOS 와 비슷해보이지 않나여? 헿 제가 BIOS 색을 좋아해서... 윈도우도 MS-DOS 시절에 BIOS를 사랑했는지 이렇게 만들었더라구여!! 아까 잠깐 등장했던 NTFS의 시초 Windows NT예요!!



그리고 이거슨 저와 함께자란 윈도우 95!! 그림판가지고 노는 정도밖에는 되지 않았지만, 그당시에 컴퓨터 있는게 부자였다나 뭐라나.. 그렇다고 저희집은 절대 부자가 아니었습니다 T^T 이런 슬픈 과거사...



80년생~90년생의 가장 핫한 잇템이예여! 윈도우 98!! 리볼트라는 게임과 스타크래프트를 할 수 있는 컴퓨터!! 스타크래프트 아주 열심히 치트키 써가면서 게임했었는데.. 추억돋네여 ㅜㅠ아련...



윈도우 서버 공부하시는 분들은 대부분 2000 부터 시작하실거예요. 2000, 2003, 2008, 2012, 2016 이 대표적인 윈도우 서버이니까요! 저는 아까 말씀드렸다시피 윈도우를 좋아하지 않아서... 윈도우 서버도 좋아하지 않아여... 우리나라 tmax의 jeus, webtob 라거나.. 해외 apache의 tomcat, apache 라거나... oracle의 weblogic, http-server와 같은 유닉스/리눅스는 사랑입니다... :P



제가 윈도우 98 쓰다가 ME로 넘어갔을 때 게임도 안되고 되게 불편해서 다시 98로 다운그레이드 했던적이 있어옇ㅎㅎ 야미의 학창시절은 게임과 함께 했으니깐여!



그리고 아까 말씀드린 윈도우 서버의 대표작중 하나인 2003 서버예여!



마지막으로 윈도우의 최고 걸작이라고 찬사를 받은 윈도우 XP!! 초기 설치시 3GB의 시스템만 차지하면서 정말 효율적으로 모든 것을 할 수 있었던 최고의 윈도우라고 칭할만하져! 서비스 중단을 선포했을 때 기업들이 얼마나 돈을 쏟아부었는지.. 빌게이츠님의 돈방석... 부럽...


아까 저널링 기술에서 잠깐 모습을 비추었던 ext 시리즈와 저널링, JFS, ReiserFS, XFS 등의 파일시스템은 리눅스마스터와 같은 자격증 공부를 하시면 외우기 싫어도 외우게 되실거예여... RAID-0 스트리퍼와 RAID-1 미러에 parity bit를 넣어서 ECC를 하는 RAID-3 ... 막 이런거 하기싫어도 기억나게 만들거예여 ㅜㅠㅜ 전 컴퓨터 공부에 입문한게 리눅스마스터로부터 시작되었거든여!!


이제 책을 한 번 볼까여?! 이정도면 파일시스템 어느정도 익혔다~ 싶어지잖아여!

역시 갓승훈 선생님의 책은 우리를 실망시키지 않아여.. 오랜만에 보는 Master Boot Record부터.. Reserved 영역과... 책만 봐도 충분하겠네여!! 사실 파일시스템은 구현해도 그렇게 와닿지가 않아여ㅜㅠ 지난 챕터의 하드디스크는 용량이나 이미지파일이라도 만들어졌지... 이게뭐니.. 싶을정도랄까여? 그래도 리눅스를 사용하게 되신다면 파일시스템이 얼마나 중요한지... dd 명령어나 access point mount 할 때 mkfs, mrproper 등을 이용하게 된다면 파일시스템을 모를 쑤가 없거든여!!!


요즈음 뭔가 재미없게 이론충이 된 것 같은 야미이지만... 직장다녀서 피곤해서 그런건 절대 아니랍니다!! 그냥 하다보니 이렇게.. 데헷...

그럼 다음챕터에서 뵈어요!!


Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.

카테고리:

업데이트:

댓글남기기