DOS下实现硬盘自动无损数据重新分区的方法_第1页
DOS下实现硬盘自动无损数据重新分区的方法_第2页
DOS下实现硬盘自动无损数据重新分区的方法_第3页
DOS下实现硬盘自动无损数据重新分区的方法_第4页
DOS下实现硬盘自动无损数据重新分区的方法_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DOS下实现硬盘自动无损数据重新分区的方法一、问题的提出说起给硬盘分区,有经验的用户都不会陌生,而且是属于计算机系统安装和维护中经常做的一种操作。当然,分区软件有很多,经典的FDISK,权威的PQ PartitionMagic(也就是大名鼎鼎的“分区魔术师”了,下面简称PM或者Acronis PartitionExpert(分区软件的新秀,还有命令行下的Gdisk,当然,还有Diskman、FBDisk等很多软件,个人经常使用的是PQ Partition Magic、BootStar,当然也经常使用Fdisk做一些辅助性的操作。DOS方式下人工交互式的分区个人认为还是PM最好用,如果要自动进行

2、分区,对于全新的硬盘来说,当然用Gdisk是一个不错的选择。但如果我想在DOS下使用命令行实现类似PM的无损数据分区该如何办呢?例如,我想实现自动安装IBM一键恢复,这个方案要解决的第一个问题就是如何实现自动无损数据分区(在硬盘的末尾自动建立一个指定大小的主分区并设置合适的卷标。二、问题解决过程要解决前面提出的问题,首选当然就是考虑PM是否有这个功能了,如果PM能够支持在命令行运行一个类似批处理的自动分区脚本文件,这个问题就可以解决了。我日常使用的是从网上下载的PM 8.0纯DOS 版,在DOS方式下输入:pqmagic /?还真有不少参数,但仔细一看,没有一个参数能够完成前面所述功能。看来P

3、M不成,于是用google在网上搜索,搜索到最多的结果就是gdisk,但可惜它只能在硬盘上有未分区空间的前提下才可以使用,找不到软件怎么办?灵机一动,访问PowerQuest的官方网站,在该网站首页看到的第一个消息就是PowerQuest 公司被Symantec公司收购了,网页上方打上了大大的Symantec的字样标志,好在网站还在正常运行,正常的技术支持页面也可以使用,于是试着搜索Batch或者Script之类的关键字,果然在知识库中找到了有关运行Script时出现的错误及解决办法等,后来发现这些错误只是针对Partition Magic Pro(下面简称为PM Pro或者V olume M

4、anager这样的软件,V olume Manager不用考虑了,那是Server系统使用的分区软件,于是打开PM Pro的介绍页面(点击访问,发现官方网站上Pro版本的PM最新版本是7.0,在其功能介绍中的“EXCEPTIONAL EASE OF USE” 中发现这一段介绍“ Scripting - Change the partitions on a computer by running a script that you create with ScriptBuilder. To run a script, simply pass the script filename to the

5、program on the command line. ”,好了,这就是我们要找的东西了,原来普通的PM并不支持脚本操作,只有Pro版本才支持,于是又到网上搜索并向各个论坛求助,终于在“中国DOS联盟之联合DOS论坛(点击访问”的walu站友那里取得了PM Pro 7.0的纯DOS版本(稍后会提供软件的下载,也巧了,这个问题的缘起也是因为该论坛里mewf网友的一个求助帖子:“如何实现用dos程序自动调整分区大小?(点击访问”,不由得让人发出“问题由哪里开始就由哪里结束”的感叹。三、问题的解决有了适当的工具再加上详细的参考文档,问题当然就迎刃而解了,下面给出我的初步成果,下面的脚本例子就是为了

6、实现这样一个目标:在硬盘最后面腾出2G的空间并在其上建立一个F A T32主分区,分区卷标为“SYS_GHOST”。开始我先按照标准的方法书写了一个脚本,但在调试过程中(建议在PM Pro For Windows版本上使用内置的ScriptBuilder进行脚本的书写和调试发现书写的脚本有一个命令无法执行,但个人感觉命令并没有写错(到现在原因仍然未明,只好修改脚本使用另一种笨办法来实现,这样就有了V1、V2两个版本的脚本,V1版本中不能执行的那条命令我已经标出,还希望大家共同研究,找出不能执行的原因。个人感觉V1版本要比V2版本写的漂亮,可惜不能用。下面是有关文件的下载:1、PowerQues

7、t Partition Magic Pro 7.0 For DOS(866KB,点击下载2、PowerQuest PartitionMagic Pro脚本设计参考文档(PDF格式英文文档,205KB,点击下载3、在硬盘最后面自动创建指定大小的主分区脚本V1(运行时出错,但脚本写的自认没有问题,请高手们共同研究4、在硬盘最后面自动创建指定大小的主分区脚本V2(运行正常,但没有脚本1中的程序完美,凑和着用吧5、自动在第一块硬盘最后创建一键恢复用主分区的脚本(这算是第三个版本,经过初步测试,运行基本正常,但需要进一步测试,5KB上述书写的脚本中都写了详尽的注释,请使用时自己根据实际情况修改里面的参数

8、。脚本的执行用法(假设脚本文件名为PQ.PQS,且在当前目录下:pqmagic /cmd=pq.pqs /dbg=debug.t xt /log=log.txt中的内容为可选参数,可以用来调试和检查脚本执行过程中出现的问题:/dbg:调试文件/log:执行日志文件=V1脚本内容:/* */ CreatePrimaryPartitionAtDiskEnd.PQS:在第一块硬盘的最后建立指定大小的主分区/ 运行前提:/ 1、硬盘最后面一个分区(一般是扩展分区的最后一个逻辑盘有足够的空闲空间(包括后面的未分配空间有满足需要的空间。/ 2、硬盘上所有的主分区加扩展分区数量不能大于3。/ 目前本脚本运行

9、状态:不能正常运行,在运行到第56行时出错,原因未明/* */ 设置你要创建的主分区的大小,单位为MB(默认是2048MB,即2G。Dim PriSizePriSize = 2048/默认情况下不检测坏扇区,提高操作速度Set Default Bad Sector Test State OFF/ 选择第一块硬盘Select Disk 1/ 检测当前硬盘上的主分区数量Dim PriNumDim ii = 1PriNum = 0Select Partition FIRSTDO WHILE i GetTotalPartitionsIF IsPrimary ThenPriNum = PriNum +

10、1End IfSelect Partition Nexti = i + 1LoopIF IsPrimary ThenPriNum = PriNum + 1End If/ 检测硬盘上是否有扩展分区,如果有,也算是一个主分区dim ExtNumExtNum = GetPartitionNumber ExtendedIf ExtNum 0 ThenPriNum = PriNum + 1End If/ 只有主分区数量小于4才可以继续IF PriNum 4 Then/选择最后一个分区Select Partition Last/ 检测最后一个分区后面的剩余空间Dim LastFreeNum/ 注意:在运行

11、下面加粗的这一行命令时会出错,错误提示是该命令无法完成。/ 英文提示:Script error(53: Unable to complete command:/ 这个命令的作用应该是返回硬盘最后一个分区后面的未分配空间的编号,如果没有,则返回0LastFreeNum = GetUnallocatedNumber After Selected PartitionDim NeedSpaceNeedSpace = PriSizeDim bTrunbTrun = 1IF LastFreeNum 0 Then/ 选中硬盘最后的未分配空间并检测其大小是否满足需要,如果不满足,则需要缩小最后一个分区的大小S

12、elect Unallocated LastFreeNumIf GetSelectedUnallocatedSize = NeedSpace Then/改变最后一个分区的大小,在其后面空出需要大小的空间(即NeedSpace变量保存的值Resize Space After NeedSpaceElsebQuit = 1End IfEnd IfIf bQuit = 0 Then/选中最后的未分配空间(刚才空出的Select Unallocated After Selected Partition/在硬盘最后创建指定大小的分区,分区卷标为SYS_GHOST,当然,你可以根据实际情况修改卷标。Crea

13、te /FS=FAT32 /LABEL=SYS_GHOST /Size=PriSize /Position=END/ 将这个分区转换为主分区Convert To PrimaryEnd IfEnd IF版本2脚本内容:/* */ CreatePrimaryPartitionAtDiskEnd.PQS:在第一块硬盘的最后建立指定大小的主分区/ 运行前提:/ 1、硬盘最后面一个分区(一般是扩展分区的最后一个逻辑盘有足够的空闲空间(包括后面的未分配空间有满足需要的空间。/ 2、硬盘上所有的主分区加扩展分区数量不能大于3。/ 目前本脚本运行状态:正常/* */ 设置你要创建的主分区的大小,单位为MB(默

14、认是2048MB,即2G。Dim PriSizePriSize = 2048/默认情况下不检测坏扇区,提高操作速度Set Default Bad Sector Test State OFF/ 选择第一块硬盘Select Disk 1/ 检测当前硬盘上的主分区数量Dim PriNumDim ii = 1PriNum = 0Select Partition FIRSTDO WHILE i GetTotalPartitionsIF IsPrimary ThenPriNum = PriNum + 1End IfSelect Partition Nexti = i + 1LoopIF IsPrimary

15、 ThenPriNum = PriNum + 1End If/ 检测硬盘上是否有扩展分区,如果有,也算是一个主分区dim ExtNumExtNum = GetPartitionNumber ExtendedIf ExtNum 0 ThenPriNum = PriNum + 1End If/ 只有主分区数量小于4才可以继续IF PriNum = PriSize Then/改变最后一个分区的大小,在其后面空出需要大小的空间(即前面PriSize变量保存的值Resize Space After PriSizeElsebQuit = 1End IfIf bQuit = 0 Then/选中最后的未分配空

16、间(刚才空出的Select Unallocated After Selected Partition/在硬盘最后创建指定大小的分区,分区卷标为SYS_GHOST,当然,你可以根据实际情况修改卷标。Create /FS=FAT32 /LABEL=SYS_GHOST/ 将这个分区转换为主分区Convert To PrimaryEnd IfEnd IF在脚本2中,如果最后一个分区后面有未分配空间,那么我先将最后一个分区扩大占满未分配空间,然后将将它缩小腾出需要的空间,这样中间就绕了一个弯,可能会导致操作过程大幅度延长(例如你最后一个分区中存放的数据较多的话,当然,如果最后一个分区没有多少数据,应该不

17、会太影响执行速度的。呵呵,第三个版本的脚本出来了,可费了我不少心思,不过还需要大家进一步测试。第三个版本充分考虑了各种硬盘的情况,因此搞的也就比较复杂,估计肯定有Bug存在,我已经测试了几种情况,但有些极限情况没有测试。版本3脚本的下载链接:自动在第一块硬盘最后创建一键恢复用主分区的脚本(经过初步测试,需要进一步测试,5KB下面是脚本内容:/* */ F11_AutoCreatePartition.PQS:在第一块硬盘的最后建立第一个分区使用空间的1/2 + 200MB大小的主分区/ 本脚本的设计目标是适应各种情况的硬盘。/ 目前本脚本运行状态:初步测试运行正常,但没有运行各种极限情况下的测试

18、,因此需要进一步测试/* */ 允许用户在操作后手工重新启动计算机,否则将自动重新启动计算机Allow Manual Reboot/默认情况下不检测坏扇区,提高操作速度Set Default Bad Sector Test State OFF/ 选择第一块硬盘Select Disk 1/选择第一个分区Select Partition FirstDim PriSize/ 检测第一个分区的使用空间,将PriSize设置成其使用空间的1/2再加上200M,否则恐怕不够用PriSize = GetUsedAmount / 2 + 200/ 检测当前硬盘上的主分区数量Dim PriNumDim ii =

19、 1PriNum = 0Select Partition FIRSTDO WHILE i GetTotalPartitionsIF IsPrimary ThenPriNum = PriNum + 1End IfSelect Partition Nexti = i + 1LoopIF IsPrimary ThenPriNum = PriNum + 1End If/ 检测硬盘上是否有扩展分区,如果有,也算是一个主分区dim ExtNumExtNum = GetPartitionNumber ExtendedIf ExtNum 0 ThenPriNum = PriNum + 1End If/ 只有主

20、分区数量小于4才可以继续IF PriNum 4 Then/ 如果存在扩展分区,则选择扩展分区,让它占满前后所有的未分配空间If ExtNum 0 ThenSelect Disk 1Select Partition ExtendedResize MaxEnd if/ dOperPnum用来保存操作过多少分区Dim dOperPnumdOperPnum = 0/ bMove 用来判断是否进行了空间腾出操作,如果是,刚为后面的空间移动提供判断基础 Dim bMovebMove = 0/ dLastOpPar保存最后一次操作的分区编号Dim dLastOpPar/ 如果当前未分配空间数量已经满足需要,

21、将不需要进行重新分配空间操作If GetTotalUnallocatedSpaces PriSize Then/选择最后一个分区并判断其是否为主分区Select Partition LastCheck/ FreeSpace用来保存已经腾出的空间Dim FreeSpaceFreeSpace = 0/ NeedSpace用来保存还需要腾出多少空间Dim NeedSpaceNeedSpace = PriSizeDim dTmpdTmp = 0/ 从最后一个分区循环往前操作以腾出需要的空间i = 0Do While FreeSpace = NeedSpace Then/改变该分区的大小,在其后面空出需

22、要大小的空间(即NeedSpace变量保存的值Resize Space After NeedSpaceFreeSpace = FreeSpace + NeedSpacebMove = 1Else/ 如果本分区剩余空间大于100M,则将本分区缩小未使用空间减100M的大小If GetUnusedAmount 100 ThendTmp = GetUnusedAmount - 100Resize Space After dTmpFreeSpace = FreeSpace + dTmpNeedSpace = PriSize - FreeSpacebMove = 1End IfEnd Ifi = i +

23、 1dOperPnum = dOperPnum + 1/ 如果循环到了第一个分区但空间仍然不足,则直接退出循环If i GetTotalPartitions ThenSelect Partition PreviousCheckdLastOpPar = GetPartitionNumber NextElse If FreeSpace PriSize ThendLastOpPar = GetPartitionNumber FirstExit LoopEnd IfLoopEnd If/ 如果没有进行分区分割操作,两个原因:1、磁盘空间不足;2、未分配空间已经够用If bMove = 0 ThendLastOpPar = GetPartitionNumber FirstdOperPnum = GetTotalPartitionsSelect Partition FirstMove Left MaxElse/ 开始将前一个循环中腾出的空间进行后移操作Di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论