Board logo

标题: 如何根据盘符知道分区在硬盘中的位置? [打印本页]

作者: lc2000     时间: 2006-7-19 21:29    标题: 如何根据盘符知道分区在硬盘中的位置?

各位大侠,小弟目前利用ghost制作备份光盘。想把C盘生成镜像文件到E盘,使用了如下命令:ghost -clone,mode=pdump,src=1:1,dst=1:3:\backup.gho:1 -z2 -sure -fx。后来我发现有的硬盘C盘并不一定在硬盘的第一个分区,但是ghost是按硬盘的第几分区来做镜像的,所以请问有没有办法根据盘符得到分区在硬盘中的位置,然后再进行ghost。希望能给出脚本,谢谢了。
作者: fastslz     时间: 2006-7-19 23:10


  Quote:
Originally posted by lc2000 at 2006-7-19 21:29:
后来我发现有的硬盘C盘并不一定在硬盘的第一个分区

首先说明ghost src=1:1参数是备份第一个硬盘上第一个分区。
至于你说的C盘并不一定在硬盘的第一个分区的情况是因为用U盘HDD方式启动的,此时U盘是第一个硬盘,真实的硬盘为第二了

解决办法:
在U盘里放一个标记文件U.SYS
@echo off
set disk1=1
if exist C:\U.SYS set disk1=2
ghost -clone,mode=pdump,src=%disk1%:1,dst=1:3:\backup.gho -z2 -auto -sure -fx
作者: lc2000     时间: 2006-7-19 23:38
呵呵,不是这样的。我是用ezboot做的是启动光盘,跟U盘没有关系。之所以会出现C盘不是第一个硬盘的第一个分区,是因为在某些品牌机上(比如DELL)出厂时在硬盘上分了一个几十兆的分区,装好系统在“磁盘管理器”里看这个分区是第一个分区,但这个分区没有盘符,在我的电脑里是看不到的,此时如果用上面的ghost镜像其实会把这个分区镜像到D盘,达不到我的目的。所以我需要根据盘符进行镜像,也就是得到C盘是的几个分区,然后在进行ghost就不会出错了。
作者: lc2000     时间: 2006-7-19 23:58
或者能够根据操作系统装在哪个分区就镜像这个分区,也就是得到操作系统所在分区的位置。我所安装的操作系统都是windows2000 Server,最终目的是要备份操作系统分区。
作者: fastslz     时间: 2006-7-20 00:03
哦,那我建议你用GDISK判断DELL的那个特殊分区(比如卷标,大小)
@echo off
set area=1
gdisk 1 >disk1.txt
rem 暂且卷标为DELL
find /i "DELL" disk1.txt
if not errorlevel 1 set area=2
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx

[ Last edited by fastslz on 2006-7-20 at 00:05 ]
作者: fastslz     时间: 2006-7-20 01:06
如果要考虑IMG容量也可以用ghost -dd 获得磁盘信息来find卷标名判断
作者: lc2000     时间: 2006-7-20 14:38
我用ghost -dd看了一下,下面是贴图。其中BOOT 为 80的应该就是操作系统分区,是这样吧?可是用DOS命令行不知道怎么写,小弟对批处理还不太熟,希望大侠指点。另外我的分区都是NTFS格式的,可为什么NTFS那列显示的都是NO?
作者: lc2000     时间: 2006-7-20 14:40
忘了贴图
附件 1: 4.jpg (2006-7-20 14:40, 36.59 K, 下载附件所需积分 1点 ,下载次数: 2)



作者: lc2000     时间: 2006-7-20 14:42
因为在VMWare上抓的图,无法使用DELL自己的硬盘,所以没有那个分区,但是我想效果是一样的
作者: fastslz     时间: 2006-7-20 14:51
ghost -dd 要几个屏幕的贴一个图没用

执行ghost -dd 后会在当前目录生成一个GHSTSTAT.TXT文件把GHSTSTAT.TXT贴出来
我只要那特殊分区卷标就行了

