无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7968|回复: 12
打印 上一主题 下一主题

[原创] 硬盘分区表CHS参数及分区DBR扇区磁头数与启动的关系

[复制链接]
1#
发表于 2011-6-22 14:13:21 | 显示全部楼层

回复 1 楼

你这个分区表太牛了,竟然有 5 个解。

多解性被你验证了。谢谢。
回复

使用道具 举报

2#
发表于 2011-6-22 16:59:35 | 显示全部楼层
grub4dos 本来就有分区表和 BPB 的更正手段。

geometry --tune --sync 就是用于这个目的的。

这条命令首先获得准确的 H 和 S,然后再把它写往分区表以及各个主分区的 BPB 上。目前似乎逻辑分区不更改。逻辑分区一般靠后,更改起来,也可能不太可靠。其实,主分区也有可能是靠后的,更改起来也一样不可靠。所谓不可靠,就是说,由于 BIOS 的 INT13 的错误,有可能无法写入大的扇区号,或者,当你写入大的扇区号时,实际却写入小的扇区号了,这会造成灾难。虽然你也没错,我们的程序都没错,仅仅是 BIOS 有错,那就完蛋。

所以,安全起见,即使是硬盘,也不要往大的扇区号执行写操作。

最保险的做法是在保护模式的操作系统(Windows、Linux)下执行写操作,那样就不会受到 BIOS bug 的影响了。

如果你知道你的全部四个主分区的起始扇区都在 BIOS 的“安全写” 范围以内(即扇区号都比较小,比如都在 137G 以内),那么,执行 geometry --tune --sync 就是安全的。
回复

使用道具 举报

3#
发表于 2011-6-22 19:56:54 | 显示全部楼层
光是根据分区表,只能检查是否矛盾、是否合法,不能确定 BIOS 所认可的 CHS 是什么样的。

按照古老的规范,只有 int13/ah=8 返回的 CHS 才是可靠的。但这块硬盘连接到不同的主板,所得到的 CHS 可能是不同的,因为这个情况与 U 盘一样。控制权都在主板 BIOS。而且,int13/ah=8 有可能是 buggy 的,那么就可能是错误的。

用 grub4dos 的几何参数探测,以及用 fbinst,可以得到正确的 CHS。

我认为,光是保证分区表合法,以及分区表与 BPB 一致,这是不够的。仍有潜在的错误存在,那就是,这些 CHS 并不等于 BIOS 所要求的 CHS。那么,今后在某一时刻,仍然可能会碰到问题(主要是启动 DOS 可能会失败)。
回复

使用道具 举报

4#
发表于 2011-6-23 12:50:49 | 显示全部楼层
有时候,一个话题,讨论到某种程度也就可以了,没必要再深究。

自从 Win98 以后,硬盘的容量大了,硬盘都支持 LBA。所以,即使 CHS 是混乱的,也不太要紧。

把分区表设置好,启动分区的 ID 字节,要设置为支持 LBA 的


  1. 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       bf  Solaris        
  2. 1  FAT12           24  NEC DOS         81  Minix / old Lin c1  DRDOS/sec (FAT-
  3. 2  XENIX root      39  Plan 9          82  Linux swap / So c4  DRDOS/sec (FAT-
  4. 3  XENIX usr       3c  PartitionMagic  83  Linux           c6  DRDOS/sec (FAT-
  5. 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c7  Syrinx         
  6. 5  Extended        41  PPC PReP Boot   85  Linux extended  da  Non-FS data   
  7. 6  FAT16           42  SFS             86  NTFS volume set db  CP/M / CTOS / .
  8. 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set de  Dell Utility   
  9. 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt         
  10. 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS access     
  11. a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e3  DOS R/O        
  12. b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor      
  13. c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs        
  14. e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  GPT            
  15. f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ef  EFI (FAT-12/16/
  16. 10  OPUS            55  EZ-Drive        a6  OpenBSD         f0  Linux/PA-RISC b
  17. 11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor      
  18. 12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor      
  19. 14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS secondary  
  20. 16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     fb  VMware VMFS   
  21. 17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
  22. 18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
  23. 1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
  24. 1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
复制代码


也就是说,设置为(0C) for FAT32,或者 (0E) for FAT16 ,似乎就可以让 DOS 7.1 以 LBA 的方式来访问分区了。

如此一来,似乎不会碰到问题了。我不能很确定,因为我没有实际检验过这个说法。

=========

而那些关于 CHS 的讨论,大多都是针对 U 盘的。只有 USB 设备才有可能不支持 LBA。所以,也只有在讨论 U 盘的时候,才有必要讨论有关 CHS 的问题。
回复

使用道具 举报

5#
发表于 2011-6-23 13:23:48 | 显示全部楼层
问题是,能严格区分硬盘和 U 盘吗?

在 Windows 下确实可以区分,那个“可移动磁盘” 就是 U 盘。但 diskgen 运行在 DOS 下,就不容易区分了,如果只是通过 BIOS 来做的话。

那些支持 LBA 的 U 盘 BIOS,确实不受影响。但那些只支持 CHS 的,可以判定为 U 盘。

可以这样:凡是支持 LBA 的,都可以看成硬盘,不管是不是硬盘。而不支持 LBA 的,就可以判定为 U 盘了。

因此,对于那些支持 LBA 的情况,可以永远使用 H=255,S=63。

不过,如果是 U 盘,那么,它插到别的机器上,有可能不支持 LBA 了,那样,还是会出问题的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-3 16:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表