|  | 
 
| dos联盟的GOTOmsdos的大作,近日,联盟无法访问,转贴一下。 
 有兴趣的可开发基于todisk的一键恢复,就可解决盗版问题。
 
 ---------------------------------------------------
 有时用GHOST备份失败,可能文件出了什么问题。。。
 就自己写了个程序 TOdisk 成功地备份了。。
 用扇区方式备份硬盘或分区或任意扇区。。。
 支持压缩和分卷,扩展分区,多任务。。。等等。。
 多谢 中国DOS联盟的johnsonlam兄(香港),fastslz兄  等等热心网友, ddcopy作者李治先生和 老外Lucho的帮助和支持!
 欢迎访问 http://www.cn-dos.net 和 http://johnson.tmfc.net/dos/index.html 进行DOS交流
 说明如下:
 硬盘全真备份恢复器 ==TOdisk ==(扇区模式)
 版本:1.3 alpha
 运行环境: MS-DOS / Win9xMS-DOS窗口  (如加载UDMA驱动,可能运行反常)
 TOdisk version 1.3 Alpha Copyright (C) 2006-2007 by GOTOmsdos, 2006-1-13
 Email: tdaim@sina.com
 语法:
 <执行模式>
 TOdisk 源串1[,源串n...] TO 目标串1[,目标串n...] [-[[d|p][q][m][n][i|[[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, 镜象文件 串  >>
 镜象文件参数:
 Cn - C : (compress)压缩
 n : 压缩级别(1-9,6 可能是强度和速度的最佳平衡点,如没有级别,则取默认的6)
 K - K : key 压缩密码,需要提示输入密码
 Vn - V : (volume) 分卷
 n : 每卷大小的MBs(从1到2047) 如果没有指定,默认是2047
 E? - E : (every)每卷的压缩密码跟第一卷的一样
 ? : 每卷都要提示输入压缩密码
 
 --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?)  <压缩,要提示输入密码,分卷,每卷都要提示输入密码>
 例子:
 (g:\image.toz=c7=k=v1000=e?)
 (注意:在多任务中,当镜象文件串是目标时,只能位于最后一个(所以,也只能有一个)
 例子:
 合法:
 1:1 TO 2:3,3:4,(g:\image.toz=c=v)
 1:1,2:2,3:3 TO 2:3,3:4,(g:\image.toz=c=v)
 1:1,2:2,3:3 TO 2:3,(g:\image.toz=c=v),3:4 -p
 1:1,3:4,4:4 TO 2:3,(f:\image1.toz=c=v),(g:\image2.toz=c=v) -p
 不合法 1:
 1:1 TO 2:3,(g:\image.toz=c=v),3:4
 1:1,2:2,3:3 TO 2:3,(g:\image.toz=c=v),3:4
 (自由模式,并且不是在最后一个)
 不合法 2:
 1:1,3:4,4:4 TO 2:3,(f:\image1.toz=c=v),(g:\image2.toz=c=v)
 (自由模式,, 但是超过了一个镜象文件串)
 )
 --B
 是源时(会自动判断是否是压缩,所以,即使以to为后缀的压缩文件也能被识别为压缩文件):
 (c:\image.toz) <不自动搜索分卷>
 (c:\image.toz=V) <自动搜索分卷>
 <镜象文件名,如不压缩建议后缀为to, 如压缩建议后缀为toz, 以免跟其他文件名混淆,不过程序并不强制这样)
 在源/目标串中
 - : 指定要操作的起始扇区
 + : 指定要操作的扇区数
 但在镜象文件串中不被允许
 例子:
 1-5000
 1:2+5000
 D:-5000+10000
 (g:\image.toz)+3000
 源/目标串开关:
 =q : quiet 安静(无询问)
 =m : mute 沉默(无信息显示)
 =i : ignore 忽略(忽略读写错误,但对镜象文件串无效)
 =n : next 下一个(如果遇到致命错误,就继续下一个任务)
 例子:
 1:2=q=m,3:4 TO 4:1=i=n,(file=c)=q=m
 如果源/目标串中有 - + 操作符,那么
 用在源/目标串中的以上的参数( i, q,m, n) 必须放在 - 或 + 的后面:(当然,在 匹配模式 -d,
 -p 中,本来就不能有- + 操作符,自然就不存在这个问题 )
 例子:
 1:2-300+400=q=m,3:4 TO 4:1=i=n,(file=c)+500=q=m
 
 全局开关 1 (模式开关):
 --A
 (匹配模式)
 -d|p  硬盘|分区 子模式
 在匹配模式中,源串和目标串的个数必须相等。此外,在分区模式中,如果目标串是分区,要更新分区ID)
 
 -d 硬盘模式例子:
 1,2 TO 3,4 -d
 等价于两次分开的操作:
 1 TO 3
 2 TO 4
 但不等价于
 1,2 TO 3,4
 除非1,3大小相同, 2,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. )
 
 --B
 (自由模式)
 无 -d|p 开关
 在自由模式中,不要求源串和目标串的个数相等,前后任务之间的数据传输有相互接续的关系)
 比如:
 硬盘1 总扇区 1000
 硬盘2 总扇区 2000
 硬盘3 总扇区 1500
 硬盘4 总扇区 3000
 
 1,2 TO 3,4
 这是自由模式,过程如下:
 任务 1:
 硬盘1 传递给 硬盘3 1000个扇区 (硬盘1 完成任务,退出)
 任务 2:
 硬盘2 传递给 硬盘3 1500-1000=500个扇区 (硬盘3 完成任务,退出)
 任务 3:
 硬盘2 传递给 硬盘4 2000-500=1500 个扇区 (硬盘2 完成任务,退出)
 程序便退出(因为 源和目标已经有一方完成了)
 程序这样处理是考虑到 灵活性: 可能 使用者 可能并不确切的知道各个分区,硬盘的精确大小等等东西,但是又想完成前面的已经满足
 条件的数据...
 在自由模式中,不要求源串和目标串的个数相等,因为前后任务之间的数据传输有相互接续的关系
 例如:
 1 TO 2:3,3:4,4:5,(g:\file.to)
 全局开关 2 :
 (下列位于命令行参数的后端,对全部任务有效):
 -q|quiet            : 安静(无询问)
 -m|mute             : 沉默(无信息显示)
 -i|ignore           : 忽略(忽略读和写错误,但对镜象文件串无效)
 -ir|ignorereaderror  : 忽略读错误
 -iw|ignorewriteerror : 忽略写错误
 -n|next             : 下一个(如果遇到致命错误,就继续下一个任务)
 例子:
 1:2,E: TO 2:3,(back.toz=c) -q -m -n -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
 c     - 压缩级别6
 k     - 提示输入压缩密码
 v1000 - 分卷,每卷大小1000 MBs
 e?    - 每卷都要提示输入压缩密码
 多任务:
 匹配模式:
 1:2,(h:\image.toz=v),2:3 TO (g:\image.toz=c=v),D:,3:2 -p
 自由模式:
 1:2,2:3-2345,3:4 TO 3:3-1234+300,4:1+3456,(i:\image.toz=c=v1000)
 <查看模式>
 -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:
 *********
 补充说明
 *********
 本程序采用的是扇区方式:
 企业方式或者是极其重要的数据,应该采用扇区方式.
 ×××××××××××××××××××××
 特别建议:
 1
 本程序很适合备份塞满文件的分区。
 2
 由于是扇区方式,所以可以备份任何文件系统的 分区(包括LINUX等等。。。)
 不过,如果要备份到镜象文件,镜象文件所在分区只能是FAT/FAT32.
 ××××××××××××××××××××××××××××××
 骨干开关:
 一 匹配模式(包括 硬盘模式(-d)  和分区模式 (-p))
 这种模式最常用,尤其是 分区模式.
 这种模式由于处理的是 格式数据(硬盘和分区),所以,要匹配,至少是原数据块要小于目标数据块(在这种情况下,如果是分区模式,除了
 把源分区的分区ID,和80/00是否活跃标志共两处,两个字节更新到目标分区外,目前不支持更新分区的大小,这涉及到搬移其后的所有分
 区!,而且,对于一般用户,用的较少,一般都是哪里来哪里去的,起到一个备份恢复作用..)
 由于是格式匹配模式,所以不允许使用 - 和 + 操作符.
 匹配模式 的 源串和目标串的个数必须相等,否则警告退出
 匹配模式支持镜象文件串.
 除了分区模式要用源分区的分区ID和80/00更新目标分区的分区表外,
 多任务的匹配模式 等价于自由模式的单任务的无 - + 的个数相同的一对一的串合。
 二 自由模式(没有 -d 和 -p 参数)
 这是精确到扇区的方式,可以任意指定要处理的起始扇区(前缀 是 - )和扇区操作数(前缀是 + , 小联想:
 GRUB 也是用 + 表示要加载的数据块(扇区)的个数).
 如:
 1-100+200 表示 从硬盘1 的开始扇区100处执行 执行扇区数为200
 镜象文件串也支持 + 操作符,但不支持 - 操作符.
 技术上,是可以支持的,但是,要在文件的海量之处都作上记号,但这将极大的降低文件读取的速度
 如:
 (e:\back=c=v100)+1000 表示总共执行文件含有的总扇区的1000个扇区
 如下非法:
 (e:\back=c=v100)-1000 试图从文件含有扇区的第1000个扇区处执行,但非法.
 这种模式对 RAW数据的恢复非常有用.也就是用尽了全部文件式数据恢复工具不能找到数据的情况下,就要借助于扇区模式了..
 源/目标串
 硬盘串:
 1
 执行为:
 硬盘1 开始扇区0 处理扇区为整个硬盘的总扇区
 分区串:
 1:1
 执行为:
 硬盘1 分区1的开始扇区 处理扇区为分区1的总扇区
 DOS盘符串:
 C:
 程序在分区表中找出其对应的分区,然后等同于分区串
 镜象文件串
 要用括号括起来()
 完全的参数如下:
 (d:\image=c=k=v1000=e?)  用 = 号 连接
 第一为文件名(8.3格式)
 Cn C(COMPRESS) 压缩, 9 为压缩级别,(1-9,6 可能是强度和速度的最佳平衡点,如没有级别,则取默认的6)
 K (KEY),表示压缩文件有密码. 默认没有密码,有K,表示要有密码,那么当程序创建压缩镜象时,会要求用户输入密码,以便下次用文件
 恢复到硬盘前,也要用户输入密码,这是安全需要.
 (但是,仅有K,只会对第一个压缩文件要求密码,如果有分卷,不会后面的分卷要求密码)
 Vn  V(Volume)表示有分卷功能, 在把硬盘数据存为分卷文件时,用户可以指定每个分卷的大小(以MB为单位 ),n 表示 MB,默认是2047
 V1000 表示 以每 1000MB为一卷
 (补充: 当文件参数在左边时,也就是源位置时, 如没有V, 程序将只处理一个文件,不擅自寻找是否有分卷(因为这样有可能自做主张
 了. 如果 有 V, 将自动寻找其分卷,但只要给出 这个 V 即可,无需 n)
 E?  E (Eevry)表示对每个压缩的分卷要求密码,如果没有 ? , 程序会把第一文件(母卷)的密码都自动写入后面的分卷中.如果有 ? 表
 示 对每个压缩的分卷文件要求密码,并且 停下来,等待用户输入.
 ***********************************************
 关于本程序采用的压缩库 zlib 和艰辛的寻找过程
 ***********************************************
 1
 试了,简单古老版的 LZ, LZW,HUFFMAN,LZHUF,LZSS,LZHARC, LZ77,LZARI,LZRW1等等,都不理想,太老,效率太低,只能用来教学。
 2
 看了 ARJ/UNARJ,有很多我不要的功能。。
 3
 曾定在 GZIP(BZIP2,基本差不多),很不错,也觉得有点适合我,压缩比和速度都很好,还有1-9的压缩比选项。。钻研了几天,
 发现没有内存压缩,只有文件压缩,。。。
 4
 看到一个提示: zlib 支持内存压缩!
 确定它了!
 (ZLIB和GZIP,PNG都采用相同的引擎:基于LZ77和HUFFMAN的结合,当然和前面提到的古老原始的版本是不可同日而语的)
 在此过程中,与DDCOPY作者李治联系了。取得了DDCOPY源么,对我有启发。。
 不过,试了DDCOPY的压缩,不太理想,豪时长,压缩比低。因为他采用的压缩/解压的类较简单,就两个文件(用简单的LZSS,
 胡颖卓编写的类,后来我也在网上看到了)
 采用的压缩引擎是先进的最新版的 zlib-1.2.3 库(与GZIP,PNG图象用的同一个引擎),
 压缩比和压缩速度很快,解压速度更快的离谱!
 在WIN32 控制台程序中,压缩50MB,大约要20秒,压为了25MB。
 解压只要大约3秒! 我*!
 还有 压缩比的1-9选项(类似GHOST)。。。
 ZLIB 压缩比相当高 采用 优化高效的 LZ77 和 HUFFMAN 结合,DEFLATE方式
 而且速度与同类的压缩库相比要快的多! (如果比较压缩库,应该是与GHOST速度和压缩比差不多的.. )
 *****************************
 本程序的局限性和待增加的功能
 *****************************
 由于是DOS程序, 文件参数只支持FAT系列的盘符
 程序显示出的分区总表中的 DOS 盘符 是按照 DOS的盘符分配规律推测出的,不一定准确,
 尤其是场合性的挂载额外的驱动器(如U盘,移动硬盘,虚拟盘等),仅作参考。但是表中显示的分区数字是没有问题的。
 计划加入处理指定的镜象中的第几硬盘和第几分区
 ***************
 几个有用的开关
 ***************
 1  i|ignore (还有 ir|ignorereaderror  iw|ignorewriteerror)
 忽略磁盘的 读写错误, 这样的话,就不会因为较少的介质问题而终止整个程序。
 2
 q | quiet
 不要提示,直接执行(但对诸如文件打不开等,仍然要跟你要文件名的。。等等)
 3 n | next
 当执行某个任务发现致命的错误时,不退出整个程序,继续执行下一个任务(但仍然根据前一个已完成的数据量对下一个任务的数据量作
 更新)
 4 m | mute
 不显示信息
 这几个开关的使用地点:
 单个字母既可用于源/目标串中〈仅对其源/目标串的任务起作用〉,也可用于全局〈对全局起作用〉;而两个或两个以上的字符只能用于全局):
 其中,i
 a
 用在硬盘/分区/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) -i(也可-ir -iw) (忽略全部任务的读错误和写错误)
 q | quiet  (没有采用 y ,以免 跟 n 混同,以避免使用者误以为 y 表示不给提示,n 表示给提示。)
 
 [ 本帖最后由 lianjiang 于 2008-9-2 16:20 编辑 ]
 | 
 |