[ Last edited by fastslz on 2006-7-20 at 14:52 ]
作者: lc2000     时间: 2006-7-20 15:36
ghost -dd生成的文件,dell保留分区的卷标应该是DellUtility。但是DELL的这个分区以后新机型有可能会变化啊。我的目的是找到操作系统所在分区的位置,这个文本里已经体现了,那个80的就应该表示是系统盘,我就是不知道怎么用DOS批处理写出来。
刚才给DELL打了电话,他们说这个保留的64M隐藏分区没什么用处,可以删除。但是我觉得还是应该把ghost命令写成活得,这才是程序员应该做的事情,如果写成1:1,以后又碰到别的品牌机器又怎么办呢,所以这个问题还是要解决的。

[ Last edited by lc2000 on 2006-7-20 at 15:53 ]
附件 1: GHSTSTAT.TXT (2006-7-20 15:36, 4.08 K, 下载附件所需积分 1点 ,下载次数: 18)

作者: fastslz     时间: 2006-7-20 15:53
@echo off
set area=1
GHOST -DD >NUL
find /i "DellUtility" GHSTSTAT.TXT
if not errorlevel 1 set area=2
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx

这样就ok了,如备份dell机自动转换src=1:2,普通机还是src=1:1
作者: lc2000     时间: 2006-7-20 15:58
楼上的高手,如果以后DELL机的这个卷标发生变化了呢,我觉得最好是根据
# Ord Boot Id Ext     First        Num       Last       Used NTFS
0  0    0  de No         63     128457     128520          0 No
1  1   80   7 No     128520   20964825   21093345          0 No
2  2    0   7 Yes   21093408   62910477   84003885          0 No
3  3    0   7 Yes   84003948   72228177  156232125          0 No
这块,如果发现BOOT为80则是操作系统分区,位置是Ord+1,这个有办法用DOS命令实现吗?
作者: lc2000     时间: 2006-7-20 16:00
楼上的高手,如果以后DELL机的这个卷标发生变化了呢,我觉得最好是根据
# Ord Boot Id Ext     First        Num       Last       Used NTFS
0  0    0  de No         63     128457     128520          0 No
1  1   80   7 No     128520   20964825   21093345          0 No
2  2    0   7 Yes   21093408   62910477   84003885          0 No
3  3    0   7 Yes   84003948   72228177  156232125          0 No
这块,如果发现BOOT为80则是操作系统分区,位置是Ord+1,这个有办法用DOS命令实现吗?
作者: fastslz     时间: 2006-7-20 16:02
哦.、忘了说,注意一下GHSTSTAT.TXT路径哦
即使用GHOST -DD >A:\GHSTSTAT.TXT命令也无效
作者: fastslz     时间: 2006-7-20 16:18
用80判断也是可行的,但是80分区可能有2个以上的,所以语法要复杂的多,另外一般有2个80都是高手所以一般情况他不需要别人的Ghost的。

