2017-08-10 5 views
-2

Je vais écrire un programme créateur de partition de disque pour les périphériques amovibles à mémoire flash, principalement contrôlés par des E/S basées sur SCSI et accessibles avec l'adresse LBA.Comment la géométrie du disque (C/H/S) a été déterminée sur la table de partition du stockage de la mémoire flash?

Pour référence, je recherche la table de partition sur les cartes SD qui ont été partitionnées et formatées par l'utilitaire de disque d'Ubuntu.

J'ai utilisé la commande 'unit' du logiciel 'parted' sous Linux pour observer les paramètres des cartes avec unité CHS et unité d'octets.

Ce qui suit est une carte SD de 8 Go avec 15122432 secteurs de LBA:

[email protected]:~ $ 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 

Ce qui suit est une carte SD de 4 Go avec 7585792 secteurs de 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 

De mon observation, les valeurs de géométrie de disque (C/H/S) sont différentes sur une carte SD de capacité différente, et les valeurs de géométrie sont associées à l'adresse de fin CHS de la fin de la partition. Il semble que ..

La carte avec la partition qui termine le tuple CHS est (c, h, s), quelle géométrie de disque sera (c + 1/h + 1/s + 1). Sont-ils liés?

Mais comment les valeurs sont-elles déterminées? Est-ce que ceux-ci dépendent du système d'exploitation ou du système de fichiers?

+0

Je vote pour clore cette question hors-sujet parce qu'elle est mieux adaptée pour Unix & Linux Stack Exchange! –

Répondre

0

La géométrie du disque se trouve dans le contrôleur de périphérique intégré et le système d'exploitation le demande au contrôleur via le pilote. Le format de demande/réponse est spécifié dans la définition de protocole de ce périphérique. Il y a longtemps, j'ai écrit un pilote IDE pour PDP-11, et je me souviens de quelque chose au sujet du protocole IDE/ATA. Je ne connais pas les détails sur les périphériques SATA ou SCSI modernes, , donc je ne peux répondre qu'à propos d'ATA/IDE.

Un périphérique IDE a une opération spéciale "identifier" (code 0xEC), que le pilote envoie au périphérique. Le pilote envoie cette commande opcode au port de contrôle et, par la suite, lorsque l'indicateur de jeu de périphériques DRDY (périphérique prêt) lit le bloc de 512 octets, contient une réponse. Une réponse contient des informations sur le disque (fabricant, série, etc.) et la géométrie. Voir par exemple this code, où le programme envoie une requête à ATA et analyse la réponse, contient la géométrie du disque.

Ce que je peux dire de plus:

  1. périphérique IDE peut accepter "géométrie téléchargée" (code 0x91). C'est à dire. le conducteur peut envoyer la demande à l'appareil, et dire "vous aurez X secteurs, têtes Y, cylindres Z ", et par la suite l'appareil acceptera et utilisera cette "géométrie virtuelle ".
  2. Certains périphériques ne connaissent pas leur géométrie et, au cours du démarrage, le BIOS doit expliquer au périphérique la géométrie dont il dispose. Sinon, il ne fonctionne tout simplement pas.
  3. Certains périphériques stockent la géométrie virtuelle externe, spécifiée par l'ordinateur dans 1, et mémorisent et l'utilisent même après un cycle d'alimentation.
  4. Si vous configurez une "géométrie virtuelle", différente de la valeur par défaut, certains périphériques peuvent revenir automatiquement à la géométrie par défaut après une erreur d'E/S. En conséquence, il produit la destruction du système de fichiers.