无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8827|回复: 16
打印 上一主题 下一主题

请问一键还原软件如何做到在1024柱面后面启动DOS

[复制链接]
跳转到指定楼层
1#
发表于 2008-2-6 14:04:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
品牌机如联想的台式机的一键恢复功能,估计是用自己的操作系统(或LINUX)或独立的底层软件来完成这种操作,而现在有一些F10一键还原的软件,其原理是在硬盘的最后分出一个区来,在这里运行WINDOWS98的DOS,然后配合无损分区软件和GHOST来完成备份和恢复,我在这里有个疑问。

我知道DOS是不能在1024柱面之后启动的,但是这里很明显,现在硬盘动辄80G、160G,在最后的分区肯定超过1024柱面,这里的DOS是如何启动的呢?

我听说有“扩展的INT13中断”,难道是这个原因么,我学过汇编,难道是操作系统增加了BIOS中断的功能?我学过汇编,似乎也可以自己修改BIOS中断,是否能告诉我原理呢,谢谢!

还有,难道WINDOWS98的DOS有这种扩展的INT13中断么?我觉得应该没有,因为我曾经用过一种叫做“虚拟软盘 VFLOPPY”的软件,在XP下加一个菜单进入纯DOS,可是我发现这款软件有时候起作用,有时候却死机,后来仔细观察死机时的画面提示,发现有“1024”字样,估计就是XP用久了,C盘装的东西多了,造成此软件安装时超过1024柱面所致。 请教各位网友了
2#
发表于 2008-2-7 10:55:43 | 只看该作者
现在都没这限制了吧

如果是通过硬盘上dos启动扇区来启动io.sys从而启动dos
只要求这个分区是主分区就可以了



如果是通过其他引导管理器来仿真软盘镜像启动到dos
则没有要求
例如矮人的DOS工具箱,MAXDOS工具箱,都是通过grub4dos来启动一个ima/img软盘镜像
这个img/ima文件可以是任意位置的
不受主分区限制
回复

使用道具 举报

3#
发表于 2008-2-7 11:18:29 | 只看该作者
dos早就没此限制了
回复

使用道具 举报

4#
发表于 2008-2-7 11:39:43 | 只看该作者
要在大硬盘1024柱面后启动DOS,需要MBR程序代码使用INT13扩展功能,INT13扩展功能是用包来提供读写盘参数的,与原来INT13的C、H、S调用格式完全不同,他的寻址方式改为按扇区编号进行,目前仅用了16个字节定义参数包,其中8个字节表示寻址的扇区号,可以寻址85亿TB的存贮空间,而且该格式还具有无限的扩展空间,由于包头部定义了一个字节来表示包长度,当前仅用到10H,还可以一直用到F0H,即15X16字节,其所能表示的巨大容量是难以想象的,所以只要今后修改并加长该定义,就可以满足很长时期的应用要求了,不再受原柱面、磁头、扇区参数的限制,在这种方式下,可能的限制来自于分区表的四字节分区长度表示空间,四字节可以表示2000G大小的磁盘空间,那是现在使用的分区表运用的极限,当硬盘到达2000G容量水平时,不知会有怎样的分区表结构定义出现?
根据fujianabc 兄的提醒,重新修改了一些数据,谢谢fujianabc


[ 本帖最后由 lvyanan 于 2008-2-10 10:52 AM 编辑 ]
回复

使用道具 举报

5#
发表于 2008-2-7 12:22:10 | 只看该作者
INT13扩展功能不是由DOS系统提供支持的,INT13扩展功能是由EBIOS提供支持,目前的BIOS都支持该功能,只要运用就可以了,DOS下编程也可以用该功能来实现大硬盘的读写操作。
回复

使用道具 举报

6#
 楼主| 发表于 2008-2-8 15:36:10 | 只看该作者
非常感谢,谢谢楼上4位朋友的帮助讲解。
回复

使用道具 举报

7#
发表于 2008-2-10 10:07:06 | 只看该作者
原帖由 lvyanan 于 2008-2-7 11:39 AM 发表
可能的限制来自于分区表的四字节分区长度表示空间,四字节可以表示800G大小的磁盘空间,那是现在使用的分区表运用的极限,当硬盘到达800G容量水平时,不知会有怎样的分区表结构定义出现

分区表四字节使得硬盘容量的限制是2TB,不是800GB。

当硬盘容量超过2tb后,就不能使用mbr分区表了,要使用其他类型的分区表,比如windows的动态磁盘或者gpt分区表等。
回复

使用道具 举报

8#
发表于 2008-2-10 10:33:55 | 只看该作者

回复 #7 fujianabc 的帖子

说的没错,我把16进制的800H直接看成10进制的了,感谢提醒,否则误人子弟。
回复

使用道具 举报