[ Last edited by fastslz on 2006-7-20 at 16:46 ]
作者: lc2000     时间: 2006-7-20 19:17
那么你给出的find命令DOS 7.1里有吗?
作者: fastslz     时间: 2006-7-20 19:55
find是外部命令,如果是标准DOS 7.1应该有的
刚才我测试了一下80也会出现在最后一个盘的,下面给出80方法,双硬盘或有linux主分区可能会出现错误(即使错误src=1:1还是执行的)
@echo off
set area=1
GHOST -DD >NUL
find /i "1   80" GHSTSTAT.TXT
if not errorlevel 1 set area=2
find /i "2   80" GHSTSTAT.TXT
if not errorlevel 1 set area=3
find /i "3   80" GHSTSTAT.TXT
if not errorlevel 1 set area=4
find /i "4   80" GHSTSTAT.TXT
if not errorlevel 1 set area=5
find /i "5   80" GHSTSTAT.TXT
if not errorlevel 1 set area=6
find /i "6   80" GHSTSTAT.TXT
if not errorlevel 1 set area=7
find /i "7   80" GHSTSTAT.TXT
if not errorlevel 1 set area=8
find /i "8   80" GHSTSTAT.TXT
if not errorlevel 1 set area=9
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx
作者: lc2000     时间: 2006-7-20 22:24
你说的双硬盘或有linux主分区这两种情况是不会出现的,呵呵。另外像这样的写法是不是8次find都会调用?如果是的话效率低了点,有没有像C语言一样break的方法?
另外find语句中要搜索的字符串"1   80"中间必须是3个空格吗?
还有一个潜在的问题是如果area=3成立的话,ghost命令会出错的,因为src不能与dst是相同的分区。
感谢一根葱大侠的赐教!
作者: fastslz     时间: 2006-7-21 13:50
要提高效率find次数是可以跳过,"1   80"中间3个空格也属于字符串所以是必须的。
关于潜在的问题用GHOST无人参与备份方法也避免不了的,出现此情况的几率也可以忽略的,况且area=3情况并不多(即2个主引导分区),但是我们做批处理考虑兼容性也不能排除此情况的发生,假设某用户area=3那dst也绝对不是1:3:\,所以没有一个GHOST无人参与参数是完美的。

@echo off
GHOST -DD >NUL
find /i "0   80" GHSTSTAT.TXT
if not errorlevel 1 set area=1
if "%area%"=="1" goto gho
find /i "1   80" GHSTSTAT.TXT
if not errorlevel 1 set area=2
if "%area%"=="2" goto gho
find /i "2   80" GHSTSTAT.TXT
if not errorlevel 1 set area=3
if "%area%"=="3" goto gho
find /i "3   80" GHSTSTAT.TXT
if not errorlevel 1 set area=4
if "%area%"=="4" goto gho
find /i "4   80" GHSTSTAT.TXT
if not errorlevel 1 set area=5
if "%area%"=="5" goto gho
find /i "5   80" GHSTSTAT.TXT
if not errorlevel 1 set area=6
if "%area%"=="6" goto gho
find /i "6   80" GHSTSTAT.TXT
if not errorlevel 1 set area=7
if "%area%"=="7" goto gho
find /i "7   80" GHSTSTAT.TXT
if not errorlevel 1 set area=8
if "%area%"=="8" goto gho
find /i "8   80" GHSTSTAT.TXT
if not errorlevel 1 set area=9
:gho
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx
作者: lc2000     时间: 2006-7-21 16:58
深表感谢,终于得到了一个比较完美的解决办法。
作者: gmy     时间: 2006-8-16 21:55
如果GHOST不能自动跳过对隐藏首分区的判断,这个问题是很重要的,因为没有亲自看到过,也没办法做到实验,如果时机适合,一键GHOST的今后版本会考虑加入此功能.
作者: fastslz     时间: 2006-8-16 22:18
我用真机状态试过的确实可行,用PQ分成3个主分区,即第一个主分区(隐藏的)第二个主分区(隐藏的)第五个主分区也是最后一个分区(活动的),此时出现4   80用上面的方法直接备份了第五个分区系统。
也就是说一键下去肯定是系统盘。如果双硬盘上面的方法确实有问题的。但是同样可以避免,如:先判断是否有双硬盘,是双硬盘跳过同时set area=设置成1,保持原来的功能。
作者: GOTOmsdos     时间: 2006-8-18 00:03
我刚写了迷你硬盘读写器,刚增加了支持扩展分区(这就支持全部分区了),也加了带各种选项的显示分区的功能,DOS盘号也标出来了
帖几个共参考:(各项名称暂没加上)

我共三个硬盘

