FAT16이 2GB를 초과하여 저장할 수없는 이유는 무엇입니까?


25

FAT16에 대한 정보를 찾으려는 모든 사이트는 2GB 이상을 할당 할 수 없다고 선언적으로 나타냅니다. 승인. 큰. 당신을 믿어요 그러나 (단지 테스트하는 것 이외의) 결론에 도달하는 방법은 무엇입니까?

FAT16 시스템이 보유 할 수있는 양을 결정하는 데 사용할 수있는 공식이 있습니까?


21
FAT16에 이름에 "16"이있는 이유가 있습니다. :-)
Eric Lippert

28
@EricLippert, 공정하게 말하면, 16과 2 GiB 사이의 연결은 FS의 작동 방식을 알지 못하면 즉시 명확하지 않습니다.
Joey

18
이 질문이 실제로이 사이트에 대한 주제라는 것을 100 % 확신하지는 않습니다. 아마도 retrocomputing.stackexchange.com으로 옮겨야합니까?
Jules

3
2GB 제한은 MS-DOS와 초기 Windows가 FAT16을 처리하는 방식에 대한 실질적인 제한이라는 점은 주목할 가치가 있습니다. 개념적으로 2GB를 초과 할 수 있지만 Microsoft 호환 방식으로는 불가능합니다.
phyrfox

3
@ LưuVĩnhPhúc 댓글이 정확합니다. "MS-DOS 및 초기 Windows"라고 말했습니다. 최신 시스템은 FAT16에서 2GB 이상을 사용할 수 있습니다. 예를 들어 4GB FAT16 파티션은 예전 MS-DOS / Win3.1 시스템에서 작동하지 않습니다. 그리고 2GB가 한계라고 언급 한 많은 출처는 그 한계가 현실이되었을 때 쓰여졌 기 때문이거나, 약간 오래된 시스템에서는 처리 할 수 ​​없기 때문에 권장하지 않는 시간이 지났기 때문입니다. 이후의 시스템은 잘 처리 할 수 ​​있지만 2GB 제한은 약 2000 년 전과 그 이후 몇 년이 지나서 오래되고 오래된 제한을 인용 한 것이 었습니다.
phyrfox

답변:


66

FAT16은 16 비트를 사용하여 클러스터를 식별합니다. 따라서 식별자가 부족하기 전에 최대 65536 개의 클러스터가 있으며 일부 식별자는 파일이 아닌 용도로 예약되어 있습니다. 각 파일은 하나 이상의 클러스터를 차지합니다. 클러스터가 클수록 파일 당 최소 할당량이 증가하여 작은 파일의 오버 헤드가 증가합니다.

그런 다음 클러스터 크기는 식별 가능한 최대 볼륨을 알려줍니다. 32KiB 클러스터의 경우 32 * 1024 * 65536 B = 2GiB입니다.

당신은 수있는 온 - 디스크 섹터 크기를 증가시켜, 무기한 클러스터의 크기를 증가,하지만 당신은 파일의 최대 수에 제한 남아있다. 또한 기본 섹터 크기 (512B)를 가정 한 소프트웨어 관련 문제가 발생할 수 있습니다

~ 2GiB의 물리적 볼륨을 쉽게 사용할 수있는 시점에서 프로세서와 OS는 32 비트이므로 FAT32로 이동하는 것이 합리적인 선택이었으며 소규모 클러스터에서 훨씬 더 많은 파일을 허용했습니다.


4
"작은 파일의 오버 헤드 증가"모든 사용자가이 컨텍스트에서 "오버 헤드"의 의미를 이해할 수 있는지 확실하지 않기 때문에 모든 사용자에게 분명한지 확실하지 않습니다. 한 예가 도움이 될 것이라고 생각합니다. "예를 들어, 문자가 하나 인 파일은 디스크에서 1 개의 클러스터를 차지하며 대부분은 완전히 낭비됩니다. 클러스터 크기가 클수록 낭비는 더 커집니다."
레지날드 블루

3
32KiB는 다양한 버전의 DOS 및 Windows에 대한 최대 클러스터 크기 였지만 Windows NT 제품군은 NT 4.0 이후로 더 큰 클러스터 크기를 지원했습니다. NT 커널 기반). 대답에 명시된 비 효율성으로 인해 유용하지는 않지만 최대 16GiB 크기를 허용합니다. 주로 큰 파일을 저장하려는 경우, 특히 256KiB 클러스터 크기의 배수로 제공된 경우 이러한 시스템을 그럴듯하게 사용할 수 있습니다.
Jules

