刚刚知道,本程序已经有幸被FreeDOS的核心开发人员之一的Lucho收入他的宝贝软盘镜像,
有时用GHOST备份失败,可能文件出了什么问题。。。
就自己写了个程序 TOdisk 成功地备份了。。
用扇区方式备份硬盘或分区或任意扇区。。。
支持压缩和分卷,扩展分区,连续任务。。。等等。。
希望大家有空试玩。。。
说明如下:
硬盘全真备份恢复器 ==TOdisk ==(扇区模式)
版本:1.2 alpha
运行环境: DOS / WIN9x DOS 窗口 (如加载UDMA驱动,可能运行反常)
TOdisk version 1.2 Alpha Copyright (C) 2006 by GOTOmsdos
Email: tdaim@sina.com
语法:
<执行模式>
TOdisk 源串1[,源串n...] TO 目标串1[,目标串n...] [-[[d|p][q][m][n][ir][iw]]]
<查看模式>
TOdisk [-D[n]|-P[[noz|noh|nozh|fn|f|l]|[n:n|A:]]]
源/目标 串: (硬盘串, 分区串, DOS盘符串, 镜象文件串)
1, 硬盘 串 1 or 2...n
2, 分区 串 1:2 or 2:3...n:n
3, DOS盘符 串 C: or D:... Z:
4, 镜象文件 串
a 是目标时:
(c:\image.to) <不压缩,不分卷>
(c:\image.to=Vn) <不压缩,分卷>
(c:\image.toz=Cn) <压缩,不要密码,不分卷>
(c:\image.toz=Cn=K) <压缩,要提示输入密码,不分卷>
(c:\image.toz=Cn=K=Vn) <压缩,要提示输入密码,分卷,只有第一卷(即第一个镜象文件)有密码>
(c:\image.toz=Cn=K=Vn=E) <压缩,要提示输入密码,分卷,每卷的密码跟第一卷的一样>
(c:\image.toz=Cn=K=Vn=E?) <压缩,要提示输入密码,分卷,每卷都要提示输入密码>
b 是源时(会自动判断是否是压缩,所以,即使以to为后缀的压缩文件也能被识别为压缩文件):
(c:\image.toz) <不自动搜索分卷>
(c:\image.toz=V) <自动搜索分卷>
<镜象文件名,如不压缩建议后缀为to, 如压缩建议后缀为toz, 以免跟其他文件名混淆,不过程序并不强制这样)
镜象文件:
Cn - C(compress) 压缩 n:压缩级别(1-9,6 可能是强度和速度的最佳平衡点,如没有级别,则取默认的6)
K - key 密码,需要提示输入密码
Vn - V(volume) 分卷 n:每卷大小(MBs)
E? - E(every)每卷的密码跟第一卷的一样 ?:每卷都要提示输入密码
开关:
-d|-p: 硬盘|分区 模式 (匹配模式)
(下列位于命令行参数的最后端,对全部任务有效):
-q: quiet 安静(无询问)
-m: mute 沉默(无信息显示)
-i: ignore 忽略(忽略读写错误,但对镜象文件串无效)
-n: next 下一个(如果遇到致命错误,就继续下一个任务)
在源/目标串中
- : 指定要操作的起始扇区
+ : 指定要操作的扇区数
但在镜象文件串中不被允许
源/目标串中使用的参数:在q, m, i, n前加上‘=’,以区别于对全部任务有效的‘-’
(仅对其源/目标串任务有效): =q, =m, =i, =n
例子:
1:2=q=m,3:4 TO (file=c)=n,4:1=i
单任务例子:
1 TO 2
复制硬盘1到硬盘2
1-100+1000 TO 2-200
从硬盘1第100扇区复制到硬盘2的第200扇区,总共复制1000个扇区
1:2 TO 2:3
复制硬盘1分区2到硬盘2分区3
1:2-200+1000 TO 2:3-300
从硬盘1分区2第200扇区复制到硬盘2分区3的第300扇区,总共复制1000个扇区
1:2 TO (d:\backup.toz=c=k=v1000=e?)
备份硬盘1分区2到镜象文件d:\backup.toz
压缩级别6
提示输入密码
分卷,每卷大小1000 MBs
每卷都要提示输入密码
多任务例子:
1:2,2:3-2345,3:4 TO (g:\12.z=c=v1000)+12345,4:1-3456,(i:\34.z=c=v1000)
关于多任务的较详细情况请参看后面
-d 硬盘模式例子:
1,2 TO 3,4 -d
等价于: 1 TO 3 和 2 TO 4 两次分开的操作
-p 分区模式例子:
1:2,4:3,2:2 TO 2:3,(d:\back.toz=c),4:5 -p
等价于: 1:2 TO 2:3 -p 和 4:3 TO (d:\back.toz=c) 和 2:2 TO 4:5 -p 三次分开的操作
(其中,由于第一和第三任务既是分区模式又是写分区<目标是分区不是镜象文件>,所以,即使在分开的操作中也要加上 -p, 表示要更新分区ID. )
对全部任务有效的参数的例子:
1:2,3:4 TO (file=c),2:2 -q -m -n -ir -iw
<查看模式>
-Dn 显示硬盘n的信息
-P 显示全部硬盘全部分区的信息
noz|nozero: 不显示分区ID为0的分区
noh|nohidden: 不显示隐藏分区
nozh|nozerohidden: 不显示分区ID为0的分区和隐藏分区
fn|fatntfs: 显示FAT和NTFS分区
f|fat: 显示FAT分区
l|linux: 显示LINUX分区
n:n - 1:2 or 2:3...
A: - C: or D:...Z:
例子:
-d 显示全部硬盘
-d2 显示硬盘2
-p 显示全部硬盘全部分区
-pfn 显示FAT和NTFS分区
-p2:3 显示硬盘2分区3
-pc: 显示 C:
============================================
补充说明:
===============================================
本程序:
采用的是扇区方式:
关于处理模式和速度:
GHOST 采用文件模式,即:只处理文件,不处理没有合法文件的数据,(所以,其实GHOST不是CLONE.是重整).这样,文件少的分区备份速度就快,,
塞满文件的分区备份速度就慢(因为文件方式多了检索文件搜索文件的过程)而且,如果遇到有问题的文件,诸如簇链交错和无家可归的文件
等等,还会终止程序。。。还有弱点是:用这种方式恢复的分区,不可能找回被删除的或丢失的文件,因为,没有合法文件的数据没有被保存.
GHOST 的 -ia 虽是用扇区方式,但是是拷贝 整个硬盘 或其全部分区,不能处理指定的某个分区,更不能处理任意指定的 某些扇区
。
-ial -ir 也大同小异。。
TOdisk 是采用扇区方式,就是完全的复制,这样,虽然速度没有文件方式快,但是确是全真方式.即一模一样,这才是真正的 CLONE.
其实,企业方式或者是极其重要的数据,应该是采用扇区方式.
×××××××××××××××××××××
特别建议:
1
本程序很适合备份塞满文件的分区。
2
由于是扇区方式,所以可以备份任何文件系统的 分区(包括LINUX等等。。。)
不过,如果要备份到镜象文件,镜象文件所在分区只能是FAT/FAT32.
××××××××××××××××××××××××××××××
骨干参数:
一 自由模式(没有 -d 和 -p 参数)
其实,这是却是少用的模式, 是精确到扇区的方式,可以任意指定要处理的起始扇区(前缀 是 - )和扇区操作数(前缀是 + , 小联想:
GRUB 也是用 + 表示要加载的数据块(扇区)的个数).
如:
1-100+200 表示 从硬盘1 的开始扇区100处执行 执行扇区数为200
镜象文件串也支持 + 操作符,但不支持 - 操作符.
技术上,是可以支持的,但是,要在文件的海量之处都作上记号,但这将极大的降低文件读取的速度
如:
(e:\back=c=v100)+1000 表示总共执行文件含有的总扇区的1000个扇区
如下非法:
(e:\back=c=v100)-1000 试图从文件含有扇区的第1000个扇区处执行,但非法.
这种模式对 RAW数据的恢复非常有用.也就是用尽了全部文件式数据恢复工具不能找到数据的情况下,就要借助于扇区模式了..
二 匹配模式(包括 硬盘模式(-d) 和分区模式 (-p))
这种模式最常用,尤其是 分区模式.
这种模式由于处理的是 格式数据(硬盘和分区),所以,要匹配,至少是原数据块要小于目标数据块(在这种情况下,如果是分区模式,除了
把源分区的分区ID,和80/00是否活跃标志共两处,两个字节更新到目标分区外,目前不支持更新分区的大小,这涉及到搬移其后的所有分
区!,而且,对于一般用户,用的较少,一般都是哪里来哪里去的,起到一个备份恢复作用..)
由于是格式匹配模式,所以不允许使用 - 和 + 操作符.
匹配模式 的 源串和目标串的个数必须相等,否则警告退出
匹配模式支持镜象文件串.
除了分区模式 要用源分区的 分区ID 和80/00 更新目标分区的分区表,
多任务的匹配模式 等价于自由模式的单任务的无 - + 的个数相同的一对一的串合:
比如:
1,2 TO 3,4 -d
等价于两次操作:
1 TO 3
2 TO 4
但不等价于
1,2 TO 3,4
除非1,3大小相同, 2,4大小相同
因为,自由模式是一种灵活的模式,前后任务是向续接替的
比如
硬盘1 总扇区 1000
硬盘2 总扇区 2000
硬盘3 总扇区 1500
硬盘4 总扇区 3000
1,2 TO 3,4
在自由模式 中,过程如下:
硬盘1 传递给 硬盘3 1000个扇区,退出 (硬盘1 完成任务)
硬盘2传递给 硬盘3 500个扇区,硬盘3 退出(硬盘3 完成任务)
硬盘2传递给 硬盘4 1500 个扇区 , 硬盘2 退出(硬盘2 完成任务)
程序便退出(因为 源和目标已经有一方完成了)
程序这样处理是考虑到 灵活性: 可能 使用者 可能并不确切的知道各个分区,硬盘的精确大小等等东西,但是又想完成前面的已经满足
条件的数据...
参数
硬盘串:
1
执行为:
硬盘1 开始扇区0 处理扇区为整个硬盘的总扇区
分区串:
1:1
执行为:
硬盘1 分区1的开始扇区 处理扇区为分区1的总扇区
DOS盘符串:
C:
程序在分区表中找出其对应的分区,然后等同于分区串
镜象文件串
要用括号括起来()
完全的参数如下:
(d:\image=c9=k=v1000=e?) 用 = 号 连接
第一为文件名(8.3格式)
Cn C(COMPRESS) 压缩, 9 为压缩级别,(1-9,6 可能是强度和速度的最佳平衡点,如没有级别,则取默认的6)
K (KEY),表示压缩文件有密码. 默认没有密码,有K,表示要有密码,那么当程序创建压缩镜象时,会要求用户输入密码,以便下次用文件
恢复到硬盘前,也要用户输入密码,这是安全需要.
(但是,仅有K,只会对第一个压缩文件要求密码,如果有分卷,不会后面的分卷要求密码)
Vn V(Volume)表示有分卷功能, 在把硬盘数据存为分卷文件时,必须要用户指定每个分卷的大小(以MB为单位 ) n 表示 MB
V1000 表示 以每 1000MB为一卷
(补充: 当文件参数在 左边时,也就是源位置时, 如没有V, 程序将只处理一个文件,不擅自寻找是否有分卷(因为这样有可能自做主张
了. 如果 有 V, 将自动寻找其分卷,但只要给出 这个 V 即可,无需 n)
E? E (Eevry)表示对每个压缩的分卷要求密码,如果没有 ? , 程序会把第一文件(母卷)的密码都自动写入后面的分卷中.如果有 ? 表
示 对每个压缩的分卷文件要求密码,并且 停下来,等待用户输入.
LOOK mode
就是 看看硬盘和分区的信息
-D
查看全部硬盘
-Dn
查看第n硬盘
-P
查看全部分区
-Pnoz 或 -Pnozero
不显示分区ID为0x00 的分区
-Pnoh -Pnohidden
不显示隐藏分区
-Pnozh -Pnozerohidden
不显示分区ID为0x00和隐藏分区
-Pfn 或 -Pfatntfs
只显示FAT NTFS分区
-Pf 或 -Pfat
只显示FAT分区
-P:
只显示DOS下盘符(也就是非隐藏的FAT系列)
-Pl 或-Plinux
只显示 Linux分区
***************************************
**********************************************
关于 本程序 采用的压缩库 zllib
ZLIB 压缩比相当高 采用 优化高效的 LZ77 和 HUFFMAN 结合,DEFLATE方式
而且速度与同类的压缩库相比要快的多! (当然前面讲了 GHOST 采用的是文件模式,所以快,不是GHOST的压缩库块,而是它处理的数据
量小,如果比较压缩库,应该是与GHOST速度和压缩比差不多的..能达到平均每秒 1,2MB! )
*********************************
***********************************
本程序的局限性和待增加的功能:
由于是DOS程序, 文件参数只支持FAT系列的盘符
程序显示出的分区总表中的 DOS 盘符 是按照 DOS的盘符分配规律推测出的,不一定准确,
尤其是场合性的挂载额外的驱动器(如U盘,移动硬盘,虚拟盘等),仅作参考。但是表中显示的分区数字是没有问题的。
计划 加入 处理指定的镜象中的第几硬盘和第几分区
***************************************
***************************************************
几个有用的开关:
1 i|ignore ( ir|ignoreRead iw|ignoreWrite)
忽略磁盘的 读写错误, 这样的话,就不会因为较少的介质问题而终止整个程序。
2 q | quiet
不要提示,直接执行(但对诸如文件打不开等,仍然要跟你要文件名的。。等等)
3 n | next
当执行某个任务发现致命的错误时,不退出整个程序,继续执行下一个任务(但仍然根据前一个已完成的数据量对下一个任务的数据量作
更新)
4 m | mute
不显示信息
这四个参数的地点:
1
可在两种参数中给出
a
i 用在硬盘/分区/DOS盘符串:(用 =连接)
如:
1=i TO 2 (忽略读硬盘1的错误,但不忽略硬盘2的写错误)
1:1 TO 2:3=i (忽略写硬盘2分区3的 写错误,但不忽略读硬盘1分区1的读错误)
e:=i TO 2:3=i (都忽略)
但是忽略开关(-i)不能用在镜象文件串中(因为文件不是设备。如果在读写文件的过程中DOS给出了错误,是不能忽略过的,程序会提示
你,重新输入文件名)
b -ir -iw 用在后面的独立之处(对全部任务起作用)
如:
1:2,E: TO 2:3,(BACK.TOZ=C) -ir -iw (忽略全部任务的读错误和写错误)
2 q | quiet (没有采用 y ,以免 跟后面的 n 混同,可能使使用者误以为 y 表示不给提示,n 表示给提示。。)
可以用在任何地方,包括镜象文件串
如用在源/目标串(用 = 连接),仅对其源/目标串起作用:
1:1=q,2:3 TO 2:4,3:4
(用于镜象文件串时,必须在()之后):
1:1,(FILE.Z=v)=q TO 4:3,2:3
如用在后面的独立之处(用 - 连接),对全部任务起作用
3 n|next
可以用在任何地方,包括镜象文件串
如用在源/目标串,仅对其源/目标串起作用,
如用在后面的独立之处,对全部任务起作用
4 m|mute
可以用在任何地方,包括镜象文件串
如用在源/目标串,仅对其源/目标串起作用,
如用在后面的独立之处,对全部任务起作用
*********************
****************************
补充:
如果源/目标串中有 - + 操作符,那么
用在源/目标串中的以上的参数( i | ignore, q | quiet,m | mute, n | next) 必须放在 - 或 + 的后面:(当然,在 匹配模式 -d,
-p 中,本来就不能有- + 操作符,自然就不存在这个问题 )
1:1 TO 2:3-100+200=i
1:1 TO 2:3-100+200=q
1:1,2:3 TO 2:3-100+200=n,3:4
另:
以上四个参数可以连用:
1:1,2:3 TO 2:3-100+200=i=q=m=n,(BACK.TOZ=C)=i=q=m=n
1:2,E: TO 2:3,(BACK.TOZ=C) -q -m -n -ir -iw
****************************************
***************************************
TOdisk 和 Lucho's bootdisk 下载地址:
http://johnson.tmfc.net/dos/index.html
http://linux.tu-varna.acad.bg/~lig/dos/
[此贴子已经被作者于2007-1-9 10:38:02编辑过]