Обсуждение:Объём жёсткого диска

message: Здесь в качестве обозначения:
"кБ" = 2^10 = 1024 Байт
"МБ" = 1024 кБ = 1024*1024 Байт = 1 048 576 Байт
"ГБ" = 1024 МБ = 1024*1024*1024 Байт = 1 073 741 824 Байт
"Мб" = 1 000 000 Байт, 1МБ = 1.05Mb
"Гб" = 1 000 000 000 Байт, 1ГБ = 1.07Gb
thread_title:  Хронология возникновения проблем с ёмкостью жёстких дисков. 

message: Самая старая проблема касается времён 100Mb винчестеров и больше для которых использовалась FAT12, для которой максимальным был раздел:2^12*32кБ = 134 217 728 = 134Mb (128МБ)
thread_title: 134Mb, год 1990-й.

message: Самая первая, самая известная и самая серьёзная проблема, затронувшая CHS. Проблема была из-за того, что Int13h и IDE имели следующие ограничения на значение CHS:
                                                	C     	H  	S
Int13h                                          	1 024 	256	63
IDE                                             	65 536	16 	255
Максимальный вариант, удовлетворяющий оба случая	1 024 	16 	63
Значит наибольший установленный винчестер мог быть: 1024*16*63*512 = 528 482 304 = 528Mb (504МБ)
thread_title: 528Mb, год 1993-й.

message: Многие BIOS не учли предыдущего опыта и добавили в BIOSе всего 2 бита на цилиндры. В итого получалось: 2^12*16*63*512 = 2 113 929 216 = 2.11Gb (1.97ГБ) Причём некоторые версии определяли только "часть" винчестера (например, 2.5Gb определялся как 425Mb), а некоторые просто зависали при автоопределении винчестера из-за неправильного перерасчёта головок.
thread_title: 2.11Gb, год 1996-й.

message: Windows 95 ("A", не OSR) использовала DOS-овскую FAT16 и потому наследовала все её проблемы - вышеописанное ограничение в 2.15 Gb на один раздел. У FAT32, применяемой Windows 95B OSR2 максимальный раздел: 2^32*32кБ = 17 042 430 230 528 = 17 042 Gb (15 872 ГБ)
thread_title: 2.15&nbsp;Gb, год 1996-й.

message: В Phoenix BIOS (версий 4.03 и 4.04) была ошибка с определением винчестеров более 3.277Mb.
thread_title: 3.28Gb, год 1996-1997-й.

message: Не всем известное ограничение вытекающее из способов решения "проблемы 528Mb". Чтоб преодолеть барьер 528Mb BIOS могла использовать один из двух способов: "LBA assist translation" или "Bit shift translation ("Large" Mode)". Метод "LBA-трансляции" при наличии в системе LBA-винчестера для совместимости с ПО, использовавшим Int 13h, высчитывал значение CHS по 
следующему алгоритму:
Общее число секторов на диске, S_lba	1 - 1 032 192  	1 032 192 - 2 064 384	2 064 384 - 4 128 768	4 128 768 - 8 257 536	8 257 536 - 16 450 560
"Пересчитанное" число цилиндров, C  	S_lba / (63*16)	S_lba / (63*32)      	S_lba / (63*64)      	S_lba / (63*128)     	S_lba / (63*255)
H                                   	16             	32                   	64                   	128                  	255
S                                   	63             	63                   	63                   	63                   	63
Максимальная ёмкость                	528Mb          	1.06Gb               	2.11Gb               	4.23Gb               	8.42Gb
однако до появления LBA-винчестеров появилось много не поддерживающих LBA винчестеров ёмкостью больше 528Mb. Для работы с такими винчестерами использовался следующий пересчёт цилиндров:
Число цилиндров на диске, c       	1 - 1 024	1 024 - 2 048	2 048 - 4 096	4 096 - 8 192	8 192 - 16 384	16 384 - 32 768	32 768 - 65 536
Число головок, h                  	1-16     	1-16         	1-16         	1-16         	1-16          	1-8            	1-4
Преобразованное число цилиндров, C	C=c      	C=c/2        	C=c/4        	C=c/8        	C=c16         	C=c/32         	C=c/64
Преобразованное число головок, H  	H=h      	H=h*2        	H=h*4        	H=h*8        	H=h*16        	H=h*32         	H=h*64
Максимальная ёмкость              	528Mb    	1.06Gb       	2.11Gb       	4.23Gb       	8.47Gb        	8.47Gb         	8.47Gb
в результате BIOS, использующие такую трансляцию для винчестеров 4.23Gb (и больше) и имеющие 16 головок, "переводили" их количество в 256. Однако DOS и Windows95 использовали только значения 0-255 и 256 головок воспринималось ими как "0".
thread_title: 4.23Gb, год 1997-й.

