디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

1990년대 초부터 시작해서 작금에 이르기까지 이럴수가!

때릴꺼야?(116.40) 2012.11.25 06:27:14
조회 112 추천 0 댓글 2



1990년대 초부터 시작해서 작금에 이르기까지 하드 디스크의 용량을 잘못 인식하는 문제는 계속되어왔다.

이러한 하드디스크를 제대로 인식하지 못하는 문제가 계속적으로 발생한 이유는,

그 누구도 하드 디스크의 용량이 이렇게 빨리 커질 줄을 아무도 예측을 못했었기 때문이다.

하드 디스크가 나온 초창기(1991년 정도)에는 용량이 20MB 였으나, 2012년에 4 Tera 바이트의 하드 디스크가 나온다.
하드 디스크의 용량을 제대로 인식하기 위해서는, 하드디스크자체, BIOS, OS 에서 모두 제대로 지원을 해야 한다.


 



 

 

## HDD의 구조

[ 물리적 하드 디스크 --- Disk Controller ] ------------------------------- [ Disk Adapter---나머지 부품 ]

  ( 하드 디스크 )                                             ISA 케이블                                  ( 마더보드 )

위의 그림은 컴퓨터 내부에서, 왼쪽의 하드 디스크와 오른쪽의 마더보드의 연결 구조도이다.

물리적 하드 디스크의 실제 구조가 어떻게 됐든지 간에,

마더보드(BIOS)는 디스크 콘트롤러가 주는 정보에 따라, 하드 디스크를 인식을 한다. 

초창기의 HDD는 CHS방식의 정보만을 마더보드에 주었으나,

그 후 CHS방식과 LBA방식 모두의 정보를 주는 HDD가 나왔고

      (BIOS가 CHS만을 지원하면 CHS정보를 주고, BIOS가 LBA도 지원하면 LBA 정보를 주고 LBA모드로 동작 )

지금은, LBA 방식의 정보만을 마더보드에 주는것 같다.

 



 

## 초창기의 HDD

HDD는 총 28비트(실린더에 16비트 할당, 헤드에 4비트 할당, 섹터에 8비트 할당)의 정보로  자신의 용량을 알려 줄 수가 있었다.

그러나 BIOS는 HDD와 서로 다르게 발전을 했었으며,

BIOS는 24비트(실린더 10비트, 헤드 8비트, 섹터 6비트(정확히 하면 63개까지))로 하드 디스크 용량을 인식을 할 수가 있었다.

따라서 실린더, 헤드, 섹터 각각에서 HDD와 BIOS가 모두 인식할 수 있는 값만 취하면,

실린더는 10비트 (1024개), 헤드는 4비트(16개), 섹터는 6비트(63개가 된다.)

아래의 표 참조

Standard

Bits For Cylinder Number

Bits for Head Number

Bits for Sector Number

Total Bits for Geometry

IDE/ATA

16

4

8

28

BIOS Int 13h

10

8

6

24

Combination (Smaller of Each)

10

4

6

20

따라서, 최대로 인식이 가능한 용량을 보면,

1024 X 16 X 63 X 512 = 528,482,304 바이트.   (= 약 504MiB)

참고로, 섹터는 0번이 아니라 1번 부터 번호가 시작한다. 그래서 트랙당 섹터의 갯수는 63이 된다.

           한 섹터당 크기는 무조건 512바이트이다.

           하드 디스크의 용량을 계산할 때는, 섹터의 갯수가 홀 수이므로, 용량값이 M 바이트(=1024X1024) 단위로 떨어지지

           않는다.

DOS에서 하드 디스크를 억세스 하고 싶을 때는,

소프트웨어 인터럽트(명령어로 발생시키는 인터럽트)인 Int 13h로 BIOS를 억세스 하면 된다.

DOS 또는 응용 프로그램에서, DOS interrupt 13h의 매개변수로 실린더, 헤드, 섹터의 값을 넘겨주면,