一: 全部分区
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 2]       *2       0 00 01CE 07 01D2   20482875   20482875
[ 3]        3       1 00 01BE 07 01C2   40965813   20482812
[ 4]        4       1 00 01BE 07 01C2   61448688   20482812
[ 5]        5       1 00 01BE 07 01C2   81931563   20482812
[ 6]        6       1 00 01BE 07 01C2  102414438   20482812
[ 7]        7       1 00 01BE 07 01C2  122897313   16386237
[ 8]        8       1 00 01BE 07 01C2  139283613   20788047
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[10]        2       1 00 01BE 83 01C2    4498263   20081187
[11]        3       1 00 01BE 83 01C2   24579513     401562
[12]        4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[13]        5       1 00 01BE 83 01C2   26202078   13815837
[14]  3 >> *1       0 00 01BE 1B 01C2         63    8996337
[15]       *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[16]        3  5 G: 1 00 01BE 06 01C2   29479338    1381527

二: 显示 NTFS,FAT
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 2]       *2       0 00 01CE 07 01D2   20482875   20482875
[ 3]        3       1 00 01BE 07 01C2   40965813   20482812
[ 4]        4       1 00 01BE 07 01C2   61448688   20482812
[ 5]        5       1 00 01BE 07 01C2   81931563   20482812
[ 6]        6       1 00 01BE 07 01C2  102414438   20482812
[ 7]        7       1 00 01BE 07 01C2  122897313   16386237
[ 8]        8       1 00 01BE 07 01C2  139283613   20788047
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[10]  
[11]  
[12]        4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[13]  
[14]  3 >>
[15]       *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[16]        3  5 G: 1 00 01BE 06 01C2   29479338    1381527

三: 显示FAT
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 2]  
[ 3]  
[ 4]  
[ 5]  
[ 6]  
[ 7]  
[ 8]  
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[10]  
[11]  
[12]        4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[13]  
[14]  3 >>
[15]       *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[16]        3  5 G: 1 00 01BE 06 01C2   29479338    1381527

四:只显示DOS顺序的盘
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[15]  3 >> *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[12]  2 >>  4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[16]  3 >>  3  5 G: 1 00 01BE 06 01C2   29479338    1381527


等等。。

另,只要,按规矩来 ,DOS盘符是有规律的,并且,每次启动都会按规律重排
WIN就乱了,盘号基本不变(当然可以在磁盘管理器中改。。)
WIN中的盘号记在注册表中的,别指望DOS程序知道你WIN的盘符(尽管有些DOS程序识别NTFS)

所以,最好记住物理盘序。。。

[ Last edited by GOTOmsdos on 2006-8-18 at 00:06 ]
作者: GOTOmsdos     时间: 2006-8-18 00:21
其实,分区这玩意儿,可以自己分的,只是最好要是一个CHS柱面的整数(就是到底)(否则,有些分区工具报错,不过也能用),自己算也行的,SPFDISK就是用柱面书来分区的,这样更直观,也使用户清楚了解分区的原理,否则,用户会觉得:分区的结果不于输入的完全一致,会奇怪。。

我前几天,买了新硬盘,没用分区工具分区,我用自己写的硬盘读写器把硬盘二的某一分区(包括MBR)弄到了新硬盘的第一分区,再把MBR的分区项改了,就能启动它了,本来是2个GB左右,后来我手工把他弄到增加一倍(把无用的第二FAT清零,再在DBR里,改大,就能用了)后来改成了4GB左右,在DOS下,实验正确的显示了改后的剩余空间,一切正常。。
(不过更好玩的是:在分区表里却仍然是2GB。  所以分区是可以自己控制调节的的,就象玩具。。这样才更有意思,别总是让只有什么魔术师才能魔术你的硬盘,自己也能魔的,不过,这需要你培养跟他的感情。。。)

[ Last edited by GOTOmsdos on 2006-8-18 at 00:33 ]
作者: fastslz     时间: 2006-8-18 00:28
是的ghost -dd参数对盘符缺乏规律性
用迷你硬盘读写器是不是能定位某个分区的某个文件呢(文件名)比如:不管分区格式定位1号分区上是否有ntldr?这样就能判断系统所在分区了。

