|
实现目标:
1. 支持新式主板GHOST启动,解决GHOST死机问题。
2. 全能应用多合一通用启动,一个软盘镜像实现多项启动,内部快速切换。
3. 自动检测判断隐藏分区,恢复系统到任意主激活分区。
第一章 解决GHOST死机问题
部分新式主板,运行ghost就卡在那里死机。网上有很多人说运行GHOST加 -nousb 参数就可以解决了。其实并非如此。加此参数照样死机。原因众说纷纭,对此我也郁闷了好久。经过大量的实践发现,利用EZBOOT加载BCDW启动,居然可以成功在以前是无法执行GHOST的联想的机器上运行GHOST,根据我的猜测大概是一般的启动软盘加载之后,在dos下找不到光盘目录的gho文件,所以死在那里,加载BCDW之后,运行ghost可以找到gho文件,所以可以成功克隆。这只是我的个人猜测,具体原因我们可以不需要深究,只要有效才是硬道理。
在ezboot菜单里执行命令:
bcdw /ezboot/ini/dos.ini (加载bcdw)
在ezboot目录建立 ini 目录 ,建立dos.ini文件,ini内容如下:
[MenuItems]
\EZBOOT\DOS.IMG (告诉bcdw需要执行的软盘镜像)
在dos.img镜像里的autoexec.bat添加以下语句:
BCDW GETBOOTIMAGECOMMANDLINE (得到在INI中指定的变量)
经过这样初步处理,您的软盘镜像就可以支持新式主板ghost运行了。
第二章:全能应用多合一通用启动
传统的ghost光盘启动菜单,每个菜单都对应一个软盘启动镜像,ZEBOOT目录里存放着许多IMG镜像文件。浪费不少有限的光盘空间。有没有办法把常用的启动软盘合为一个呢,答案是肯定的。
先来对比一下两张图片:
第一张图片的启动菜单部分除了pe之外,在第二张图片里面都有对应的程序。
实现的方法还是要借助于第一章所谈到的BCDW。
先来看一段autoexec.bat脚本:
@ECHO OFF
PROMPT $P$G
SET DIRCMD=/O:N
SET COMSPEC=A:\COMMAND.COM
set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15
set LglDrv=%LglDrv% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C
call setramd.bat %LglDrv%
cls
path=%RAMD%:\;A:\;A:\HD;A:\pq;A:\NTFS;A:\DM;A:\1K
LH A:\DOSKEY.COM>NUL
copy a:\command.com %RAMD%:\>nul
set comspec=%RAMD%:\command.com
SET TEMP=%RAMD%:
SET TMP=%RAMD%:
call mouse.bat>nul
lh SHSUCDX /D:CDROM
FINDCD.EXE /S
bcdw FindBootableCDLetter (BCDW识别的光驱盘符)
IF errorlevel 1 goto END
prompt CD=%bcdw_cdrom%:_RAM=%RAMD%:_$p$g
path=%PATH%;%bcdw_cdrom%:\
%bcdw_cdrom%: (进入光驱目录)
BCDW GetBootImageCommandLine (得到在INI中指定的变量)
IF errorlevel 1 goto END
CALL %bcdw_cl% (调用在INI中指定的变量)
GOTO EXIT
:END
A:\H.BAT
:EXIT
请注意以上括号内加解释的字段,BCDW可以通过INI配置文件传递变量来实现IMG中的多引导。光盘启动菜单假定有10个菜单条,执行相应的dos程序,那么预先在ezboot\ini目录放置10个ini文件,每个文件指定执行某一dos程序,ini文件名可以随便取,比如要运行龙帝国一键恢复程序,就生成一个1k.ini的文件,里面内容如下:
[MenuItems]
/EZBOOT/DOS.IMG ; ; ;1K (定义变量为指定执行dos.img内部的1k.bat批处理文件)
程序执行的流程是这样的:
1. 在ezboot启动菜单执行命令 bcdw /ezboot/ini/1k.ini (此命令对应光盘启动菜单的
龙帝国一键备份恢复程序)
2. 光盘启动选择执行龙帝国一键备份恢复,程序首先加载dos.img软盘映像,初始化dos运行环境执行autoexec.bat,设置dos参数和环境变量,加载光驱驱动,这个过程是通用的,全部光盘菜单执行的命令都需要经历这个过程。
3. 执行 bcdw FindBootableCDLetter 查找和设别光驱盘符。设定光驱搜索路径。
4. 进入光驱目录 %bcdw_cdrom%:
5. 执行 BCDW GetBootImageCommandLine 得到在INI中指定的变量 (此处的变量就等于ezboot\1k.ini中指定1k.bat)
5. CALL %bcdw_cl% 调用在INI中指定的变量,%bcdw_cl% 变量由 BCDW GetBootImageCommandLine 传递,此处的变量就等于1k.bat,也就是说此处实际执行的是 call 1k.bat (如果1k.ini中指定执行的是pq,那就是执行pq分区程序了)
6. 执行 1k.bat (一键备份恢复程序)
程序完毕可以直接返回dos工具箱目录,执行工具箱内的其他的程序,比如pq,dm分区,直接安装光盘gho到c盘等,大部分程序执行完毕都可以返回dos工具箱目录,或者直接返回光盘主菜单。内部自由切换,减少启动环节。实现一个软盘多重启动,内部快速切换,增加效率,节省宝贵的光盘空间。
第三章:自动检测判断隐藏分区,恢复系统到任意主激活分区。
传统的ghost恢复软盘镜像,指定恢复系统到第一硬盘第一分区(ghost硬盘设别符:1:1)。在兼容机上这样做没什么问题,但在某些品牌机器如 DELL ,第一分区为隐藏分区(内置dell的检测修复等程序)系统分区却在第二分区,如果直接ghost安装系统,第一分区空间容量小,无法装下一个xp系统。导致克隆失败。很多人选择直接干掉隐藏分区,重新分区来安装系统。第一分区数据遭破坏,可能影响将来
的保修。要解决这个问题,需要做两件事情:
1. 准确判断硬盘主激活分区
2. 修改xp启动配置文件参数
既然知道目标,那么我们就来研究该怎么做吧。
第一阶段:判断磁盘主激活分区
dos下判断磁盘分区的程序不少,ghost -dd 就可以输出分区结构数据。但那个GHSTSTAT.TXT数据实现太长了,有点麻烦哦。不如来点简单的吧。一个16.2k的dos小程序 DPIT.COM 可以帮我们解决这个问题。
执行以下一段批处理:
dpit 1 /find:all /noext /ghost /y>%RAMD%:\dpt_gho.txt
参数 1 代表第一硬盘
参数 /find:all 查找所有分区
参数 /noext 不显示逻辑扩展信息
参数 /ghost 生成ghost磁盘id
参数 /y 不显示提示信息
参数 >%RAMD%:\dpt_gho.txt 输出结果保存到内存盘 dpt_gho.txt 文件
以下是得到的结果:
No. Drv Type Volume PartType Act Offset Sectors MBytes
1:1 Primary HPFS/NTFS Yes 63 20466747 9993
1:2 C: Logic NO NAME Win95_FAT32 20466873 42459732 20732
1:3 Logic HPFS/NTFS 62926668 83907432 40970
1:4 Logic HPFS/NTFS 146834163 83907432 40970
1:5 D: Logic NO NAME Win95_FAT32 230741658 89417727 43660
从上面的列表不难看出,标记为 “YES” 的第一分区为主激活分区。如果第一分区为隐藏,则标记为第二分区为主激活,通过下面简单的批处理,就可以输出我们想要的结果了。
@echo off
dpit 1 /find:all /noext /ghost /y>%RAMD%:\dpt_gho.txt (输出磁盘参数)
type %RAMD%:\dpt_gho.txt|find /i "yes">%RAMD%:\dpt_act.txt (查找主激活分区,保存为文本。此处输出为 1:1)
if errorlevel 1 goto gho_1t1 (返回错误码,读取失败跳转到gho_1t1字段)
if errorlevel 0 goto gho_act (返回错误码,读取成功跳转到gho_act字段)
goto ext
:gho_act
strings act=read %RAMD%:\dpt_act.txt,1 (设置主激活分区变量)
strings sys=left %act%,3 (取字符串值)
strings sys0=right %sys%,1 (取字符串值)
strings part1=add %sys0%,1 (加减运算)
set partd=1:%part1% (设置逻辑第一分区变量)
goto ext
:gho_1t1
set sys=1:1 (如果硬盘未分区主激活分区不存在则假定第一分区为主分区)
set partd=1:2
goto ext
:ext
以上代码保存为 dptl.bat
现在我们得到了两个变量 %sys% 系统分区,% partd % 逻辑第一分区。下面我们将这两个变量应用于ghost恢复:
%bcdw_cdrom%:
Ghost -nousb -clone,mode=pload,src=SYSTEM.gho:1,dst=%sys% -crcignore -sure –rb
程序将根据传导的变量自动恢复系统到主激活分区。
现在智能判断恢复已没什么问题了,但新的问题又来了。如果第二分区为主激活分区,我们封装的时候默认的boot.ini启动代码是指向第一分区的。
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
rdisk(x) 代表磁盘数
partition(x) 代表分区数
如果第二分区为主激活,正确的引导代码应该是
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
虽然经过实践测试,系统部署的时候会自动修复这个引导记录。但不排除失败的可能性。为保险起见,我们还是对boot.ini进行一下处理吧:
@echo off
echo [boot loader]>%RAMD%:\boot.bak
echo timeout=3>>%RAMD%:\boot.bak
echo default=multi(0)disk(0)rdisk(0)partition(%sys0%)\WINDOWS>>%RAMD%:\boot.bak
echo [operating systems]>>%RAMD%:\boot.bak
echo multi(0)disk(0)rdisk(0)partition(%sys0%)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /DETECTHAL>>%RAMD%:\boot.bak
echo C:\peldr.bi_="Install a third ** SCSI , SATA or RAID driver">>%RAMD%:\boot.bak
call a:\ntfs.bat
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n) do if exist %%i:\boot.ini set x=%%i
attrib -h -r -s %x%:\boot.ini>nul
copy /y %RAMD%:\boot.bak %x%:\boot.ini
attrib +h +r +s %x%:\boot.ini
call a:\ntfs\unt.bat
以上代码保存为boot.bat
根据前面 dpit.com生成的系统分区变量,传导给boot.ini配置文件,自动修正配置信息。
上面的脚本是先输出boot.bak配置信息到内存盘,然后拷贝到系统分区覆盖,你也可以直接输出到boot.ini文件。
Ghost之前,也可以预处理一下系统时间,防止被病毒修改时间导致系统部署失败,出现
“系统没安装好“的错误。
以下是最后的ghost恢复完整脚本:
@echo off
A:
CD\
COPY /Y strings.com %RAMD%:\>NUL
%RAMD%:
cd\
echo.|date>time.txt
strings w=read time.txt,1
strings y=right %w%,4
strings m=mid %w%,21,2
strings d=mid %w%,24,2
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo Current system date is: %y%-%m%-%d%
echo Now will change date is: 2009-%m%-%d%
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
date %m%-%d%-2009>nul
call dptl.bat
if %sys%==1:1 goto ghost1
if not %sys%==1:1 goto ghost2
:ghost1
%bcdw_cdrom%:
Ghost -nousb -clone,mode=pload,src=SYSTEM.gho:1,dst=%sys% -crcignore -sure -rb
exit
:ghost2
%bcdw_cdrom%:
Ghost -nousb -clone,mode=pload,src=SYSTEM.gho:1,dst=%sys% -crcignore -sure -fx
a:
cd\
call boot.bat
a:\r.com
exit |
程序, 服务器, 技术, 软件, 网吧, 网络, 系统, DOS, VIP, 服务器, 广告, 绿茶, 论坛, 诺德尔, 网吧, 网络, 系统, 电脑, 服务器, 破解, 软件, 网吧, 网络, 系统, 3389, DOS, FTP, 绿茶, 密码, 网吧, Windows, 程序, 电脑, 破解, 软件, 网络
|