| [ guest ] in KIDS 글 쓴 이(By): guest (픽터) **uge00 Guest Auth Key: 0ffe83309aeb48092eb99458d332867c 날 짜 (Date): 2011년 01월 06일 (목) 오후 02시 54분 37초 제 목(Title): [픽터] HDD 용량 꽉채우면 하드 디스크는 1. partition을 나누는데 (귀찮아서 나누지 않고, 통채로 1개의 partition으로 쓰기도 하지만) 각각의 partition은 나중에 하나의 file system이 된다. 아무런 구조가 없는 partition안쪽에, sub구조를 만드는 것을 format이라고 한다. 이렇게 format을 하면, 그 partion은 file system이 된다. file system은 그 종류도 가지가지이고, 수없이 많고, 무슨 FS(file system)을 써야 좋은 것인지, 수많은 사람들이 연구를 했겠지만. http://en.wikipedia.org/wiki/File_system 그래서, 정리하고 반복하면, partition을 나누어서 국가의 경계(boundary)를 정하고 각 partition에 format을 하여, 그 국가의 지방행정조직을 만든다. 시,도, 군,면 이렇게 행정조직을 만들면 이게 FS가 되는 것. FS는 하드디스크에만 있는 것이 아니고, CD에도 있겠고, flash 메모리에도 있겠고, floppy disk에도 있겠고, 심지어는 RAM에도 만들 수 있다.(Ram disk) 2. Format을 하여 FS를 만들면, partition을, 큰 덩어리로 큰 조각으로 나눈다. (국가를 시, 도로 크게 나누는 것처럼) 예전에 이것을 UNIX의 경우에는 예를들어 128기가 바이트 partition을 1기가 바이트 짜리 cylinder group으로 나누더라. 그럼 128개의 CG(cylinder group)이 생기는데, 이 cylinder group에는 그 안에, {superblock백업, inode table들, data block들}이 있더라. 여기서 block들이라, 하드디스크 사용을 용이하게 하기 위한, 예를들어 8 kilobyte 단위의 영역을 말한다. (예전에는 이게 1kilo로도 했고, sector size랑 같은 512 바이트로도 했었는데) 3, 그래서 대충 정리하면, 어떤 file AAA라는 것을 열면, hard disk에서 현재 directory를 읽어서, 그곳을 scan하다가 이름이 AAA라고 나오면, 그곳에 있는 "inode는 어디어디에 있다"는 정보를 읽어서, inode 숫자를 읽는다. 그 inode숫자가 33이라면, 이것은 예를들어 2번째 cylinder group의 1번째 inode이므로 (CG당 16개 inode가 있다면), 2번째 CG의 1번째 inode를 읽어 들인다. 그 inode를 읽어보니, 그곳에는 "데이타는 사이즈가 123446byte이고 그 냉요은 1100, 1101, 1102, 1103 block에 있다) 라고 적혀있을 것이고, 그럼 1100번 block을 찾아가야 하는데, 이 block의 위치는 (CG에는 각각 500개의 data block들이 있다면) 2번째 CG에서, 100번째 data block이다. 그래서 그곳에서 8kilobyte를 읽어들이고, 101번째 data block에서 8 kilobyte를 읽어드리고 하면서 data를 읽으면, 우리가 애초에 읽고자 했던 AAA의 내용을 읽을 수 있다. 그럼 아까 말한 내용 "hard disk에서 현재 directory를 읽어서"라는 것은 뭘 뜻할까? 그것은 현재 directy의 inode숫자를 알고 있다가, 그 inode table을 읽어들인다. 그 inode를 읽어보니, 그곳에는 "데이타는 사이즈가 얼마얼마이고 그 위치는 어디어디 block이다"라는 정보가 있을 것이고, 그럼 그곳 어디어디 block에서 읽으면 된다. 4. 야튼간에 지금 UNIX의 경우를들어서 예를들고 있지만, 하드디스크는 CG로 크게 나누어지고, 그 CG는 block이라는 것으로 나시나누어지는데, 결국에는 이 block단위로 나누어진다.(대략 8k정도 될 것 같음) 그래서 file을 만들면, 아까 예를들었듯이, 1100, 1101, 1102이런식으로 다닥다닥 붙어ㅅ 데이타가 있으면, 하드디스크 head가 움직일 필요없이, 연속적으로 익을 수 있어서, 빠른 시간안에 읽을 수 있어서 좋다. 그래서 어떤 file 이 있을때 그 데이타는 인접한 곳에 저장할려고 하고, (즉 같은 CG안에넣을려고 하고) 어떤 directy가 있을때 그 dir내의 파일들의 데이타는 같은 CG안에 넣을려고 하고, 어떤 directy가 새로 생기면 아예 그 directory는 다른 CG곳에 가서, 그곳에서 파일들을 만들려고 한다. (directory내의 파일끼리는 끼리끼리 모여놓게 만들려고 함과 동시에 direcry 그 자체는 다른 CG에 가서 그곳에서 둥지를 틀게 만들어, direcroty는 흩어져 놓는다는 것임) 5. 그런데, FILE system이 여유 공간이 없다보면, 데이타들을 끼리끼리모이게 만들고 diretory단위로 흔터지게 만드는 작전을 쓸 수 없고, 빈공간 생기는 곳만 찾아가는 수밖에 다른 수단이 없어지게 되는데.. 그렇게 되면 이제 하드디스크 head가 좆나리 이리저리 왔다갔다하면서 찾아가야 해서, 이게 시간이 걸리게 된다. 6. 그럼 어떤 sector가 bad가 되면 어떻게 되드냐? 내 생각에는 HDD도 sector에 데이타를 쓰면, 그 data내용에 대한 error correction code같은 것을 적어두는 모양임. 512바이트 짜리 데이타에는 예를들어, 특수 영역이 있어서, 이 영역안에, hard disk자제척으로 계산한 error correction 데이타를 적어둔다음에, 나중에 읽기할때 이 error correction값이 달라지면, bad sector라고 생각해서, 하드는 자체적으로 이 sector를 bad로 선언하고, 여분의 다른 영역에서 예비적으로 둔 sector를 쓰는 모양임.(remapping) 그래서 한동안 bad sector가 놔와도 하드는 자체적으로 이 remapping을 통해서, 예비 섹터를 사용함으로써 bad sector를 극복해 나가는데...... (그럼 니미 씨발, 이미 error가 났ㄴ느데, remapping을 통해, 새 sector를 쓴다는 것은 좋은데, 어떻게 망가진 data는 복구하느냐? 하느냐면, error correction code를 잘만 쓰면, 복구할 수 있음.) 7. 이렇게 remmaping을 하면서, bad sector를 극복해 가다가, 예비 sector까지 다 몽땅 써버리면 어떻게 되느냐면, 그때는 이제, bad sector를 다루는 것은 operation system의 몪이 된다. OS도 하드로부터 data를 읽을때 error checking을 하는데, error가 발생하면, OS가 자체적으로 그 영역 (이번에는 sector단위가 아니라 아마도 block단위로)을 hard 에 저정해 놓고, OS는 더이상 그 영역에 데이타를 안 쓴다. (bad block들의 명단을 하드에 적어놓음) 그래서 OS는 512 바이트 읽을때마다, 적을때마다 error correction code를 적기도 하고 읽기도 해야한다. 어떤 error correction code를 적을 것이냐? 하는 것은 OS맘이다. error correction code를 아예 안 적고 error correction ckeck을 안해버릴 수도 있고 그것은 OS맘. error correcton code에 애인 이름 적어놔도 아무러 뭐라하는 사람없음. 8. 그럼 HD를 꽉채우면, bad sector발생 비율은 올라가는가? HD를 꽉채우면, fragmentation때문에, hed가 너무 왔다갔다해서, 시간걸리는 것은 알겠는데? HD를 꽉채우면, 내가 1메가 바이트를 또 쓰면, 하드에는 빈공간이 거의 없기 때문에, 전체 하드디스크 중에서, 빈공간을 모조리 찾아서 사용할 것이기 때문에 fragmentation은 당연하고, 그러다보면 운이 안 좋아서, 인접해 있던 기존에 있던 data를 건드려서, 0을 1로 만들고, 1을 0으로 만들면, 나중에 저 파일읽을떄 error를 줄 것이고, error correction code때문에 data는 원상복구하고, 그 영역은 이제 hard 자체적으로 disable될텐데... 그 sector는 bad가 되고 remapping되고, 이러기를 반복하면, 나중에는 예비 sector가 더이상 없고. hard는 꽉찾기 때문에 계속해서 bad sector는 나올 것이고... 이제는 OS가 baa sector를 다뤄야 하고.. 결국에 그 hard를 버려야 한다. 마치 이런거 아니겠어요? 동네가 한산하면, 내가 동네 아무대나 똥싸도 아무도 뭐라 그런사람 없는데, 대도시가 되면 내가 골목길에 똥싸면, 바로 옆에서 집주인이 나와서, 성질 부릴 것임. 그리고 나는 계속해서 똥을 싸야 하고, 하드가 꽉차면, 동네방네 싸돌아다니면서 똥싸야 하고... 그럼 동네방네 똥냄새 싸움으로 난리가 날 것ㅇ.ㅁ 시골동네에서는 한산해서 내가 똥싸더라도, 그 똥이 permanant한 것이 아니면, 나중에 그 똥위에 또 똥싸고, 또 똥싸고 하면 된다.(temporary file들처럼) 그런데 이렇게 똥위에 또 똥싸고 또 똥싸고 하는 것이 대도시에서는 안된다. 집주인이 쫒아올 것이기 떄문. 그래서 결국, 하드가 꽉차면, "인접해 있던 기존에 있던 data를 건드릴 가능성이 높아진다"는 것이다. 왜냐하면 하드가 안 꼭차면 인접한 데이타 근처에도 안 갈 것이기 때문. (읽으러 왔을때는 별로 안 중요함.) 9. 어떤 사람은 재배치를 해야하는데 hdd가 full이면 곤란해서 큰문제를 발생시킨다면, HDD회사들이 이미 1.1테라짜리 하드만들어서 0.1테라는 재배치용으로 숨기고 1테라 하드라고 판매했을꺼에요. 라고 하였는데, 원래 이렇게 하고 있을 것이고... 128 기가 바이트 하드를 샀어도, format하여 FS를 만들면 128바이트 보다 줄어들게 되고... 결국에 쓸 수 있는 영역은 100기가 정도 된다면, 이때도 100기가를 써야 몇%썼다고 말해주는 것은 OS이기 떄문에 OS는 FS의 데이탸 영역이 90%를 쓰면 100% 썼다고 말해주기도 해요. 마치 고속도로 설계는 최고속도 140일지라도 실제로 고속도로의 최고속도는 110밖에 안되는 것처럼... 숫자 표시해주는 것은OS맘이기 때문에, 별로 안중요함. |