[ Last edited by fastslz on 2006-8-18 at 00:31 ]
作者: GOTOmsdos     时间: 2006-8-18 00:42
迷你硬盘读写器是以扇区的方式,不支持解析文件,但是 NTLDR的位置好象不能确定系统分区的吧?(所谓系统分区可能有好几个)
比如,我在几个盘都装了2K/XP,我要备份D盘的系统分区呢?
作者: NaturalJ0     时间: 2006-8-18 00:44
我的思路是。我为什么一定要知道我要备份的盘是第几个盘呢。
原来我也觉得用 1:4 这种方法,硬盘分驱顺序固定有优点。但却和 WINDOWS 下的盘符不一定对的上。
那为什么不自己在 WINDOWS 下给硬盘打个标记呢。
在 WINDOWS 下首次运行程序,要求用户输入想备份的盘的盘符,然后我们去那盘上打个“备份标记”,再要求用户输入保存位置,我们再去打个“保存标记”。然后在 DOS 下去找标记,找到后不就能定准位了么。
假如用户要求改变备份盘和保存盘,那么再次运行 WINDOWS 下的程序,所以在程序开头先要把以前可能存在的“标记”先擦掉。
不知道我突然间想到的这个办法是否可行。 ^_^
作者: GOTOmsdos     时间: 2006-8-18 00:53
win 盘上打个“备份标记”, 能在DOS下识别吗?
就算LABEL法都不一定的,因为LABEL号实际上是个特殊的这个盘下的文件。。
作者: NaturalJ0     时间: 2006-8-18 00:57
标记可以是生成个怪名字的文件或目录啊
在 DOS 下只要用 IF EXIST 就能判断在该盘有没有,如果有,在 FOR 语句中把盘号给变量。
作者: fastslz     时间: 2006-8-18 01:02


  Quote:
Originally posted by GOTOmsdos at 2006-8-18 00:42:
迷你硬盘读写器是以扇区的方式,不支持解析文件,但是 NTLDR的位置好象不能确定系统分区的吧?(所谓系统分区可能有好几个)
比如,我在几个盘 ...

那是...所以也只能缩小范围到某盘某区,多硬盘多系统都是高手,自己容易解决。我们只是为菜鸟方便,其实盘符再乱也不怕,就怕没法定位NTFS上的文件
作者: NaturalJ0     时间: 2006-8-18 01:19
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%i:\"备份标记式怪文件名" set "备份盘符"=%%i
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%i:\"保存标记式怪文件名" set "保存盘符"=%%i

ghost..........src=%"备份盘符"%.........dst=%"保存盘符"%
作者: fastslz     时间: 2006-8-18 01:20


  Quote:
Originally posted by NaturalJ0 at 2006-8-18 00:57:
标记可以是生成个怪名字的文件或目录啊
在 DOS 下只要用 IF EXIST 就能判断在该盘有没有,如果有,在 FOR 语句中把盘号给变量。

标记针对NTFS非主动性,IF EXIST 没法找NTFS格式上的文件 NTFS驱动BUG实在是....
作者: NaturalJ0     时间: 2006-8-18 01:24
麻烦阁下帮我看下我的这个问题。
http://www.cn-dos.net/forum/viewthread.php?tid=22681&fpage=1
难道就是你刚才说的 NTFS 驱动问题?
作者: fastslz     时间: 2006-8-18 01:29
几乎没有一个NTFS驱动稳定的,也许加载NTFS驱动前就死机了,或者没法运行某些程序。
作者: NaturalJ0     时间: 2006-8-18 20:15
受 ghost -dd 的启发,自己学着做了个。
自认为能正确处理多硬盘和 WINDOWS/DOS 之间的盘符错位问题。