BIOS는 그 값을 그대로 하드 디스크로 전달을 해서 억세스를 하는 방식이다.

위의 방법으로 인식이 가능한 최대 용량은 504MiB 이다.

그러나 시간이 흐름에 따라, 이 값보다 더 큰 용량의 하드 디스크가 출현을 했으며,

따라서 다음의 방법으로 504MiB보다 더 큰 용량의 하드 디스크를 인식을 할 수가 있었다.


 

 




 

## 504MB 이상의 인식문제 (그러나 7.8 GB 이하의)

하드 디스크는 자신의 용량을, 실린더 16비트, 헤드 4비트, 섹터는 63개, 이렇게 이 세가지 값들로 자신의 정보를 BIOS에게 넘겨준다.

그러면 BIOS에서는, 하드 디스크에서 보내 준 실린더의 값을, 10비트 이내의 값으로 표현하기 위해서,

                           2,4,8,16 값 중의  하나로 실린더 값을 나누고,

                           이 나눈 값을  하드 디스크가 보내 준 헤드의 값에 곱해 준다.

                           그러면, 하드 디스크가 알려준 값들(실린더, 헤드)을,

                           BIOS에서 실린더는 10비트이내로, 헤드는 8비트 이내로 표현이 가능하고, 이 값을 DOS에게 알려준다.

이제 DOS 또는 응용 프로그램에서는 하드 디스크를 억세스 하기 위해서 Int 13h를 사용할 때,

             퍼래미터 값으로 실린더는 10비트, 헤드는 8비트, 섹터는 63개 이렇게 이 세가지 값을 BIOS로 넘겨 줄 수 있다.

             BIOS에서는 이 값들을 받은 후, 아까 위에서 곱해주고 나눌 때 사용했던 값을 다시 사용하여,

             실린더는 나누어주고, 헤드는 곱해주어서 나온 값들을 하드 디스크에 넘겨준다.

이러한 translation 방법을 ECHS(Extended CHS) 방식 또는 Large Mode 이라고 한다.

이 방법을 사용하여 인식할 수 있는 최대 용량은,

             1024(10비트) X 256(8비트) X 63  X 512 = 약 7.87 GiB 이다.

    그러나 DOS라는 OS의 버그에 의하여, 헤드를 최대 255값 까지만 사용할 수가 있기 때문에 실제로는

             1024(10비트) X 255(8비트) X 63  X 512 = 약 7.84 GiB 이다.



 

 





 

## 504MB 이상의 하드 디스크 중에서, LBA 모드를 지원하는 하드 디스크가 출현을 했다!

LBA 모드란, 하드 디스크가 자신이 지원할 수 있는 최대 용량을 (CHS 값이 아니고) 바이트 값으로만 BIOS에게 넘겨주는 모드를 말한다.

그러면, BIOS는 DOS에게 알려줄 C,H,S 값을 구하기 위해서 아래의 표처럼 계산을 한다.

<th>Capacity X in bytes</th><th>Sectors</th><th>Heads</th><th>Cylinders</th>
1<X<u><</u> 504 MB6316X/(63*16*512)
504 MB<X<u><</u>1008 MB6332X/(63*32*512)
1008 MB<X<u><</u>2016 MB6364X/(63*64*512)
2016 MB<X<u><</u>4032 MB63128X/(63*128*512)
4032 MB<X<u><</u>8032.5 MB63255*X/(63*255*512)

Capacity X in bytes : 하드 디스크가 BIOS에게 알려주는, 하드 디스크 자신의 용량(바이트 값으로 넘겨줌)

Sectors, Heads, Cylinders : 주어진 X 값으로 부터, 만들어진 값들이다. 이 값들을 BIOS가 DOS에게 넘겨준다.

    따라서 DOS는 장착된 하드 디스크의 C,H,S 값을 알 수가 있게 되는 것이다.

   예) 하드디스크가 BIOS에게 자신의 용량이, X = 5,025,646,080 bytes 라고 알려 주었다고 하자.

        그러면, 위의 표에서 제일 아래 부분에 해당하므로,  5,025,646,080 / ( 63*255*512 ) = 611

        따라서 BIOS는 Cylinder=611, Head=255, Sector per Track = 63의 값을 갖는 하드 디스크가 장착이 되었다고

        DOS에게 알려준다.