message: В тех же что и в предыдущем случае BIOS, только более продвинутых, описанная выше проблема обходилась приравниванием числа головок к 15. В результате получалось не 256, а 240 дорожек и максимальный размер диска составлял: 1024*240*63*512 = 7 927 234 560 = 7.93Gb (7.38ГБ)
thread_title: 7.93Gb, год 1997-1998-й.

message: Вышеописанное ограничение Int 13h. Правда, конфигурации с 256-ю головками не встречались, потому реальное ограничение: 1024*255*63*512 = 8 422 686 720 = 8.42Gb (7.84ГБ)
thread_title: 8.46Gb, год 1998-й.

message: После исправления в BIOSе "проблемы Int 13h", ограничивающей диски до 8.4Gb, схема адресации стала аналогичной ATA-интерфейсу:
В режиме CHS                      	В режиме LBA
С максимум = 2^16 = 65536 (16 бит)	16+4+8=28 бит
H максимум = 2^4 = 16 (4 бит)     	
S максимум = 2^8 = 255 (8 бит)    	
Т.е. теоретически можно было работать с самыми большими дисками 137.4Gb. НО, при пересчёте цилиндров по старой схеме, 16 бит не хватит. Например, диск на 41.2Gb с конфигурацией 19 710/16/255, получал от винчестера LBA-значение количества секторов 80 416 800 шт. и при пересчёте по "стандартному" алгоритму с 16-ю головками и 63-мя секторами получалось: 80 416 800 / (16*63) = 79 778 цилиндра. 
79 778 > 65 536 (2^16) и поэтому не помещалось в 16 бит. Соответственно использующийся алгоритм с 16-битным делением просто зависал из-за ошибки переполнения. Для решения проблемы нужно было заменить все инструкции 16-битного деления на 32-битные и добавить условие: если LBA-значение количества секторов диска превышает: 65 536x16x63 = 66 060 288 секторов = 33.8Gb (31.5ГБ), то количество секторов приравнивается к 255.
thread_title: 33.8Gb, год 1999-й, лето.

message: Не все BIOS решили "проблему 32Gb" и в результате была исправлена лишь одна ошибка, связанная с переполнением при 16-битном делении. Дело в том, что для вывода на экран объёма винчестера использовался 16-битный регистр, объём выводился в мегаБайтах, итого максимальный диск мог быть: 2^16 - 1 = 65 535Mb = 65.5Gb (64ГБ). Позже для исправления этой проблемы было сделано следующее условие: до 64Гб - выводить ёмкость в мегаБайтах, выше - в гигаБайтах.
thread_title: 65.5Gb, год 2000-й, зима.

message: Диски достигли предела стандарта ATA. Для его преодоления нужно менять сам "интерфейс". Что, например, и предложил Maxtor в своей спецификации на UDMA133.
--Mixabest 21:19, 24 января 2010 (UTC)
thread_title: 137.4Gb, год 2002-й.

message: Сколько байт даёт? Мой Skype плагин в Гугл Хром v16 из кода делает телефонный номер! --ЗЕМЛЕРОЙКА 18:18, 22 декабря 2011 (UTC)
thread_title:  8.4 ГБ (512 байт даёт) 

message: "Максимальный размер диска (не раздела!), поддерживаемый MBR."
Скорее всего MBR поддерживает диски емкостью более 2 TB. Судя по структуре Partition Table с помощью MBR можно создать два раздела, общим размером чуть менне 4 TB(точнее наверное 4 TB - 2*512). Например по этой ссылке с помощью MBR был размечен жесткий диск размером 3 TB. http://forum.ru-board.com/topic.cgi?forum=84&topic=3742
В частности в англовики есть   
"Sector indices have always begun with a 1, not a zero, and due to an early error in MS-DOS, the heads are generally limited to 255[citation needed] instead of 256. Both the partition length and partition start address are sector values stored as 32-bit quantities. The sector size is fixed at 512 (29) bytes, which implies that either the maximum size of a partition or the maximum start address (both in bytes) cannot exceed 2 TiB−512 bytes (2,199,023,255,040 bytes or 4,294,967,295 (232−1) sectors × 512 (29) bytes per sector). Alleviating this capacity limitation was one of the prime motivations for the development of the GUID partition table (GPT)."
thread_title:  Возможно информация не соответствует действительности.