[ Last edited by NaturalJ0 on 2006-8-19 at 07:42 ]
作者: bdfcy     时间: 2006-8-18 20:40
应该还存在这样的问题:主分区是引导盘,系统装在其它分区(很可能是逻辑分区)
作者: NaturalJ0     时间: 2006-8-18 20:58
谢楼上提醒,的确少考虑了些情况。主分区是引导盘,系统装在其它逻辑分驱倒不是问题。我在想有没有可能引导的内容(比如 NTLDR )不在C盘,而在后面的D盘或什么的。我再去想想。

[ Last edited by NaturalJ0 on 2006-8-18 at 21:17 ]
作者: NaturalJ0     时间: 2006-8-18 21:19
我觉得好像没问题,我觉得 NTLDR 应该必然在 C 盘,不会跑到其它盘去。
作者: fastslz     时间: 2006-8-18 21:54


  Quote:
Originally posted by bdfcy at 2006-8-18 20:40:
应该还存在这样的问题:主分区是引导盘,系统装在其它分区(很可能是逻辑分区)

也太贪心了吧!此功能主要是去备份硬盘主活动分区,已经比原来src=1:1参数灵活多了,要想备份其他分区上的系统只能加入备份任意硬盘任意分区功能。
总之有NTFS格式存在,目前没有完美的解决方案。再说ghost8.3在2007年初还面临Vista的考验,Symantec又是否还更新DOS版的ghost。到时我的电脑还经不起Vista考验
作者: NaturalJ0     时间: 2006-8-18 22:08
楼上说的是,因为 NTFS 驱动问题,所以我尽量减少了对 NTFS 分驱的读写。最关键的依赖 NTFS 读写功能的决定性操作只有从 C 盘读取一个几字节大小的文件的内容。风险也就在这里一处了。如果这里读取文件未成功,那就挂了。哈。 ^_^
作者: fastslz     时间: 2006-8-18 22:10


  Quote:
Originally posted by NaturalJ0 at 2006-8-18 21:19:
我觉得好像没问题,我觉得 NTLDR 应该必然在 C 盘,不会跑到其它盘去。

如果你觉得NTLDR应该必然在C盘是错的,就那楼主来说在第2主活动分区,所以目前为止暂定?   80是对的。我测试的时候NTLDR(应该说主活动分区)在最后分区上,也就是说?   80肯定是能够启动的系统所在分区(包括DOS 9X 2000 XP 2003 Linux Unix.....)
作者: NaturalJ0     时间: 2006-8-18 22:11
哦,对,可以连着两个主区。这点我刚才没给想到。看来还要再改改。
作者: NaturalJ0     时间: 2006-8-19 00:03
我想问下,假如这样分区。

主区1(隐藏) 扩展区1 主区2 扩展区2 主区3 扩展区3 主区4 扩展区4
然后在 扩展区3 安装 XP
我想问,安装好 XP 后,在 XP 下的 C 盘,实际上是上面的哪个区?
引导文件又在哪个区?在 XP 下的哪个盘符上?
D E F G 等又会是什么顺序呢?

[ Last edited by NaturalJ0 on 2006-8-19 at 00:07 ]
作者: GOTOmsdos     时间: 2006-8-19 00:30
主区1(隐藏) 扩展区1 主区2 扩展区2   ???
这是不可能的!
扩展区只能有一个吧,所以全部逻辑盘总是连在一起的

你能这样分区,那GHOST,PQ等都得有你领导啦!
作者: NaturalJ0     时间: 2006-8-19 07:34
真不好意思,上面是我不懂在瞎写了,惭愧。
我想问问,在 NT 的 WINDOWS 环境下,有没有什么简单点儿的命令能精确的返回出当前系统是从哪个盘启动的。也就是当前 WINDOWS 系统启动时调用的 NTLDR 和 BOOT.INI 在当前 WINDOWS 环境下是哪个盘符。
作者: fastslz     时间: 2006-8-19 10:34
主分区只会出现在第1个、第2个、最后第2个和最后1个,每个硬盘上最多可以有4个主分区,且只有1个是活动的。

