Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1681236
  • 博文数量: 584
  • 博客积分: 13857
  • 博客等级: 上将
  • 技术积分: 11883
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 09:34

分类: WINDOWS

2011-04-28 11:13:13

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*********************************
阅读(3161) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~