# DOS가 하드 디스크를 억세스 할 때 :

   DOS가 하드 디스크를 억세스 할 때에는, 원하는 주소의 C,H,S 값을 DOS Int 13h를 이용하여, BIOS에게 넘겨준다.

   BIOS는 DOS로 부터 받은 C,H,S 값을 하나의 값(단위는 아마도 섹터 단위로 추정(512 바이트 단위))으로 바꾸어서,

   하드 디스크에게 전달을 한다. 


 


 

 

## 7.84GB 이상의 하드 디스크 인식

7.8GB 이상의 하드 디스크를 제대로 인식하려면,  하드디스크, BIOS, OS 가 모두 LBA를 지원해야 한다.

기존의 BIOS의 Int 13h는 C(10비트),H(8비트),S(63)의 값으로는 최대 약7.84GiB가 인식을 할 수 있는 최대 용량이다.

( 1024 X 256 X 63 X 512 = 8,455,716,864 bytes. = 7.875GiB 이다.

  그러나 실제로는 DOS가 자체 버그에 의해서 Head값으로 255값 까지만 사용이 가능하므로

  1024 X 255 X 63 X 512 = 8,422,686,720 bytes = 약 7.84GiB 이다.)

따라서 7.84GiB 이상의 용량을 가진 HDD를 지원하기 위해서는,

   HDD는 LBA 모드로 동작을 해야 하고,

   BIOS는 새롭게 만들어진 Int 13h Extensions라는 것을 지원해야 하고,

   OS는 Int 13h Extensions 을 사용할 줄 알아야 한다.

위의 조건을 만족하면 7.8GiB 이상의 하드 디스크도 제대로 동작시킬 수 있다.

(참고로 7.8GiB 이상의 하드 디스크는, 부팅할 때 BIOS에게, CHS 값으로 다음의 값을 관행적으로 알려주는 것으로 되어 있다.

Cylinder=16,383 , H=16, Sector=63 )






 

## 128GB 이상의 인식 문제

최초에 HDD는 CHS 값으로 총 28비트(C는 16비트,H는4비트,S는 8비트)를 사용하도록 설계가 되어 있었다.

그래서 HDD가 LBA 모드로 전환되었을 때, 28비트를 사용하도록 설계가 되었다.

이에 맞추어서 BIOS와 OS도 28 bit-LBA를 사용하도록 설계가 되었다.

28bit LBA인 경우, 최대로 인식이 가능한 용량은 2^28 * 512 byte = 약 137GB = 128GiB.

따라서 128GiB 보다 더 큰 용량의 하드디스크를 장착하는 경우, 제대로 인식이 안되는 문제가 발생이 된다.

이 문제는 2002년 경에 48bit LBA를 Win2000과 WinXP의 서비스팩의 업그레이드를 통해서 반영함으로써 해결이 되었다.

    (추가로 Win2000의 경우는, 레지스트리값도 직접 바꾸어 주어야 한다.)

따라서 위의 128GiB 이상의 HDD를 인식하는 방법을 위해서, Maxtor에 의해 48 bit LBA (일명 ATA/ATAPI-6)

가 제안이 되어 표준으로 채택이 되었으며,

이 48 bit-LBA를 HDD, BIOS, OS에서 모두 지원을 해야 제대로 동작이 가능하다.

48bit-LBA가 지원할 수 있는 최대 용량은 128 PiB (여기서 P는 peta ) 이다.

( 128PiB = 128 *1024 *1024 *GiB = 약 144 PB이다.)



 

 





 

# XP 에서 128GB 이상을 인식하는 법

당연히 BIOS는 48비트-LBA를 사용할 수 있는 BIOS 이어야 한다.