5
...하지만 다음 한계에 도달했을 가능성이 높습니다. FAT16 및 FAT32 모두에 문제가 있습니다. 최대 파일 크기는 4GiB보다 1 바이트 짧게 제한됩니다. 디렉토리 항목. OTOH, 두 개의 제곱 크기로 최대 256GiB에서 최대 2GiB까지의 파일 크기와 총 크기가 16GiB 미만인 FAT16이 가장 효율적인 형식 일 가능성이있는 경우 FAT16이 잠재적으로 가장 효율적인 형식입니다.
Jules

@ 줄 : 잠재적으로 만. 클러스터 당 오버 헤드가 있음을 기억하십시오. 조각화가 거의없는 경우 저장 실행을 허용하는 파일 시스템이 더 효율적입니다.
중복 제거기

12

실제로 한계가 다른 몇 년 동안 "FAT16"의 여러 변형이 있었지만 "compaq DOS 3.31"에서 Windows 95까지 지속 된 버전을 고려해 보겠습니다.

FAT 볼륨은 클러스터로 나뉩니다. 각 클러스터는 두 개의 섹터로 구성됩니다. FAT16에서 클러스터 당 섹터 수는 8 비트 부호있는 숫자로 저장됩니다. 따라서 클러스터 당 가능한 최대 섹터는 64입니다.

클러스터 번호는 16 비트 부호없는 값으로 저장되었습니다. 총 클러스터를 65536으로 제한합니다. 클러스터 당 최대 섹터 수를 곱하면 4194304 섹터의 한계가 있습니다.

하드 드라이브의 (논리적) 섹터 크기는 512 바이트입니다. 위에서 언급 한 섹터 수의 제한에 곱하면 2GiB 제한이 적용됩니다. 원칙적으로 섹터 크기가 더 큰 매체는 더 큰 FAT16 볼륨을 지원할 수 있지만 실제로는 이것이 발생했다고 생각하지 않습니다.

Windows NT는 "클러스터 당 섹터"필드의 해석이 부호없는 8 비트로 변경되었습니다. 이것은 512 바이트 섹터를 갖는 4GiB FAT16 파티션을 허용했습니다 (이론적으로 섹터가 큰 드라이브에서는 이론적으로 더 큼). AIUI Windows 98은 이러한 파티션을 읽고 쓰는 기능을 추가했지만 파티션을 만들 수 없었으며 디스크 유틸리티는 복구 할 수 없었습니다.


더 큰 클러스터와 더 큰 볼륨을 지원하기 위해 파일 시스템 형식을 상대적으로 약간 조정하는 것이 가능했을 것입니다. 그러나 MS는 FAT32를 생성하는 Windows 95 OSR2를 사용하여 32 비트 클러스터 인덱스로 이동하는보다 급진적 인 옵션을 사용하기로 결정했습니다.

더 급진적 인 옵션을 선택한 이유는 공간 효율성이었습니다. 32kiB 클러스터는 이미 상당히 낭비 였고 더 큰 클러스터는 이동했을 때 일반적인 파일 크기를 감안했을 때.


4
나는 그것을 얻을 때까지 "클러스터 당 가능한 최대 섹터는 64입니다"라고 열심히 생각해야했습니다 .64는 실제로 부호있는 바이트로 나타낼 수있는 가장 큰 2의 거듭 제곱입니다 .128은 최대 양의 부호로 사용할 수 없습니다. 바이트 값은 127입니다.
Ralf Kleberhoff

3
@RalfKleberhoff 그것은 자연스럽게 후속 질문으로 이어지지 만, 2의 거듭 제곱을 저장하는 경우 왜 2의 지수가 아닌 숫자 자체를 저장합니까?
Daniel Wagner

@DanielWagner 전적으로 동의합니다. 특히 FAT16이 만들어 졌을 때, 쉬프팅은 곱셈보다 확실히 저렴합니다. 그러나 아마도 그들은 미래에 수십 년 동안 소프트웨어 엔지니어링을하지 않고 그것을
운영하게되어 기뻤을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.