Как геометрия диска (C/H/S) была определена в таблице разделов флэш-памяти?
Я собираюсь написать программу создания дисковых разделов для съемных устройств флэш-памяти, которая в основном управляется вводом-выводом на основе SCSI и осуществляется с адреса LBA.
Для справки я изучаю таблицу разделов на SD-картах, которые были разбиты на разделы и отформатированы утилитой дисков Ubuntu.
Я использовал команду "unit" программного обеспечения "parted" в Linux для просмотра параметров карт с модулем CHS и байтовым модулем.
Ниже приведена карта SD на 8 ГБ с 15122432 секторами LBA:
pi@raspberrypi:~ $ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit chs print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 1020,130,11
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 1020,239,62. Each cylinder is 7587kB.
Partition Table: msdos
Disk Flags:
Number Start End Type File system Flags
1 0,1,0 1019,238,61 primary ext3
(parted) unit b print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 7742685184B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 31744B 7738552319B 7738520576B primary ext3
Ниже приведено описание для SD-карты емкостью 4 ГБ с 7585792 секторами LBA:
(parted) unit chs print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 1019,71,29
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 1019,120,62. Each cylinder is 3809kB.
Partition Table: msdos
Disk Flags:
Number Start End Type File system Flags
1 0,1,0 1018,119,61 primary ext3
(parted) unit b print
Model: Generic CRM01 SD Reader (scsi)
Disk /dev/sda: 3883925504B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 31744B 3881656319B 3881624576B primary ext3
По моим наблюдениям, значения геометрии диска (C/H/S) различаются на SD-карте разной емкости, и значения геометрии, похоже, связаны с адресом конца CHS конца раздела. Это похоже на..
Карта с разделом, в котором заканчивается кортеж CHS (c, h, s), геометрия диска будет (c + 1 / h + 1 / s + 1). Они связаны?
Но как определяются значения? Это зависит от ОС или файловой системы?
1 ответ
Геометрия диска находится во встроенном контроллере устройства, и ОС запрашивает ее у контроллера через драйвер. Формат запроса / ответа указан в определении протокола такого устройства.
Давным-давно я написал драйвер IDE для PDP-11 и кое-что вспомнил о протоколе IDE/ATA. Я не знаю подробностей о современных устройствах SATA или SCSI, поэтому могу ответить только о ATA/IDE.
Устройство IDE имеет специальную операцию "идентификация" (код 0xEC), которую драйвер отправляет устройству. Драйвер отправляет эту команду кода операции на порт управления, и после этого, когда устройство устанавливает флаг DRDY (устройство готово), считывает блок 512 байт, содержит ответ. Ответ содержит информацию о диске (производитель, серийный номер и т. Д.) И геометрию.
Посмотрите, например, этот код, где программа отправляет запрос в ATA и анализирует ответ, содержит геометрию диска.
Что я могу сказать дополнительно:
- Устройство IDE может принимать "загруженную геометрию" (код 0x91). Т.е. драйвер может отправить запрос устройству и сказать "у вас будет X секторов, Y головок, Z цилиндров", и после этого устройство примет и использует эту "виртуальную геометрию".
- Некоторые устройства не знают свою геометрию, и во время запуска BIOS должен объяснить устройству, какая у него геометрия. Иначе это просто не работает.
- Некоторые устройства хранят внешнюю виртуальную геометрию, указанную компьютером в 1, и запоминают ее и используют даже после отключения питания.
- Если вы установите "виртуальную геометрию", отличную от стандартной, то некоторые устройства могут автоматически вернуться к стандартной геометрии после ошибки ввода-вывода. В результате это приводит к разрушению файловой системы.