BadCopy

最后更新:2006-07-16  版本:2.0.0.716

 

简介

badcopy - 从不良的存储介质中复制文件
  • 从包含物理坏块的存储介质中复制文件。
  • 直接读取物理扇区,尽力恢复数据。
  • 允许自定义读取步长和重试次数,用户自己在正确性和效率之间作出权衡。
  • 可以从用户定义的位置开始复制,支持数据追加模式。
  • 对于无法读出的数据,允许用户自定义填充字节。
  • 支持文件通配符,可以包含子目录。
  • 分级的日志文件。

 

badcopy 如何工作

badcopy 主要用于从包含物理损伤的存储介质中尽力挽救数据。从损伤严重度上,可以把 badcopy 要面对存储介质分为 2 类:

1. 完好或轻度损伤

存储介质中只有个别扇区受到了轻微损伤,通过反复尝试读取这些扇区,能够完整地复制文件内容。可以通过 “-retry” 参数定义尝试反复读取的次数(默认不反复读取)。


2. 严重损伤

存储介质中存在完全无法恢复的扇区,这种情况下,文件仍然被复制。那些无法读取的数据块将使用用户定义的字节填充(默认为0)。

在尝试对存在严重损伤的介质进行恢复时,“-block” 参数决定了恢复的效率。默认情况下,badcopy 每次尝试读取一个扇区的内容(扇区的尺寸取决于正在访问的存储介质),在尝试了“-retry”指定的次数后,如果某个扇区的内容仍然无法读出,则该扇的内容将由填充字节取代,badcopy 继续尝试读取下一个扇区。

存储介质上的坏块通常是连续存在的,并且每次设备返回访问错误前,通常会尽力尝试读取数据(在CD/DVD-ROM上,光驱每次要尝试大概15秒左右才会返回读取错误)。这两个特性使得某些场合下,逐扇区尝试的代价过高。这时用户可以通过 “-block” 参数定义每次尝试读取的扇区数。

正如前文所述,增大这个值获得的效率提升是以降低潜在精确度为代价的。例如:当使用“-block=10”时,将每次尝试读取10个扇区的内容,这10个扇区中只要有任意一个为坏扇,所有这10个扇区在目标文件中都将被填充。不过,由于坏块通常是连续分布的,出现这种情况的可能性很小。

 

常见文件类型的恢复策略

1. 流媒体

对于流媒体之类(VCD、DVD、RM、AVI等等)尺寸庞大,并且对错误不敏感(对于DVD来说,烂掉2MB数据只不过在电影的某一瞬间产生一点毛刺而已)的文件,建议把block值设的大一点(对于DVD来说,512是个不错的选择,VCD和一般的AVI、RM可以设成128)。作为参考,对于 DVD-D5 格式(2小时/4GB)来说,节目每秒钟平均占用300个扇区的存储空间。对于DVD-D9 格式(2小时/8GB)来说是 600 个扇区。

badcopy 的设计初衷就是高效地为LP(那时还是GF)高效地复制D版DVD ^_^。

2. 有代价的容错格式

是指丢失的数据对文件有较明显的影响,静态图像(jpg、png等);文档(txt、doc、ppt等);打包文件(zip等)都属于此类情况。这种文件要求尽可能的精确复制。推荐block使用默认值(1)、retry使用2到3。

3. 携带冗余再生信息的文件格式

文件在编码时已经考虑到了数据丢失问题,并提供了某种程度上的再生算法和用于重建的冗余数据。例如rar打包格式中的“恢复记录”选项。这类格式使用额外的信息确保能够容忍少量数据丢失,对于较小的文件,全部使用默认选项恢复即可(block为1, retry为0);对于较大的文件(用于恢复的冗余数据也较多),可以适当增大block的值(如:30)。

特别说明:对于用crypto加密过的文件,其数据恢复能力取决于文件的原始格式。crypto本身能够对不完整的数据进行解密,解密后的数据如果带有冗余再生信息,该信息仍然有效。

