Ghost自动备份时,活动主分区、最后分区号与盘符的确定思路和批处理
使用了第三方软件minitow(for win)/minito(for dos),软件下载及使用可去dos联盟。
一、windows下解决方案
(一)思路
1,用minitow获得硬盘信息。实例如下:
------------------------------------
N:N DOS WIN PRI/LOG ACT HIDE ID FILE SYSTEM LABEL TOTALmb FREEmb
1:1 = C: C: PRIMARY YES NO 0B FAT32 NO NAME 7538 3652
1:2 = E: PRIMARY NO YES 17 NTFS/HPFS 7467 0
1:3 = F: D: LOGICAL NO NO 07 NTFS/HPFS 10001 7524
1:4 = G: E: LOGICAL NO NO 07 NTFS/HPFS 15005 8483
1:5 = D: F: LOGICAL NO NO 0B FAT32 APPZ 30004 17382
1:6 = H: G: LOGICAL NO NO 07 NTFS/HPFS 44453 19427
------------------------------------
2,对上面的信息进行处理,获得活动主分区,及最后分区和最后分区对应的盘符。
(二)具体方法。
【说明,本人水平有限,相信有更好的处理办法。下面的批处理是正在使用的,正确性应基本没问题。
批处理中的一些代码改造自他人在回答其它问题时的答复。】
dos下的思路相同,处理方法有些不同。
批处理如下。【】为说明。
-------------------------------
@echo off
rem by lianjiang
rem 【获得硬盘参数,保存文件名为hdmini.txt】
tools\minitow /nohp /ifs /p>temp\hdmini.txt
rem 【生成简化的硬盘信息,此部分不是必须,只是由于一些信息个人以为不很重要,去除,新文件为hdmini_1.txt】
setlocal EnableDelayedexpansion
if exist temp\hdmini_1.txt del temp\hdmini_1.txt >nul
For /f "tokens=1 delims=\" %%i In (temp\hdmini.txt) do (
Set var=%%i
call :sub_012
)
endlocal
rem 【读取活动主分区的分区号%act%,最后分区号%lpartition%及最后分区对应的盘符%ldrive%,可用空间%freesize%】
For /f "tokens=1-3" %%i In (temp\hdmini_1.txt) do (
Set lpartition=%%i
Set ldrive=%%j
set freesize=%%k
if %%j.==C:. set act=%%i
)
echo 活动主分区号%act% 最后分区号%lpartition% 最后分区对应的盘符%ldrive%
pause
goto sub_018
:sub_012
rem 【取N:N WIN FREEmb三项数据】
set s1=!%var:~1,3!
set s3=!%var:~12,3!
set s10=!%var:~69,6!
echo %s1% %s3% %s10%>>temp\hdmini_1.txt
goto :eof
:sub_018
rem 【继续其他处理】
----------------
新文件hdmini_b.txt的形式如:
N:N WIN FREEmb
1:1 C: 3652
1:2 0
1:3 D: 7524
1:4 E: 8483
1:5 F: 17382
1:6 G: 19427
=============================
利用DSPTW取活动分区的分区号和盘符
以下是DSPTW产生的磁盘分区列表a.txt:
CODE:
No. Dr Tag FileSystem Volume Act StartPos Sectors MBytes FreeMB
1:1 Pri HIDE_DELL 63 144522 70
1:2 I: Pri HPFS/NTFS RECOVERY 145408 20971520 10240 4105
1:3 D: Pri HPFS/NTFS OS Yes 21116928 83886080 40960 21514
1:4 C: Log HPFS/NTFS DATAPART1 105005056 101298176 49462 6122
1:5 E: Log HPFS/NTFS SOFT 206305280 20480000 10000 2382
1:6 F: Log HPFS/NTFS BACKUP 226787328 80592896 39352 12603
1:7 Log HIDE_DELL 307382272 5195776 2537
任务:找到YES(活动分区标识)所在行的分区号和盘符,分别赋予变量 a1 和 a2 ,本例的结果应该是 a1=3 , a2=D
要求:用FOR和FINDSTR等自带命令,不要使用第三方工具,输出用echo a1和echo a2,分别只用一行完成。
CODE:
for /f "tokens=2,3 delims=: " %%i in ('findstr /i " Yes " a.txt') do set a1=%%i&set a2=%%j&&call echo %%a1%% %%a2%%
以上代码通过测试。
二、DOS下解决方案。
所需工具:minito,strings,ifs
(一)思路与windows下相同。
由于可能要在NTFS分区创建新目录,因此获取的是加载了ifs驱动后的dos下盘符。不创建目录的话,不需要确定最后分区对应的盘符。
示例如下
N:N : PRI/LOG ACT HIDE ID FILE SYSTEM LABEL TOTALmb FREEmb
1:1 = C: PRIMARY YES NO 0B FAT32 WINXP 7538 3619
1:2 = E: PRIMARY NO YES 17 NTFS/HPFS 7467
1:3 = F: LOGICAL NO NO 07 NTFS/HPFS 10001
1:4 = G: LOGICAL NO NO 07 NTFS/HPFS 15005
1:5 = D: LOGICAL NO NO 0B FAT32 APPZ 30004 17234
1:6 = H: LOGICAL NO NO 07 NTFS/HPFS 44453
(二)批处理。
@echo off
:mini_BEGIN
if exist mini_dd.txt del mini_dd.txt
minito /nohp /p /ifs>mini_dd.txt
rem 文件行数
strings lines=LINESIZE mini_dd.txt
if %lines%#==0# goto quit
strings lines=add %lines%,1
set line=1
echo 硬盘信息:
:mini
strings line=add %line%,1
if %line%#==%lines%# goto mini_1
strings lined=read mini_dd.txt,%line%
strings row1=left %lined%,3
strings row3=mid %lined%,8,2
strings row5=mid %lined%,19,3
if %row5%#==YES# set actp=%row1%
set lastp=%row1%
set lastd=%row3%
if not %lined%#==# echo %lined%
rem if not %lined%#==# echo %lined%>>hdinfor.ini
rem if %row1%#==N:N# goto mini
rem if %row5%#==YES# goto mini
rem echo %lined%>>hdinforb.ini
goto mini
:mini_1
echo.
echo 请根据上面显示的硬盘信息确认识别结果。
echo.
echo 自动识别结果:
echo 活动分区是%actp%
echo 最后分区是%lastp%
echo 最后分区对应的盘符是%lastd%
echo.
pause
goto exit
:fail
cls
echo.
echo 很抱歉,本工具采用的软件未能获得有效硬盘信息。
echo.
pause
:exit
============================
一键恢复中最后有效分区及活动分区的确定批处理(for DOS)
一键恢复中最后有效分区及活动分区的确定批处理(for DOS)
一键恢复工具中的最主要任务之一,就是确定有效最后分区与活动分区。
下面的批处理中使用了omnifs和gawk,仅供参考。
抛砖引玉。
图1,处理结果 图2,脚本
========================================
三、在Windows下手动改变盘符后,在DOS下也能正确识别,没问题,下面是测试结果。(虽然在Windows下把E:改成了M:,但在DOS下也能正确识别。)
1,硬盘信息。
N:N DOS WIN PRI/LOG ACT HIDE ID FILE SYSTEM LABEL TOTALmb FREEmb
1:1 = C: C: PRIMARY YES NO 0B FAT32 NO NAME 7538 3594
1:2 = E: PRIMARY NO YES 17 NTFS/HPFS 7467 0
1:3 = F: D: LOGICAL NO NO 07 NTFS/HPFS 10001 7576
1:4 = G: M: LOGICAL NO NO 07 NTFS/HPFS 15005 8530
1:5 = D: F: LOGICAL NO NO 0B FAT32 APPZ 30004 17233
1:6 = H: G: LOGICAL NO NO 07 NTFS/HPFS 44453 19378
2,输出结果:
活动主分区号1:1 最后分区号1:6 最后分区对应的盘符G:
-----------------------------------------------------------------
说明:以上处理方案,不适用于用U盘启动,且启动后u盘盘符为C:的情况(启动后盘符为A:的,仍可使用)。
附上处理方案中用到的工具,包括minitow(for win)/minito(for dos),strings.com。
点击下载判断最后分区的工具 (80.16 KB)
多硬盘识别方案:
小咕咚 说:
使用omnifs32或omnifs.exe:
DOS下:
@echo off
omnifs info >disk.txt
或Windows下:
@echo off
omnifs32 info >disk.txt
disk.txt内容为:
Disk: 1 (37.26GB) M:[37.26GB] S:[MPA245Q2HD7GWA]
1.1: ( 10.04GB) [C:\] Active Volume NTFS
1.2: ( 10.04GB) [D:\] Volume NTFS
1.3: ( 2.01GB) [E:\] Volume NTFS
1.4: ( 5.02GB) [F:\] Volume NTFS
1.5: ( 10.13GB) [G:\] Volume NTFS
1.6: ( 39.19MB) Volume FAT32 l:[ACRONIS SZ]
Disk: 2 (13.99GB) M:[13.99GB]
2.1: ( 10GB) [J:\] Volume NTFS l:[YD02-01]
2.2: ( 3.98GB) Hidden Volume FAT32
( 8.89MB) Unused Space
Disk: 3 (125MB) M:[125MB]
3.1: ( 117.63MB) [I:\] Active Volume FAT16
( 7.34MB) Unused Space
Disk: 4 (15.31MB) M:[15.31MB]
4.1: ( 15.28MB) [K:\] Volume FAT12 l:[CANON_DC] Removable Drive
Disk: 5 (37.27GB) M:[37.27GB]
5.1: ( 8.03GB) [L:\] Volume NTFS l:[YD01-01Ghost]
5.2: ( 12.05GB) [M:\] Volume NTFS l:[YD01-02Softs]
5.3: ( 8.03GB) [O:\] Volume NTFS l:[YD01-04Acronis]
5.4: ( 9.16GB) [N:\] Volume NTFS l:[YD01-03OK]
( 4.46MB) Unused Space
上面列表详细显示[omnifs版本为v11.0.0.1502]:
1、硬盘数量、型号;
2、各个硬盘[含U盘、移动硬盘]的分区数、分区类型、活动性、大小、是否隐藏。
从重定向产生的文本文件disk.txt中如何用批处理判断最后分区、活动分区?
lianjiang 说:
磁盘多不是问题。而是你到底想需要得到什么结果。
首先需要你确认以下信息:
最后分区是:
5.4: ( 9.16GB) [N:\] Volume NTFS l:[YD01-03OK]
活动分区为:
1.1: ( 10.04GB) [C:\] Active Volume NTFS
对否?还是只找第一硬盘最后分区?
因为有时最后磁盘的最后分区可能没多大实际意义。
haohaodlam 说:
minito 兼容性不是很好 SATA和ATA混用的情况下ODS下运行死机 (已经加了-NOHP)参数
lianjiang 说:
我也发现minito兼容性不佳,已经放弃,gghost中早已改用dspt了。
点击下载
DOS磁盘信息工具omnifs
点击下载
DOS分区信息管理工具dspt
以下是老毛桃写的请参考:
SET TestFile=Test_%RANDOM%.TMP
SETLOCAL ENABLEDELAYEDEXPANSION
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 (
CD.>%%I:\%TestFile%
CLS&&If Exist %%I:\%TestFile% Set ResultD=%%I:&&DEL %%I:\%TestFile% /Q
)
ECHO 最靠后的可写分区为:%ResultD%
IF EXIST %ResultD%\ghost (
ECHO %ResultD%\ghost 文件(夹)已经存在
) ELSE (
md %ResultD%\ghost\&ATTRib +S +H %ResultD%\ghost
)
ENDLOCAL
PAUSE
lianliang最新处理方案:
利用ghost的ghststat.txt确定活动分区及最后有效分区的方法 [09.06.19]
特点:此方法完全利用ghost自身的信息来进行一键恢复类工具所需的基本信息的处理。
1,用ghost -dd取得硬盘信息。
2,对生成的ghststat.txt进行处理,适用于ghost v8.0~ v11.02。
DOS处理脚本及结果见附图:
文档资料批处理工具gawk V3.1.3 绿色版[下载]
ghststat.txt文件内容:
*********************************
Date : Fri Jun 19 08:14:26 2009
Error Number: (0)
Message: Stats Dump
Version: 11.0.2.1573 (Nov 14 2007, Build=1573)
OS Version: DOS v7.10
Command line arguments: -dd
Active Switches :
AutoName
PathName :
DumpFile :
DumpPos : 0
FlagImplode : 0
FlagExplode : 0
Operation Details :
Total size.........0
MB copied..........0
MB remaining.......0
Percent complete...0%
Speed..............0 MB/min
Time elapsed.......0:00
Time remaining.....0:00
Program Call Stack
sub_main
main
Call Stack
0x0039846c
0x0009d011
0x0000307e
0x00004d09
0x00003f2f
0x003a1698
End Call Stack
Fat details:
NTFS details:
----------------
NTFS Global Flags:
----------------
contiguousWrite=1 forceDiskClusterMapping=0
inhibitCHKDSK=1 ignoreBadLog=0 ignoreCHKDSKBit=0
enable_cache=0 xfrbuflen=0
last_attr_type = 0
loadExact = 0
----------------
Disk Info :
remote.............0
drive..............0
sectorsUsedCount.......10506069
estimatedUsedCount.....0
numPartitions..............8
Version............0
# Ord Boot Id Ext First Num Last Used NTFS
0 0 0 1b No 63 2056257 2056320 0 No
1 1 1 b No 2056320 2457945 4514265 0 No
2 2 0 b Yes 4514328 1028097 5542425 0 No
3 3 0 7 Yes 5542488 3084417 8626905 0 No
4 4 0 83 Yes 8626968 417627 9044595 0 No
5 5 0 83 Yes 9044658 626472 9671130 0 No
6 6 0 82 Yes 9671193 626472 10297665 0 No
7 7 0 b Yes 10297728 208782 10506510 0 No
Disk Info :
remote.............0
drive..............0
sectorsUsedCount.......0
estimatedUsedCount.....0
numPartitions..............0
Version............0
# Ord Boot Id Ext First Num Last Used NTFS
Fixed Drives
Drive 128 CntxCorpHD
Int 13h
Total Sectors 16434495
Bytes per Sector 512
MB 8024
Cylinders 1023
Heads 255
Sectors per Track 63
Successful IO Count 0
Extended Int 13h (Active)
Total Sectors 33554304
Bytes per Sector 512
MB 16383
Successful IO Count 199
Remote Drives
AsyncIo : 0
Image Devices
Key[1] 1.1:
Key[2] 1:1
Path 1.1:
Desc 1.1: [WIN_1]
Type FAT
Disk 0
Offset 63
Key[1] 1.2:
Key[2] 1:2
Key[3] C:
Path C:
Desc C: 1.2: [WINXP_C]
Type FAT
Disk 0
Offset 2056320
Key[1] 1.3:
Key[2] 1:3
Key[3] D:
Path D:
Desc D: 1.3: [PRO]
Type FAT
Disk 0
Offset 4514328
Key[1] 1.4:
Key[2] 1:4
Path 1.4:
Desc 1.4: [DATA]
Type NTFS
Disk 0
Offset 5542488
Key[1] 1.8:
Key[2] 1:8
Key[3] E:
Path E:
Desc E: 1.8: [TEST4]
Type FAT
Disk 0
Offset 10297728
Key[1] 2.1:
Key[2] 2:1
Path 2.1:
Desc 2.1: [SYSTEM]
Type NTFS
Disk 1
Offset 63
Key[1] 2.2:
Key[2] 2:2
Path 2.2:
Desc 2.2: [DSK1_VOL2]
Type NTFS
Disk 1
Offset 822591
Key[1] 2.3:
Key[2] 2:3
Path 2.3:
Desc 2.3: [DSK1_VOL3]
Type NTFS
Disk 1
Offset 1846719
Key[1] 2.4:
Key[2] 2:4
Key[3] F:
Path F:
Desc F: 2.4: [TEST_PRI2]
Type FAT
Disk 1
Offset 3911103
Key[1] A:
Path A:
Desc A:
Type Floppy
Key[1] @CD-R1
Path @CD-R1
Desc @CD-R1 CntxCorpC/DVD-ROM
Type CD
DiskManager diagnostic...
=========================
Fixed Drives
Drive 128 CntxCorpHD
Int 13h
Total Sectors 16434495
Bytes per Sector 512
MB 8024
Cylinders 1023
Heads 255
Sectors per Track 63
Successful IO Count 0
Extended Int 13h (Active)
Total Sectors 33554304
Bytes per Sector 512
MB 16383
Successful IO Count 204
IDE using PIO
Total Sectors 33554304
Bytes per Sector 512
MB 16383
Cylinders 33288
Heads 16
Sectors per Track 63
Successful IO Count 0
Drive 129 CntxCorpHD
Int 13h (Active)
Total Sectors 4185216
Bytes per Sector 512
MB 2043
Cylinders 519
Heads 128
Sectors per Track 63
Successful IO Count 103
Extended Int 13h
Total Sectors 4194288
Bytes per Sector 512
MB 2047
Cylinders 4161
Heads 16
Sectors per Track 63
Successful IO Count 0
IDE using PIO
Total Sectors 4194288
Bytes per Sector 512
MB 2047
Cylinders 4161
Heads 16
Sectors per Track 63
Successful IO Count 0
Floppy Drives
Drive 0
Int 13h (Active)
Total Sectors 18720
Bytes per Sector 512
MB 9
Cylinders 260
Heads 2
Sectors per Track 36
Successful IO Count 1
Extended Int 13h
Total Sectors 18720
Bytes per Sector 512
MB 9
Cylinders 260
Heads 2
Sectors per Track 36
Successful IO Count 0
The following devices do not use an IRQ:
(0x00, 0x00, 0x00): IRQ: 0x00, INT#: -, Link: 0x00
Class: Bridge, SubClass: Host/PCI
Vendor: 0x8086, Device: 0x7192
(0x00, 0x07, 0x00): IRQ: 0x00, INT#: -, Link: 0x00
Class: Bridge, SubClass: PCI/ISA
Vendor: 0x8086, Device: 0x7110, RoutePINS: 0x00, 0x00, 0x00, 0x63,
(0x00, 0x07, 0x01): IRQ: 0x00, INT#: -, Link: 0x00
Class: Mass Storage, SubClass: IDE Controller
Vendor: 0x8086, Device: 0x7111, RoutePINS: 0x00, 0x00, 0x00, 0x63,
(0x00, 0x07, 0x03): IRQ: 0x00, INT#: A, Link: 0x00
Class: Bridge, SubClass: Other Bridge
Vendor: 0x8086, Device: 0x7113, RoutePINS: 0x00, 0x00, 0x00, 0x63,
(0x00, 0x08, 0x00): IRQ: 0x00, INT#: -, Link: 0x00
Class: Display, SubClass: VGA compatible
Vendor: 0x5333, Device: 0x8811, RoutePINS: 0x60, 0x61, 0x62, 0x63,
The following hard wire-ord devices share IRQ 11:
(0x00, 0x0a, 0x00): IRQ: 0x0b, INT#: A, Link: 0x60
Class: Network, SubClass: Ethernet
Vendor: 0x1011, Device: 0x0009, RoutePINS: 0x60, 0x61, 0x62, 0x63,
The following hard wire-ord devices share IRQ 255:
(0x00, 0x07, 0x02): IRQ: 0xff, INT#: D, Link: 0x63
Class: , SubClass:
Vendor: 0x0000, Device: 0x0000, RoutePINS: 0x00, 0x00, 0x00, 0x63,
FilesystemManager diagnostic...
===============================
Volume 1
VolumePos: 1.2:
DriveLetter: C:
Description: 1.17GB Primary Disk 0 Offset 1004.06MB 1.17GB CntxCorpHD
Type: fsfFat32
Name: WINXP_C
Volume 2
VolumePos: 1.3:
DriveLetter: D:
Description: 502MB Logical Disk 0 Offset 2.15GB 502MB CntxCorpHD
Type: fsfFat32
Name: PRO
Volume 3
VolumePos: 1.8:
DriveLetter: E:
Description: 101.94MB Logical Disk 0 Offset 4.91GB 101.94MB CntxCorpHD
Type: fsfFat32
Name: TEST4
Volume 4
VolumePos: 2.4:
DriveLetter: F:
Description: 137.78MB Logical Disk 1 Offset 1.86GB 137.78MB CntxCorpHD
Type: fsfFat32
Name: TEST_PRI2
Volume 5
VolumePos: 1.1:
DriveLetter:
Description: 1004.03MB Primary Disk 0 Offset 31.50KB 1004.03MB CntxCorpHD
Type: fsfFat32
Name: WIN_1
Volume 6
VolumePos: 1.4:
DriveLetter:
Description: 1.47GB Logical Disk 0 Offset 2.64GB 1.47GB CntxCorpHD
Type: fsfNtfsWindowsXP
Name: DATA
Volume 7
VolumePos: 1.5:
DriveLetter:
Description: 203.92MB Logical Disk 0 Offset 4.11GB 203.92MB CntxCorpHD
Type: fsfExt2
Name: TEST1*********************************