|
利用 gdisk + awk +ndlist +bat 实现全部硬盘分区序列列表和最后一个可行备份分区位置(%lastp%)的确定,支持多个硬盘信息的搜集。
有多个 主引导分区时 lastp 被设置为 最后一个主引导分区
少于2个主引导分区时 lastp 被设置为 最后一个逻辑分区
只有一个分区且为主引导分区时 lastp 为 空
只有一个分区且为逻辑分区时 lastp 为该逻辑分
如果装载了 ifsdrv 也可以把ifsdrv 装载的分区盘符对应于表中。
awk/ndlist/drv0.awk/disks1.bat 另需要 gdisk.exe v11自己找吧。
这里需要3个文件的整理融合: ndlist.txt (ifsdrv装载盘符列表) gd.txt(gdisk 获取的硬盘分区信息列表) gdraw.txt(gdisk /raw 获取的分区信息主要用到他的 sys 列)
还有就是 没有分配盘符的可以被ifsdrv 装载的分区 对应的 id 类型表:0C,1C,04,14,06,16,0B,1B,07,17,01,11,0E,1E,83
因为 gdisk 体积庞大,调用耗时较多,运行会慢一些,但是 gdisk 获取的磁盘信息与ghost 兼容性更好一些,毕竟都是 ghost出品的。所以,要用ghost做备份,探测分区信息还是用 gdisk 要更稳妥一些。
disks1.bat 内容:
@echo off
if not %1*==* goto s2
if exist drv0.txt del drv0.txt >nul
ndlist >ndlist.txt
cls
echo 正在获取硬盘分区信息,请等待....
gdisk |awk 'NF>0 && $1!="Disk" {print "call disks1.bat "$1}' >disksx.bat
call disksx.bat
del disksx.bat
echo.
echo 全部硬盘分区序列:
echo 标号,盘符,ID,状态,类型,卷标,大小,格式,% ...
type drv0.txt
awk '/PRIMARY/' DRV0.TXT|AWK '{if (FNR==1) print "set p0="$1;p9=$1} END {print "set p9="p9}>%temp%\px.bat
awk '/LOGICAL/' DRV0.TXT|AWK '{l9=$1} END {print "set l9="l9}>>%temp%\px.bat
call %temp%\px.bat
del %temp%\px.bat
set lastp=%p9%
if (%p9%)==(%p1%) set lastp=%l9%
for %%c in (p0 p9 l0 l9) do set %%c=
echo Last_partiton is %lastp%
goto end
:s2
echo 正在分析硬盘 #%1 ...
gdisk %1 >gd.txt
gdisk %1 /raw >gdraw.txt
awk -f drv0.awk -v d=%1 gd.txt >>drv0.txt
:end
if exist gd.txt del gd.txt >nul
if exist gdraw.txt del gdraw.txt >nul
if exist ndlist.txt del ndlist.txt >nul
-----------------
drv0.awk 内容:
BEGIN {d()}
{drv3()}
END {}
function drv3() {
if (($0~"PRIMARY") || ($0~"LOGICAL")) {
m+=1
dd=substr($0,2,2)
if (substr($0,2,2)!~":") {dd="?."
if ((ifs[1]!="Unavailable") && (ifsdrv~id[m])) {y+=1;dd=ifs[y]}
}
printf "%5s" ,d":"m;printf "%4s",dd" ";print id[m],substr($0,15)
}
}
function d() {
ifsdrv="0C,1C,04,14,06,16,0B,1B,07,17,01,11,0E,1E,83"
while ((getline<"gdraw.txt")>0) {
if (($0~"PRIMARY") || ($0~"LOGICAL")) {n+=1;id[n]=$4}
}
while ((getline<"ndlist.txt")>0) {l+=1;ifs[(l-1)]=$1}
}
----------------------------
[ 本帖最后由 dos时代菜鸟 于 2010-8-26 21:45 编辑 ] |
|