4. 完全不容错的格式
例如可执行文件(.exe, .dll)等。这种文件的大部分内容都不允许有任何错误。使用默认的block和较高的retry值尝试。

■注意■ 如果您正在尝试从硬盘中恢复非常重要的数据,请不要使用 badcopy。您应当在出现故障后的第一时间关闭计算机,并将硬盘送往专业数据恢复机构。

 

帮助屏幕

D:\product\BadCopy\vc_msw>
#badcopy.exe

==============================================================================
  BadCopy 2.0.0.716 by BaiYang / 2004 - 2006, Freeware
==============================================================================
Copy file from incorrect storage media.

[USAGE]: badcopy srcpattern destdir [Options]

==============================================================================
Options:
  -block:   - specify how many sectors should be read one time. the actual size
              of the sector is vary from different storage media type.
                DEFAULT: one sector per step.
  -offset:  - sector position to start copy, DEFAULT: 0
  -retry:   - retry times, DEFAULT: 0
  -fill:    - specify the fill value for bad sectors, DEFAULT: 0x00
  -append   - don't overwrite the destination file, instead of it, append new
              to the end of file.
                DEFAULT: if '-offset'=0 then overwirte, else: append
                NOTE: if this switch is specified and "-offset" is 0 (as the
                default), also the target file size is multiple of the source
                device's sector size, then "-offset" will be adjusted to
                continue the last copy process.
  -s        - include sub directories.
  -logfile: - using a logfile.
  -loglevel - specify the lowest logging level, could be:
                DebugOnly (Most Detail)
                Info
                Warning (DEFAULT)
                Error
                FatalError
                Disabled (Close Logging Output)

==============================================================================
Following Digital Representaion are recognized:
  Hexadecimal, Prefix: 0x, 0X, x, X
  Octal,       Prefix: 0
  Binary,      Prefix: 0b, 0B, b, B
  Decimal,     Prefix: NONE (1-9)

==============================================================================
Examples:
  badcopy D:\*.AVI C:\TEMP /fill=0xFF /block:8
  badcopy D:\src.dat C:\recovery -offset:1502 -retry:3 -fill:B10101010
  badcopy my.rm c:\temp /append

 

简单中文帮助

C:\Documents and Settings\Administrator>
#badcopy

==============================================================================
  BadCopy 2.0.0.716 by BaiYang / 2004 - 2006, 免费软件
==============================================================================
从存在故障的存储介质中复制文件

[用法]: badcopy 源文件通配符 目标目录 [选项]

==============================================================================
选项:
  -block:   - 指定每次读取多少个扇区,扇区的尺寸随存贮介质的不同而变化。
                默认值: 每次一扇区
  -offset:  - 从指定的偏移(扇区数)开始复制文件。默认: 0
  -retry:   - 重试次数。默认: 0
  -fill:    - 指定无法读取内容的填充值。默认: 0x00
  -append   - 将新读取得内容追加到目标目录中的同名文件(而不是覆盖它)。
                默认: 如果 '-offset' 为 0 则覆盖,否则追加
                注意: 如果指定了此开关,并且 '-offset' 为 0 (默认情况),同时
                目标文件的尺寸为源设备扇区尺寸的正倍数,则将继续上次未完成的复
                制过程(将 '-offset' 自动调整为从上次中止的位置继续)。
  -s        - 包含子目录
  -logfile: - 使用指定的日志文件
  -loglevel - 知道日志文件的详细程度,可以是:
                DebugOnly (最详细)
                Info
                Warning (默认)
                Error
                FatalError
                Disabled (禁用日志输出)

==============================================================================
参数接受以下数值表示法:
  十六进制,前缀: 0x, 0X, x, X
  八进制,  前缀: 0
  二进制,  前缀: 0b, 0B, b, B
  十进制,  前缀: 无 (1-9)

==============================================================================
使用示例:
  badcopy D:\*.AVI C:\TEMP /fill=0xFF /block:8
  badcopy D:\src.zip C:\recovery -offset:1502 -retry:3 -fill:B10101010
  badcopy my.rm c:\temp /append

 

下载

badcopy.rar