了解了上述规律,所以WINDOWS下也是用20楼的判断。
如WINDOWS下用其他命令的可以用%systemdrive%回车用vol获取卷标或序列,再用ghost32 -dd 获取其盘号。批处理怎么做自己掂量一下吧。
作者: fujianabc     时间: 2006-8-19 10:51
启动分区(ntldr所在分区)甚至不一定在第一硬盘上的:
比如ntldr,boot.ini等可以在第二硬盘的活动分区上,启动前在bios中设置从第二硬盘启动,启动后在windows的磁盘管理器中可以发现启动分区在第二硬盘上。

不过windows自己也经常认错启动分区,我的启动分区盘符是g:,在msconfig的boot.ini选项中一直从c:找boot.ini。不过磁盘管理器似乎总能找对启动分区的。
作者: fastslz     时间: 2006-8-19 12:17
你的情况在dos下无能为力了,WINDOWS下%systemdrive%用vol获取卷标用ghost32 -dd定位盘号的方法可行的,但必须有卷标,也可以判断在没有卷标的情况下创建一个卷标再用ghost32 -dd判断在定位盘号。

至于你的启动分区盘符是g:,我估计你的第2个硬盘在光驱IDE从上面,也可能你这个系统之前是在第1个IDE位置上安装的,再或者你用万能ghostxp安装xp,原生安装的xp盘符错乱会好一点的。
作者: NaturalJ0     时间: 2006-8-19 12:38
我也试过在两个硬盘上都装系统。但没有你的情况。
如果第一硬盘不拔掉,直接在第二硬盘上装系统,系统仍然会把启动项目添加到第一个硬盘上。如果事先把第一个硬盘拔掉,直接在第二个硬盘上装。装完再接上第一硬盘。并在 BIOS 里设置从第二硬盘启动。那这样启动后,第二硬盘的启动内容在 WINDOWS 下一般就是 C 盘。第一硬盘被当作添加的硬盘,所有盘符全根在后面了。
请问,fujianabc 的启动分区在 G 盘上,是怎么装出来的?我不会 = = ,想了解下。

[ Last edited by NaturalJ0 on 2006-8-19 at 12:42 ]
作者: fujianabc     时间: 2006-8-19 13:56
我就是像你那样先在第二硬盘上装系统,然后接上第一硬盘,把第一硬盘的主分区分盘符为g:,然后把ntldr,ntdetect.com,bootfont.bin和boot.ini拷到g:盘,把boot.ini的rdisk(0)改为rdisk(1)。
这样在bios中设为从第一硬盘启动之后,g:为启动分区,c:为系统分区。
如果在bios中设为从第二硬盘启动之后,启动分区和系统分区都是c:(c:在第二硬盘上)。
作者: NaturalJ0     时间: 2006-8-19 14:33
原来是你手动移动了启动文件。
如果原来的第一个硬盘上装的也是 NT 系统的话,就不必移了。
先在第二个上单独装系统。装好后把第一个硬盘也接上。 BIOS 不必改动。总是第一个硬盘启动。直接去第一个硬盘的 BOOT.INI 里加上一项,最后是 rdisk(1) 就行了。

前面因为没搞清楚状况所以问了个比较傻的问题。现在重新问。
如果这样:

主区1(隐藏) 扩展区 主区2 主区3

扩展区就一个盘好了,不细分了

然后向主区3装 XP
装好后在 XP 系统下,各盘符和这四个区是怎么一一对映的?
NTLDR 和 BOOT.INI 在哪儿? (我觉得应该在主区2吧,不知道错没 = = )
作者: fujianabc     时间: 2006-8-19 21:35
windows安装程序会把ntldr boot.ini等启动文件放在激活的的那个主分区上。
若主区2激活,则在2上;主区3激活,则在3上。