2017-08-10 63 views
-2

我打算爲閃存可移動設備編寫一個磁盤分區創建程序,主要由基於SCSI的I/O控制並通過LBA地址訪問。在閃存存儲分區表上如何確定磁盤幾何形狀(C/H/S)?

作爲參考,我正在研究由Ubuntu的磁盤實用程序進行分區和格式化的SD卡上的分區表。

我在Linux中使用'parted'軟件的'unit'命令來觀察CHS單元和字節單元的卡參數。

下面是一個8GB的SD卡15122432個部門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 

下面是一個4GB的SD卡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)。他們有關係嗎?

但是如何確定這些值?這些依賴於操作系統或文件系統嗎?

+0

我投票結束這個問題作爲題外話,因爲這更適合Unix和Linux堆棧交換! –

回答

0

磁盤幾何體位於機載設備控制器中,OS通過驅動程序從控制器請求它。請求/應答格式在此類設備的協議定義中指定。

很久以前,我寫了PDP-11的IDE驅動程序,記住一些關於IDE/ATA協議的東西。我不知道現代SATA或SCSI設備的詳細信息, ,因此只能回答有關ATA/IDE的信息。

一個IDE設備有特殊的操作「識別」(代碼0xEC),驅動程序發送到設備。驅動程序將此opcode命令發送到控制端口,此後,當設備設置標誌DRDY(設備就緒)讀取512字節塊時,包含答案。答案包含磁盤信息(製造商,序列號等)和幾何圖形。

例如參見this code,其中程序向ATA發送請求並解析答案,包含磁盤幾何。

我還可以說些什麼:

  1. IDE設備可以接受 「上傳幾何」(代碼0x91)。即驅動程序可以發送 請求到設備,並說「你將有X個扇區,Y個磁頭,Z 柱面」,然後設備接受ahd使用這個「虛擬 幾何」。
  2. 某些設備不知道它們的幾何形狀,並且在啓動過程中,BIOS 必須向設備解釋其具有的幾何形狀。否則,它 只是不起作用。
  3. 某些設備存儲外部虛擬幾何圖形,由電腦 在1中指定,即使在重新上電後也要記住並使用它。
  4. 如果您設置了與默認值不同的「虛擬幾何圖形」,則某些 設備可能會在I/O錯誤後自動返回到默認幾何圖形。 因此,它會產生文件系統破壞。