9#
发表于 2008-2-10 11:28:00 | 只看该作者
老版本的DOS的FDISK创建的MBR会有这个问题
回复

使用道具 举报

10#
发表于 2008-2-10 15:32:24 | 只看该作者
原帖由 netwinxp 于 2008-2-10 11:28 AM 发表
老版本的DOS的FDISK创建的MBR会有这个问题

不是DOS版本的问题吧?应该是MBR分区表定义的问题,每个分区表项只有16个字节,除掉盘号、磁头号、柱面号、扇区号以及分区属性标志占用了5个字节外,还有就是分区终止磁头号和分区终止柱面扇区号占用的3个字节,剩下的8个字节用4个来表示保留扇区数,另4个字节表示本分区占用的扇区数,这个定义与操作系统无关,而是各个系统要遵守的标准。
回复

使用道具 举报

11#
发表于 2008-5-19 08:45:18 | 只看该作者
CHS模式对应的是真正的地址,而一般硬盘的磁头数为2或4,所以有了262/514M(按1024算为256/512M)的限制。
===================
LBA是硬盘FireWare挪用磁头数对超过1024柱面进行换算,虚拟出逻辑磁头号和逻辑柱面号。
=======
然而INT 13H的02和03号功能地址格式为—
DH=磁头号、CL的bit7—bit6=柱面号bit9—bit8 bit5-bit0=扇区号、CH柱面号的bit7—bit0,于是有了8.4G的限制。
***事实上分区表项1—3和5—7就是对应于此的***
=======
分区表项格式:
0:分区激活标志
1:开始磁头号
2~bit7—bit6:开始柱面号的bit9—bit8
 bit5-bit0:开始扇区号
3:开始柱面号的bit7—bit0
4:分区使用的系统标记
5—7:结束地址(格式和1—3类似)
8—11:分区之前的扇区总数
12—15:分区所占的扇区总数
在早期DOS(和WINNT)的分区和格式化好像只对1—3和5—7进行解释,所以也就有了柱面号不能大于1023的情况和8.4G(按1024来算是8G)的限制。
后来的则优先对8—11进行优先解释,地址转换交给分区引导及它的BPB和操作系统,也就突破了8.4G限制。(对于8G以上它会把5-7填充为FE,FF,FF)
但它只用了4字节来表示,远远没有达到能支持LBA48(6字节)的标准,所以一定会有2TB的限制,这就是兼容的代价。
对Vista没研究,或许它已经改了(可能这就是它不再兼容FAT的缘故吧)。
====================
而扩展INT 13H使用的数据包格式:
WORD InfoSize; // 数据包尺寸 (26 字节)
WORD Flags; // 信息标志
DWORD Cylinders; // 磁盘柱面数
DWORD Heads; // 磁盘磁头数
DWORD SectorsPerTrack; // 每磁道扇区数
QWORD Sectors; // 磁盘总扇区数
WORD SectorSize; // 扇区尺寸 (以字节为单位)
很显然,INT 13H扩展可以读取的将是一个接近天文数据的容量2的32x32x32x16次方字节(2048D,目前最大也就定义到DB了)。
====================
然而不少早期的HDC可能为了节省成本,只用了28bits(和网上的说法有点不同的是nf2的HDC是支持LBA48的,现在的全乱转载,连错误也照抄@_@)来表示磁盘地址,于是有了137G(按1024来算是128G)的限制。
现在一般采用48bits,可访问2的48次方x512字节(128P),已经很大了,但比起扩展INT 13H来说依然是小太多了。
====================
INT 19H其实只对MBR有AA55H的限制,并没有分区表项的说法,分区表项实际上是操作系统为了兼容搞出来,等于是自我限制。
将来分区表项也许会用6字节表示分区位置,6字节表示分区长度(建议装有Vista的把MBR和NTFS分区的boot$传上来便于分析),这也许就是LBA48的本意吧,超过LBA48将是16字节分区表项的末日(也许该用32字节了)。
====================
linux的GPT格式不再是局限于分区表项,它使用后面的1个扇区来表达,早就突破的干干净净。

Vista分区表项好像不太一样(2T之内是一样的),据说采用混合格式的分区表项,另外FDISK不能创建大于2T的分区。

[ 本帖最后由 netwinxp 于 2008-5-20 01:22 PM 编辑 ]
回复

使用道具 举报

12#
发表于 2008-5-19 21:51:34 | 只看该作者
我终于看到了高手
听懂了部分,以前学的全忘了,没仔细分析它
回复

使用道具 举报

13#
发表于 2008-5-20 09:48:04 | 只看该作者
原帖由 netwinxp 于 2008-5-19 08:45 AM 发表
CHS模式对应的是真正的地址,而一般硬盘的磁头数为2或4,所以有了262/514M(按1024算为256/512M)的限制。
===================
LBA是硬盘FireWare挪用磁头数对超过1024柱面进行换算,虚拟出逻辑磁头号和逻辑柱 ...