1. WinXP 가 이미 설치된 PC에, 128GiB 이상의 HDD를 추가로 장착을 할 때

   WinXP가 service Pack 1 또는 그 이상의 버전이면, 그냥 장착을 하여 사용하면 된다.

   WinXP가 SP1 이전이면, 일단 SP1 또는 그 이상의 버전으로 업그레이드를 한 후, HDD를 장착하여 사용하면 된다.  

2. OS가 설치가 되지 않은 PC에서, 128GiB 이상의 HDD에 WinXP를 설치를 할 때

   # WinXP가 service Pack 1 또는 그 이상의 버전인 설치CD를 사용하여, WinXP를 설치를 하라.

   # WinXP가 SP1 이전인 설치 CD만 있다면, 이 CD를 이용해서 WinXP를 설치를 한다.

                  아마도 WinXP OS 상에서 파티션을 했었다면, 128GiB 이상을 인식을 할 수 없었기 때문에,  

                  마지막 파티션의 끝 부분이 128GiB 였을 것이다.

                  이 상태에서 SP1 또는 그 이후의 버전을 설치를 한 후, 파티션 매직등을 이용하여서,

                  마지막 파티션의 끝 부분의 위치를 HDD 용량의 끝으로 이동을 시키면,

                  HDD의 나머지 부분도 모두 사용할 수 있게 된다.

 




 

 





 

 # Win 2000 에서  128GB 이상을 인식하는 법

당연히 BIOS는 48비트-LBA를 사용할 수 있는 BIOS 이어야 한다.

1. OS가 설치가 되지 않은 PC에서, 128GiB 이상의 HDD에 Win2000을 설치를 할 때

     (이 때, 장착되어 있는 HDD는 파티션이 되어 있지 않은 HDD이어야 한다.

      만일 이미 파티션이 되어 있던 HDD라면, 디스크 유틸리티 프로그램등을 이용해서 파티션을 미리 제거 해야 한다. )

    가능하면 Win2000 service Pack 3 또는 그 이상의 버전인 설치CD를 사용하여, Win2000을 설치를 하라.

    위의 버전의 OS가 없다면, 그냥 Win2000을 설치하고, 설치후에 SP를 최신 버전으로 업데이트를 하라.

    # 위의 두 경우 모두 OS 설치 초기 화면에서, 파티션을 설정하는 부분에서,

                  파티션을 1개만 설정을 하고, 파티션 사이즈를 128GiB 이하로 설정을 하라.

    SP가 최신의 버전으로 업데이트가 되어 있다면, 레지스트리를 다음처럼 설정을 하라.

          1. 레지스트리 편집기를 열어서, 아래의 항목을 찾아 선택한다.

          HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesAtapiParameters

         2. 편집 메뉴에서 값 추가를 누른 후 다음 레지스트리 값을 추가한다.

                  값 이름: EnableBigLba
                  데이터 형식: REG_DWORD
                  값 데이터: 0x1

         3. 레지스트리 편집기를 종료한다.

     컴퓨터를 재 부팅한 후, 디스크 관리 도구 ( Win2000 자체의 프로그램이든, 또는 파티션 매직이든)를 사용하여,

     HDD의 나머지 부분에 대해 추가로 파티션을 설정하면 된다.

     ( Win2000을 설치시에 생성했던 최초의 파티션의 사이즈를 늘린다면?? 데이터 손실없이 가능할까? 모르겠다. )

2. OS가 이미 설치 되어 있는 PC에서, 128GiB 이상의 HDD를 장착하는 법

    Win2000의 서비스팩을 최신으로 업그레이드 한다.

    위의 1번의 내용대로, 레지스트리를 수정한다.

    그리고 난 후, 128GiB 이상의 용량을 가진 HDD를 장착하면 된다.

 



 






 

 

## 2TB 이상의 인식문제

2TB 이상의 하드 디스크를 제대로 인식하려면 하드디스크, BIOS, OS 가 모두 64bit LBA를 지원해야 한다.


 


 








 

 

