Объём жёсткого диска
Объём жёсткого диска (также используются термины размер, ёмкость) — максимальное количество информации, которое способен вместить жёсткий магнитный диск.
Ограничения ёмкости
По мере развития жёстких дисков их максимальная ёмкость стремительно увеличивалась. На пути этого увеличения время от времени возникали препятствия — ограничения широко используемых программных и аппаратных интерфейсов, используемых способов адресации, а также характеристики ПО. В этом списке приводятся ограничения (большей частью исторические) существующие или существовавшие в персональных компьютерах на размер жёстких дисков, разделов и/или файловых систем.
| Ограничение | Описание |
|---|---|
| 8 МБ | Ограничение на диск в ОС CP/M (при общем числе не более 16 дисков). |
| 10,4 МБ | Фиксированный размер диска в PC/XT: 306 цилиндров, 4 головки, 17 секторов на дорожку. |
| 15 MБ | Максимальный размер раздела для MS-DOS 1 и 2 при стандартном размере сектора.[1] |
| 16 МБ | Предельный размер для FAT12.[2] |
| 32 МБ | Ограничение на размер раздела для MS-DOS 3 для файловой системы FAT16: размер кластера 2 КБ, не более 16 384 кластеров.[2] |
| 128 МБ | Ограничение на размер FAT16 в MS-DOS 4: число кластеров до 65 526, размер кластера 2 КБ.[2] |
| 504 МБ | Ограничение схемы адресации CHS (см. ниже). |
| 2 ГБ | Максимальный размер файловой системы FAT16 при 32-КБ кластере. Для Windows NT это величина за счёт 64-КБ кластеров равна 4 ГБ.[3] |
| 2,1 ГБ | Некоторые материнские платы выделяли 12 битов на хранение числа цилиндров (4095 × 16б × 63 → 2,1 ГБ).[4] |
| 3,2 ГБ | Ошибка некоторых биосов Phoenix (4.03 и 4.04), приводящая к зависанию в CMOS setup, если диск превышает в размере 3277 МБ.[4] |
| 4 ГБ | Лимит на размер FAT16 раздела в Windows NT. |
| Лимит раздела, создаваемого Windows NT 3.51/4.0 Workstation при установке[5] (связано с тем, что при установке создаётся раздел FAT16, который конвертируется потом в NTFS). | |
| 4,2 ГБ | Прямая трансляция числа секторов/головок методом последовательного уменьшения в 2 раза числа цилиндров и удвоения числа головок (т. н. Large или ECHS (Extended CHS)) приводила к лимиту в 1024 головки: 1024 × 128 × 63 × 512 → 4,2 ГБ.[4] |
| 7,8 ГБ | Лимит на размер системного диска Windows NT 4.0.[6] |
| 7,9 ГБ | При уменьшении числа головок до 15 режим ECHS (revised ECHS) позволял методом удвоения получить конфигурацию с 15 × 2 × 2 × 2 = 240 головками, что давало предел в 7,9 ГБ. |
| 8,4 ГБ | Ограничение BIOS (см. ниже). |
| 32 ГБ | Искусственное ограничение на размер раздела FAT32 в Windows 2000, XP. Разделы большего размера форматировать система отказывалась.[7][8] Причиной является рациональное использование ресурсов: FAT32 при большем размере раздела теряет производительность, а NTFS, напротив, при малом размере раздела (~10 GiB) слишком расточителен. |
| Максимальный поддерживаемый размер диска Windows 95.[9] | |
| 33,8 ГБ | Большие диски сообщают о себе 16 головок, 63 секторах и 16 383 цилиндрах. При использовании для вычисления реального числа цилиндров (деления ёмкости на 16 × 63) число цилиндров получается больше, чем 65 535, что приводит к зависанию некоторых биосов. Именно из-за этой проблемы на многих дисках того времени присутствовали джамперы ограничения ёмкости до 32 ГБ. |
| 128 ГБ 137 ГБ[4] |
Ограничение стандартов с ATA-1 по ATA/ATAPI-5 (см. ниже). |
| Лимит в Windows XP SP1 на размер раздела NTFS (исправлено в SP2). | |
| Максимальный размер FAT32, создаваемый Windows 98.[7] | |
| Максимальный размер SFS в ОС семейства Amiga. | |
| 2 ТБ | Максимальный размер всего диска (без учёта разделов), поддерживаемый MBR. Ограничения MBR: размер раздела, а также расстояние от начала раздела до контейнера (до начала диска в случае первичного раздела, до начала расширенного раздела в случае логических томов) — 32-битное число секторов, то есть и тот, и другой параметр не может быть больше 2 ТБ. |
| Максимальный размер файловой системы ext3 на 32-битной архитектуре. | |
| Максимальный размер раздела для загрузки Windows XP, Windows Vista, Windows 7 (в силу ограничений MBR). | |
| 4 ТБ | максимальный размер элемента массива mdraid при использовании формата метаданных 0.9 (2^32-1 сектора) |
| 8 ТБ | Предел FAT32.[8] |
| 16 ТБ | Максимальный размер ext3 на 64-битной архитектуре (4-КБ блок), на Alpha при 8-КБ блоке может быть до 32 ТБ. |
| Максимальный размер NTFS при 4-КБ кластере. | |
| Максимальный размер файловой системы ReiserFS 3.6.[10] | |
| Максимальный размер файловой системы ISO 9660 (используемой на оптических дисках). | |
| 64 ТБ | Лимит на размер spanned-массива дисков в Windows 2003.[11] |
| 256 ТБ | Максимальный размер файловой системы NTFS (при 64-КБ кластере) в существующих 32-битных реализациях.[7][11]
48-bit LBA способно адресовать до байт, что составляет 256 ТиБ. К концу 2011 года на рынке имелись внутренние жёсткие диски объёмом не более 4 ТБ. |
| 512 ТБ | Рекомендуемый максимальный размер файловой системы exFAT.[12] |
| 4 ПБ | Лимит JFS при 4-КБ блоке.[10] |
| 8 ПБ | Лимит NFS.[10] |
| 137 ПБ | Лимит адресации секторов ATA-6 (48-bit LBA). |
| 1 ЭБ | Максимальный размер ext4.[13] |
| 8 ЭБ | Лимит XFS.[10] |
| 16 ЭБ | Лимит HFS+. |
| 64 ЭБ | Теоретический максимальный размер файловой системы exFAT.[12] |
| 256 ЗиБ | Максимальный размер файловой системы ZFS. |
| 1 ЙБ | Теоретический предел NTFS при 64-КБ блоках и 64-битной адресации (в настоящий момент используется 32-битная).[7] |
Ограничение MS-DOS на допустимое число головок — 16 (1024 цилиндра, 63 сектора на дорожку, 16 головок, 512 байт на сектор).[4][14]
Программное обеспечение времен начала 1990-х годов, такое как MS-DOS, для работы с жёстким диском использовало вызов Int 13h.
Адресация блоков диска в вызове Int 13h выглядит как номера цилиндра (англ. cylinder), головки (head) и сектора (sector) — C/H/S. При этом на C отводится 10 бит, на H — 8, на S — 6.
Обработчик Int 13h в BIOS вписывает эти номера в управляющие регистры контроллера IDE. В этих регистрах на C отводится 16 бит, на H — 4, на S — 8.
Совокупность того и другого приводит к общему ограничению C/H/S = 10/4/6 бит (всего 20 бит), что позволяет адресовать секторов[15]. При размере сектора в 512 байт это даёт 528 482 304 байт (504 МБ).
| Максимум | BIOS | IDE | Общее ограничение |
|---|---|---|---|
| Секторов на дорожку | 63 | 255 | 63 |
| Поверхностей (головок) | 256 | 16 | 16 |
| Дорожек | 1024 | 65536 | 1024 |
| Объём | 8 064 Мбайт | 127,5 Гбайт | 504 Мбайт |
Данное ограничение стало ощутимым в 1994—1995 годах, примерно во время первых микропроцессоров Pentium. Для его обхода была придумана трансляция значений CHS в коде обработчика Int 13h в BIOS. Среди алгоритмов трансляции был и LBA (англ. Linear Block Addressing), когда CHS-адрес преобразовывается в линейный адрес, который уже и передаётся в контроллер диска.
Теоретически разные методы трансляции должны давать одинаковый результат, однако из-за особенностей некоторых реализаций трансляции, а также организации структур данных (разделов) на дисках, информация, записанная на диск в одной трансляции, могла быть недоступна в других трансляциях. Для смены режима трансляции диска необходимо было «переразбить» диск (пересоздать таблицу разделов), что означало потерю информации, уже записанной на диск.
Максимально возможная величина для прерывания INT 13 — 1024 цилиндра, 63 сектора, 255 головок. Ограничение многих BIOS того времени (P1-P2), при попытке определить диск с размером больше 8 ГБ такие BIOS зависали, так как число головок обязано быть меньше 256.[4]
В интерфейсе Int 13h для номера цилиндра отведено 10 бит, для номера головки — 8, для номера сектора — 6, всего 24 бита. Это позволяет адресовать секторов[15], что при размере сектора в 512 байт даёт 8 455 716 864 байт (8064 МБ, 7,875 ГБ).
К тому времени, когда это стало проблемой — около 1997—1998 годов — стали массово использоваться полноценные многозадачные ОС, такие, как GNU/Linux, FreeBSD и Windows NT. Так как код Int 13h в BIOS никогда не разрабатывался с учётом многозадачности (в частности, он нагружает процессор бесконечным циклом в ожидании прерывания от контроллера), эти ОС не могли пользоваться Int 13h в своей работе. Вместо этого они — как ранее Novell NetWare — включали драйвер IDE, напрямую обращающийся к аппаратуре контроллера. Это снимало связанные с Int 13h ограничения при работе уже загруженной ОС, но проблема с загрузкой (запуском загрузчика системы из раздела диска, расположенного за доступной для BIOS границей) оставалась.
Для решения проблемы разработчики BIOS расширили Int 13h новыми подфункциями, принимавшими номер сектора как 64-битное целое число (LBA) без деления на C/H/S. Разработчики ОС внедрили поддержку этого новшества в загрузчики (в Windows — это один из пакетов обновления для Windows NT 4.0 в 1997 году), после чего проблема перестала существовать.
Аппаратный интерфейс регистров IDE-контроллера стандартов с ATA-1 по ATA/ATAPI-5 использует 16 бит для номера C, 4 — для H и 8 — для S, всего 28 бит. Это позволяет адресовать секторов[15], что при размере сектора в 512 байт даёт 136 902 082 560 байт (127,5 ГБ).
Решение проблемы с таким ограничением возможно только на уровне аппаратуры (и обновления драйверов для использования новых возможностей аппаратуры). Оно было принято в стандарте ATA/ATAPI-6 в виде отправки адреса в контроллер дважды в определённой последовательности (48-bit LBA).[16]
В семействе Windows поддержка 48-bit LBA была добавлена в SP4 для Windows 2000 и в SP2 для Windows XP. Кроме того, в Windows 2000 также требуется явно активизировать эту поддержку с помощью редактирования реестра.[17]
Помимо ограничений интерфейсов IDE и BIOS, имелись и другие барьеры — ошибки и ограничения в программах, ОС и в коде BIOS.
Например, DOS не поддерживает работу с количеством головок больше 255, поэтому в этой операционной системе не приемлема геометрия, в которой количество головок равно 256. Это означает, что в компьютерах, где в BIOS не поддерживалась трансляция с заменой количества головок 256 на 255, доступ к дискам объёмом больше секторов был под вопросом. При размере сектора в 512 байт это даёт 4 227 858 432 байт (4032 МБ, 3,94 ГБ).