不知道你为什么说vista分区表有不同?我目前尚未发觉有不同。xp和vista的$BOOT的区别也就只有里面的ntldr/bootmgr的差别了。

不过我现在vista的启动分区用的是fat16,像bootmgr和boot文件夹都在这个分区上。vista的系统分区是ntfs。

至于超过2TB,xp/vista也会让你用gpt分区表的。
回复

使用道具 举报

14#
发表于 2008-5-20 13:14:20 | 只看该作者
原帖由 fujianabc 于 2008-5-20 09:48 发表

不知道你为什么说vista分区表有不同?我目前尚未发觉有不同。xp和vista的$BOOT的区别也就只有里面的ntldr/bootmgr的差别了。

不过我现在vista的启动分区用的是fat16,像bootmgr和boot文件夹都在这个分区上 ...

xp的分区驱动文件不支持超过2T(ntfs.sys本身是支持2T以上的,新的sp3仍没有多大变化,很明显ms要把大家赶到vista),据说vista采用的混合分区表项,而不是类似GPT,我猜测可能是两项表示一个分区。
以后的FAT分区估计只能放到硬盘的最前面。你可以44把FAT16的分区放到一个8G以上的分区后面,早起DOS应该就会出问题。

[ 本帖最后由 netwinxp 于 2008-5-20 01:28 PM 编辑 ]
回复

使用道具 举报

15#
发表于 2008-5-20 20:08:24 | 只看该作者
原帖由 netwinxp 于 2008-5-19 08:45 AM 发表
而扩展INT 13H使用的数据包格式:
WORD InfoSize; // 数据包尺寸 (26 字节)
WORD Flags; // 信息标志
DWORD Cylinders; // 磁盘柱面数
DWORD Heads; // 磁盘磁头数
DWORD SectorsPerTrack; // 每磁道扇区数
QWORD Sectors; // 磁盘总扇区数
WORD SectorSize; // 扇区尺寸 (以字节为单位)
很显然,INT 13H扩展可以读取的将是一个接近天文数据的容量2的32x32x32x16次方字节(2048D,目前最大也就定义到DB了)。

我所掌握的资料与你的有较大差别,INT13H扩展磁盘服务的磁盘地址包的格式,目前长度为16位,该包的第一个字节就表示其包的长度,现在应使用的长度就是10H,不排除今后会使用增大了的磁盘地址包,现在的16位磁盘地址包已经有8个字节来表示磁盘扇区数,在很长一段时间里都是够用的,即使以后不够用,该磁盘地址包的结构也很容易扩展,只要修改包头部表示包长度的字节即可,理论上它可以达到255个字节长度,其所能表示的扇区数,基本上超出了人们的想象范围,我在自己编的引导程序中就是使用这种格式的地址包的,磁盘地址包的定义如下:
偏移     大小                    描述
0        1字节         包大小(长度,以字节为单位),目前固定为10H。
1        1字节         目前未使用,必须设为0。
2        1字节         当前要处理的扇区数,目前只支持1——127,拒绝更大的值。
3        1字节         目前未使用,必须设为0。
4        2字节         传送数据的内存偏移量(仅读/写)。
6        2字节         传送数据的内存段址(仅读/写)。
8        8字节         传送的起点扇区编号,对于不支持逻辑扇区的驱动器来说,EBIOS将地址转化为CHS格式,其公式为:逻辑扇区=(((柱面号X最大磁头数)+磁头号)X最大扇区数)+扇区号-1

[ 本帖最后由 lvyanan 于 2008-5-20 08:44 PM 编辑 ]
回复

使用道具 举报

16#
发表于 2008-5-21 12:49:18 | 只看该作者
原帖由 netwinxp 于 2008-5-20 01:14 PM 发表

xp的分区驱动文件不支持超过2T(ntfs.sys本身是支持2T以上的,新的sp3仍没有多大变化,很明显ms要把大家赶到vista),据说vista采用的混合分区表项,而不是类似GPT,我猜测可能是两项表示一个分区。
以后的FAT ...

vista和 64位xp/2003支持两种类型分区表:mbr和guid分区表(gpt)。xp的diskpart的convert命令也能把mbr转成gpt,但32位xp/2003无法访问
至于8gb后面的fat16,我没试过。fat32没问题。

[ 本帖最后由 fujianabc 于 2008-5-21 03:02 PM 编辑 ]
回复

使用道具 举报

17#
发表于 2009-7-30 09:49:37 | 只看该作者
都是深奥的知识,慢慢学习了!感谢大师的无私奉献呀!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-27 17:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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