이상은 HDD의 용량 인식 문제에 있어서 비교적 큰 사건들만 정리한 것이다.

실제로는 더 많은 문제들이 있어왔다.

예를 들어서, BIOS를 어느 회사에서 언제 만들었냐에 따라서 최대로 인식할 수 있는 HDD의 용량이 달라지기도 했다.


 


 


 


 


 


 

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 모태 솔로도 구제해 줄 것 같은 연애 고수 스타는? 운영자 25/07/21 - -
AD 곧 휴가!! 홈캉스, 바캉스 SALE 운영자 25/07/21 - -
339023 A날 ~ B날까지 총 몇일인지 구하는 방법이 뭐냐 [2] 리버싱갤로그로 이동합니다. 12.11.27 82 0
339022 리눅스 관련된 글은 프갤에 쓰면됨? [2] 리눅스(203.237) 12.11.27 59 0
339021 웹개발 신입이 어느정도까지 공부하고 입사 할수 있나요 [5] dd(61.35) 12.11.27 230 0
339020 api 공부중인데, 이 함수 어떻게 읽나요? [4] 이거뭔가요?(211.194) 12.11.27 110 0
339019 소개팅 하기전에 주선자에게 이런말을 해주자 [1] JSP(182.211) 12.11.27 107 0
339017 소설처럼 읽는 JSP 7강까지 끝냈다 헉헉 JSP(182.211) 12.11.27 66 0
339016 c언어로 raw파일 만들고 있는데 안되는게 있슴돠 [1] 무적귀환갤로그로 이동합니다. 12.11.27 69 0
339015 남자친구를 기계어로 쓰면 뭔가요? [4] 예아(59.14) 12.11.27 153 0
339012 traceroute에서 s옵션은 어떻게 줘야됨? ㅁㅁ(110.70) 12.11.27 27 0
339011 다음주 중국 출장가는데 [2] ??(223.62) 12.11.27 67 0
339010 현직자 또는 공부하는 프로그래밍갤러리 형님들 조언좀 부탁드립니다 [22] 호릵(121.140) 12.11.27 321 0
339007 dev c++ 한글 ㅁ으로 나오는데 어찌해야 돼요 ㅜㅜ [3] 햇공돌이(122.128) 12.11.27 73 0
339004 운영체제 과목인데 필기한걸 모르겠다... 설명 좀 제발.ㅜㅜ ㅇㅇ(203.90) 12.11.27 54 0
339003 API 공부하는데 이게 뭔가요? [2] 이거뭔가요(211.194) 12.11.27 70 0
339002 안녕하세요형들 J to the 1갤로그로 이동합니다. 12.11.27 33 0
338999 형들 주석문 해석좀 부탁드립니다. 너무어려워요 [7] ㅇㅇ(211.173) 12.11.27 68 1
338998 지방에서 서울쪽 학원다니는갤러있어? [4] 이세상끝에서갤로그로 이동합니다. 12.11.27 102 0
338997 리눅스 쉘스크립트로 특정 확장자 파일 전체 확장자 붙여서 복사 [6] 위디안(115.91) 12.11.27 57 0
338995 컴공 과제 셔틀 사이트 어떰? [8] 영꼰이갤로그로 이동합니다. 12.11.27 262 0
338994 erp 종사자들은 엄나 [2] ㅁㅁ(203.226) 12.11.27 103 0
338992 안드로이드 에뮬레이터 모든걸 제대로 다 했는데... 에뮬 봐줘요 [10] 궁금한게많으갤로그로 이동합니다. 12.11.27 106 0
338991 얼굴이 이쁜 여자는 많습니다. 성격이 착한 여자도 많습니다. ☎2.51™갤로그로 이동합니다. 12.11.27 76 0
338990 dev c++ 로 c언어로 작성한 프로그램이 작동안되는이유 아는분있나요? [3] ㅇㅇ(211.173) 12.11.27 74 0
338989 리눅스 쉘스크립트로 특정 확장자 파일 전체 다른확장자로 복사 [5] 위디안(115.91) 12.11.27 44 0
338988 안드) 와이파이전용기기에서 3g, 4g 네트워크 정보 못가져오냐? [7] 얼룩돼지갤로그로 이동합니다. 12.11.27 121 0
338987 linker error 이라는게 뭔가요? [1] ㅇㅇ(211.173) 12.11.27 41 0
338986 책한권 다 끝내고 어떻게 공부 하는게 좋을 까요?? [1] 열정(1.250) 12.11.27 58 0
338985 얼굴이 이쁜 여자는 많습니다. 성격이 착한 여자도 많습니다. [2] 영꼰이갤로그로 이동합니다. 12.11.27 159 0
338983 dev c++로 자기소개서 써야되는데 아... 어떻게써야하는지모르겠음 [5] ㅇㅇ(211.173) 12.11.27 87 0
338982 마음만 착한 여자 vs 얼굴만 착한 여자 [2] 미스테리(182.211) 12.11.27 126 0
338981 아놔ㅡㅡ. . . 다크엔젤z갤로그로 이동합니다. 12.11.27 37 0
338978 하여간 여자라는 동물은 정말 미스테리다 미스테리(182.211) 12.11.27 71 0
338977 C) 배열전체에한꺼번에 널값주는법잇음? [21] (211.246) 12.11.27 244 0
338976 인터넷 페이지 저장해서 볼수 있나요? [8] empty(220.70) 12.11.27 317 0
338975 아오 시밤 이클립스에서 자바빈즈 컴파일 하는데 클래스 파일이 안만들어짐 [2] jsp(182.211) 12.11.27 69 0
338973 IT 입문자에게 [1] 개발자(119.201) 12.11.27 161 0
338971 씨발여긴 글제목만봐도 [1] ㅁㄴㅇ(175.194) 12.11.27 67 0
338970 궁금한거 3가지 있습니다. [5] ㄱㄱㄱ(175.192) 12.11.27 79 0
338969 고민이 잇어 형들.. 조언좀 부탁해 [13] PandaMango갤로그로 이동합니다. 12.11.27 169 0
338967 상암동 누리꿈 공개소프트웨어 데이 왔는데 [1] 에어로홍갤로그로 이동합니다. 12.11.27 58 0
338966 요즘 HDSI툴 먹히는 홈페이지 없겠찌? [1] dd(119.197) 12.11.27 49 0
338965 ASP.NET는 사망직전인가여?? jsp가 킹인가여?? [2] C#(182.211) 12.11.27 111 0
338964 실전프로젝트 C# 4.0 샀는데 ............. 망책이라니 ㅠ [3] C#(182.211) 12.11.27 120 0
338962 영양가 있는 글을 올리자... ㅋㄱ(183.96) 12.11.27 38 0
338961 비트 다니는사람있냐? 진짜 개인적인거 [1] ㅂ맛갤로그로 이동합니다. 12.11.27 163 0
338959 ? 난 학부때도 회사에서도 조금이라도 뚱뚱한 년 못봤는데 [2] 영꼰이갤로그로 이동합니다. 12.11.27 102 0
338958 일반적으로 무자본 개인 월수익의 1차 한계는 350~500사이 인것 같다 [6] ☎2.51™갤로그로 이동합니다. 12.11.27 203 0
338957 나도 공감한다 프갤 영양가가 없음 [8] 에어로홍갤로그로 이동합니다. 12.11.27 204 0
338956 개인 프로젝트를 C++, C#으로 만들었는데 [3] 나다라마법사(112.173) 12.11.27 117 0
338955 입문서적계의 레전드.jpg [3] d(125.177) 12.11.27 284 0
뉴스 '화려한 날들' 정인선-김정영-양혁, 좌충우돌 한 지붕 세 가족으로 뭉친다! 디시트렌드 07.23
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2