这是安全复制命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
安全复制 - 从导致 IO 错误的源中拯救数据
概要
安全复制 [OPTION] ... 源 目标
商品描述
安全复制 尝试从 SOURCE 获取尽可能多的数据,甚至求助于设备
如果适用,特定的低级操作。
这是通过识别有问题或损坏的区域,跳过它们并
之后继续阅读。 目标文件中的对应区域是
跳过(在初始创建时,这意味着用零填充)或故意填充
可识别的模式,以便以后在损坏的设备上找到受影响的文件。
Safecopy 使用增量算法来识别错误的确切开始和结束
区域,允许用户交换对坏区域的最小访问以获得完整的数据
复活。
可以多次遍历同一个文件,首先从一个文件中检索尽可能多的数据
尽可能以最小的伤害设备,然后尝试取回一些剩余的
具有越来越积极的读取尝试的数据。
为此,源设备或文件必须是可查找的。 对于不可搜索的设备
(如磁带)您可以尝试使用外部脚本来执行受控跳过
为您损坏的部分。
(例如,在 SCSI 磁带设备上使用“mt seek”和“mt tell”)请参阅“-S
" 参数了解详情。
该工具的性能和成功在很大程度上取决于设备驱动程序、固件和
底层硬件。
目前,safecopy 支持对 CDROM 驱动器的 RAW 访问以直接读取 CD 的数据,
绕过一些依赖于驱动程序的错误纠正。 这可以加快数据检索
CD 和减少恢复过程中的系统负载,以及提高成功率。 安全复印
使用磁盘状态系统调用来确定 CD 的扇区大小和寻址。 这失败了
混合模式或多区段 CD,因为扇区布局可以在磁盘内改变,但
仍然可以在大多数磁盘上工作。 其他磁盘仍然可以恢复
使用正常的高级数据访问。 Safecopy 自动检测期间涉及的磁盘类型
扫描磁盘和块大小。
已知某些 CD/DVD 驱动器会导致 ATAPI 总线因错误而崩溃,从而导致设备
驱动程序冻结时间长达一分钟以上每个错误。 尽量避免使用这样的
用于媒体恢复的驱动器。 在某些情况下,使用安全副本低级别访问功能可能会有所帮助
的情况。
某些驱动器可以比其他驱动器更好地读取不良媒体。 请务必尝试对 CD 进行数据恢复
和 DVD 在几个不同的驱动器和计算机上。 您可以使用安全副本增量
恢复功能仅读取以前不可读的扇区。
可靠性
从损坏的媒体中恢复数据是一项艰巨的任务,在最坏的情况下它会成功或
失败可以保护整个公司或毁掉整个公司,并封印受影响人的个人命运。 这是
最重要的是,为此目的编写的任何工具都是可靠和值得信赖的。
用户需要知道软件究竟对他的硬件和数据做了什么。 这
任何操作的结果都需要既可理解又可预测。
一个未知复杂内部行为的“智能数据复活精灵”可能是一个
漂亮的工具,但不满足上述可预测结果的要求,也不会
用户事先知道对他的数据做了什么。
安全复制的操作顺序一直保持相对简单,以确保这一点
可预测性。 不幸的是,添加功能增加了复杂性并导致
过去当包含和排除列表混合时的未定义结果,尤其是
当混合不同的块大小时。 在最坏的情况下,这可能会导致覆盖
稍后使用标记 (-M) 选项增量运行目标文件中的数据。
从 1.3 版开始,safecopy 附带了一个可用于验证安全副本的测试套件
一组测试用例中的行为,模拟输入中的坏块与
不同的包含和排除列表,有标记和没有标记。 发布只做
如果 safecopy 根据规范通过了这些测试用例。
这个安全复制行为的文本规范可以在文件中找到
规范.txt 随safecopy 一起提供。
配置
- 阶段1
预设可快速抢救大部分数据,无需重试并避免坏区。
预置: -f 10% -r 10% -R 1 -Z 0 -L 2 -M BaDbLoCk -o stage1.badblocks
- 阶段2
预设以挽救更多数据,不使用重试而是搜索坏的确切结束
区域。
预置: -f 128* -r 1* -R 1 -Z 0 -L 2 -I stage1.badblocks -o stage2.badblocks
- 阶段3
预设以拯救所有可以使用最大重试次数拯救的东西,头部
重新排列技巧和低级访问。
预置: -f 1* -r 1* -R 4 -Z 1 -L 2 -I stage2.badblocks -o stage3.badblocks
所有舞台预设都可以被各个选项覆盖。
-b <尺寸>
默认读取操作的块大小。 将此设置为您的物理扇区大小
上的相关利益产业。
默认:1*
操作系统报告的硬件块大小,否则为 4096
-f <尺寸>
跳过坏块时的块大小(以字节为单位)。 更高的设置可以减少压力
在您的硬件上,但您可能会错过两个坏区域之间的好区域。
默认:16*
-r <尺寸>
搜索错误区域的确切开头或结尾时的分辨率(以字节为单位)。
如果您直接从设备读取数据,则无需将其设置为低于
硬件块大小。 然而,在挂载的文件系统上,读取块和物理
块可能未对齐。 较小的值会导致非常彻底的阅读尝试
损坏区域边缘的数据,但会增加损坏介质的压力。
默认:1*
-R <数>
至少在损坏区域的第一个坏块上进行了多次读取尝试
以最小分辨率。 更多的重试有时可以恢复疲软的扇区,但在
额外应变的成本。
默认:3
-Z <数>
对于每个错误,从源设备的开始到结束强制查找读取头,如下所示
通常按照规定。 这需要时间,会产生额外的压力,而且可能不会
所有设备或驱动程序都支持。
默认:1
-L <模式>
使用指定的低级设备调用:
0 不要使用低级设备调用
1 尝试低级设备调用仅用于错误恢复
2 如果可用,始终使用低级设备调用
此版本支持的低级功能有:
系统设备类型特征
Linux cdrom/dvd 总线/设备重置
Linux cdrom 在原始模式下读取扇区
Linux 软盘控制器复位,胡闹
默认:1
- 同步 使用同步读取调用(禁用驱动程序缓冲)。 Safecopy 将使用 O_DIRECT
如果操作系统支持,否则为 O_SYNC。
默认: 允许操作系统的异步读取缓冲
--强制打开
在出现对 USB 驱动器有用的读取错误后继续尝试重新打开源
暂时离开。
警告:这会导致安全复制挂起,直到手动中止!
默认: 在 fopen() 错误时中止
-s <块>
开始位置开始阅读。 将对应于位置 0
目标文件。
默认: 块 0
-l <块>
要读取的数据的最大长度。
默认: 输入文件的整个大小
-I <坏块文件>
增量模式。 假设目标文件已经存在并且在
坏块文件。 将尝试从列表中检索更多数据
块或仅超出目标文件的文件大小。
警告: 如果没有这个选项,目标文件将在之前被清空
写作。 如果您想继续之前运行的安全复制,请使用 -I /dev/null
没有坏块列表。
暗示: -c 0 如果未指定 -c
默认:无(/dev/null 如果给出 -c )
-i <字节>
块大小来解释用 -I 给出的坏块文件。
默认: 由 -b 指定的块大小
-c <块>
在此位置继续复印。 如果输出是一个块,这允许继续
具有固定大小的设备,而不是可增长的文件,其中安全复制不能
确定它已经走了多远。 使用的块大小与 -I 相同
选项。
-c 0 将继续使用当前目标大小。
暗示: -I /dev/null 如果未指定 -I
默认:无(如果给出 -I 则为 0)
-X <坏块文件>
排除模式。 如果与 -I 一起使用,排除的块会覆盖包含的块。
Safecopy 不会从排除块覆盖的区域读取或写入任何数据。
默认:无
-x <字节>
块大小来解释用 -X 给出的坏块文件。
默认: 由 -b 指定的块大小
-o <坏块文件>
编写一个 badblocks/e2fsck 兼容的坏块文件。
默认:无
-S <搜索脚本>
使用外部脚本在输入文件中查找。 (可能对磁带设备有用
和类似)。 Seekscript 必须是一个可执行文件,它将块数
被跳过为 argv1 (1-64) 块大小以字节为单位作为 argv2 和当前位置
(以字节为单位)作为 argv3。 返回值需要是成功的块数
跳过,或 0 表示搜索失败。 将只使用外部搜索脚本
如果 lseek() 失败,我们需要跳过数据。
默认:无
-M <绳子>
使用此字符串标记未恢复的数据,而不是跳过它。 这有助于以后
在获救的文件系统映像上查找损坏的文件。 默认为零
关于创建输出文件的不可读数据,并将数据保持原样
稍后运行。
警告: 当与增量模式 (-I) 结合使用时,这可能会覆盖
-I 文件中出现的任何块中的数据。 不在 -I 文件中的块,或
被 -X 指定的文件覆盖的文件不会被覆盖。
默认:无
-调试 <水平>
启用调试输出。 级别是一个位域,将值加在一起以获得更多
信息:
程序流程:1
IO控制:2
坏块标记:4
求:8
增量模式:16
排除模式:32
或所有调试输出:255
默认:0
-T <定时文件>
将扇区读取时序信息写入此文件以供以后分析。
默认:无
-h, - 帮帮我
显示程序帮助文本。
有无库存
有效参数 -f -r -b 选项是:
以字节为单位的数量 - 即 1024
%
整个文件/设备大小的百分比 - 例如 10%
*
-b 仅,操作系统报告的块大小的次数
*
-f 和 -r 仅,数值乘以 -b
OUTPUT
输出符号说明:
. 成功读取了 1 到 1024 个块。
_ 块读取未完成。 (可能是文件结尾)现在减少了块大小
阅读其余部分。
|/| 查找失败,只能顺序读取源码。
> 读取失败,减少块大小以读取部分数据。
! 读取最小允许大小的低级错误导致重试
尝试。
[xx](+yy){
到目前为止,当前块和字节数连续读取成功。
X 在具有最小块大小的块上读取失败并被跳过。 不可恢复的错误,
目标文件用零填充。 现在跳过数据直到结束
到达不可读区域。
< 在坏区域结束后成功读取导致回溯较小
块大小来搜索第一个可读数据。
}[xx](+yy)
最近连续不可读数据的当前块和字节数。
如何
我如何能...
- 从已安装但已损坏的媒体中恢复文件,该副本将失败:
安全复制 /路径/到/问题文件 ~/保存文件
- 创建损坏磁盘/光盘的文件系统映像:
安全复制 /开发/设备 〜/磁盘映像
- 尽可能彻底地恢复数据?
安全复制 源 dest -f 1* -R 8 -Z 2
(假设块与扇区的逻辑错位)
安全复制 源 dest -f 1* -r 1 -R 8 -Z 2
- 尽快恢复数据,或
- 以低风险恢复数据,进一步损坏媒体:
(您可以为 -f 和 -r 使用更高的值)
安全复制 源目标 -f 10% -R 0 -Z 0
- 快速复活一些数据,然后彻底读取更多数据:
安全复制 源 dest -f 10% -R 0 -Z 0 -o badblockfile
安全复制 源 dest -f 1* -R 8 -Z 2 -I badblockfile
备用 的途径 运用 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 新 预设 特点:
安全复制 源 dest --stage1
安全复制 源 dest --stage2
安全复制 源 dest --stage3
- 利用一些朋友的光驱来完成我损坏的 CD 中的数据:
安全复制 /dev/mydrive 镜像文件-b -o 我的块文件
安全复制 /dev/otherdrive 镜像文件-b -I 我的块文件
-一世-o 其他块文件
安全复制 /dev/anotherdrive 镜像文件-b -一世
其他块文件 -i
- 中断并稍后恢复数据救援操作:
安全复制 源目标
(安全复制中止)
安全复制 源 dest -I /dev/null
- 使用正确的坏块输出中断并稍后恢复数据救援操作:
安全复制 源目标-o 坏块文件
(安全复制中止)
mv 坏块文件已保存坏块文件
安全复制 源 dest -I /dev/null -o badblockfile
猫 badblockfile >>savedbadblockfile
- 在增量模式下中断和恢复:
(这需要一些 bash 脚本来获得正确的坏块列表)
安全复制 源目标-o badblockfile1
安全复制 源目标-I badblockfile1 -o badblockfile2
(安全复制中止)
最新=$(尾-n 1 badblockfile2)
如果 [ -z $latest ]; 然后最新=-1; fi;
cat badblockfile1 | 读块时; 做
[ $block -gt $latest ] && echo $block >>badblockfile2;
完毕;
安全复制 源目标-I badblockfile2 -o badblockfile3
- 在部分成功获救的文件系统上找到损坏的文件:
安全复制 /dev/filesystem image -M CorrUpTeD
fsck的 图片
安装 -o 循环图像 /mnt/mountpoint
grep的 -R /mnt/mountpoint "CorrUpTeD"
(提示:如果不可读的部分较小,这可能无法找到所有受影响的文件
大小比您的标记字符串)
- 从文件系统映像中排除先前已知的文件系统坏块列表
创建:
转储2fs -b /dev/filesystem >badblocklist
安全复制 /dev/filesystem image -X badblocklist -x
- 创建一个从 X 开始,尺寸为 Y 的设备图像:
安全复制 /dev/文件系统-b -s -l
- 结合两个获救数据的部分图像,而无需访问实际(损坏)源
数据:
(这有点棘手。您需要以某种方式获取两个文件的坏块列表
让 safecopy 知道丢失的数据在哪里。 如果您使用了 -M(标记)功能,您
可能能够自动计算这些,但是不提供此功能
通过安全复制。 假设您有两个坏块文件。
你有:
图像1.dat
image1.badblocks(块大小1)
图像2.dat
image2.badblocks(块大小2)
image1 的文件大小需要大于或等于 image2 的文件大小。 (如果不,
交换它们) )
cp image2.dat 组合.dat
安全复制 image1.dat combine.dat -I image2.badblocks -i blocksize2 -X
image1.badblocks -x 块大小1
(这将为您提供组合数据,但没有输出 badblocklist。结果
badblocks 列表将是坏块
a: 在两个坏块列表中,或
b: 在 image1.badblocks 和超出 image2 的文件大小应该是合理的
在一个简短的 shell 脚本中很容易解决这个逻辑。 有一天这可能会发货
使用安全复制,在此之前考虑这是您为随机开放做出贡献的机会
源项目。)
- 拯救磁带设备的数据:
如果磁带设备驱动程序支持 lseek(),则将其视为任何文件,否则使用
安全复制的“-S”选项,带有一个要自己编写的脚本来跳过坏的
块。 (例如使用“mt seek”)确保您的磁带设备不会自动
关闭时倒带。 如果您有幸这样做,请向我发送反馈,以便我可以更新
本文档。
常见问题
Q:既然已经有了dd-rescue等工具,为什么还要创建这个工具?
为了这个目的?
A:因为我刚开始的时候不知道dd(-)rescue,感觉就是喜欢。 还有我
认为 safecopy 更适合处于数据丢失危险中的用户的需求,因为更多
可读的输出和比其他一些工具更容易理解的选项。
(话又说回来了,自己比较吧)同时safecopy支持低
其他工具没有的级别功能。
问:-Z 选项究竟有什么作用?
答:还记得在 MS-DOS 时代,软盘会发出 3 次“neek nark”的声音
每次遇到读取错误时? 这发生在 BIOS 或 DOS 磁盘时
驱动程序将 IO 头移动到其边界以可能更正小圆柱体
在再次尝试之前未对齐。 默认情况下,Linux 不会这样做,也不这样做
常见的 CDROM 驱动器或驱动程序。 然而,强迫这种行为会增加
您从 CD __BIG__ 时间读取坏扇区的机会。 (与软盘不同的是
通常影响不大)
问:我有什么最好的机会来复活一张变得无法读取的 CD?
答:尝试在许多不同的计算机和驱动器上制作备份映像。 的能力
从不良媒体中读取的内容差异极大。 我有一个 6 岁的 Lite On CDRW 驱动器,它
甚至阅读刻意刻划过的 CD(就像我的钥匙一样,为了使它
不可读)完美无缺。 同龄的 CDRW 驱动器在工作时不读取任何数据
完全来自 CD 的那部分,而大多数 DVD 和组合驱动器都有坏块
每几百个字节。 充分利用安全拷贝 RAW 访问功能,如果
适用的。 (-L 2 选项)
作为一般准则:
-CDRW 驱动器通常比只读 CD 驱动器做得更好。
-CD 驱动器有时比 DVD 驱动器在 CD 上表现更好。
- PC 驱动器有时比笔记本电脑更好。
-带有干净镜头的驱动器比土球好。
- 清理 CD 有帮助。
- 除非你使用化学品。
- 在 CD 上使用胶带会永久撕掉反射层
磁盘不可读。
问:我最好的复活软盘的机会是什么?
A:再次尝试不同的软盘驱动器。 请记住,它可能更容易进一步
损坏软盘上的数据而不是 CD 上的数据。 (不要过度阅读尝试)
问:BlueRay/HDDVD 磁盘怎么样?
A:如果我知道的话,见鬼去吧,但通常它们应该类似于 DVD。 这可能取决于
驱动器固件如何工作。
问:我的硬盘突然出现很多坏道,我该怎么办?
答:从损坏的硬盘驱动器中抢救数据时,速度是一个重要因素。 访问
坏的区域,甚至只是时间运行会进一步损坏驱动器,使以前
可读区域不可读,可能是由于温度升高、损坏的磁头刮伤
表面仍然完好的部分,轴承因振动而退化等。它的
建议关闭系统并从计算机中取出硬盘驱动器
在错误发生时尽快并尽可能快,而不会造成进一步的损害。
(不要拔插头!按reset强制重启然后通过电源关机
按钮/ACPI)
设置一个具有足够磁盘空间的救援系统来存储来自
损坏的驱动器(可能还有多个副本)。 如果你有一个外部硬盘
通过 USB SATA 或 SCSI 连接的驱动器盒,允许热插拔驱动器
进入正在运行的系统,使用它。 这使您可以在没有
需要驱动器通电,并且可能不由自主地启动 BIOS 或操作系统
访问它。 您还可以更轻松地访问驱动器以检查温度或
运行时的噪音。
抢救数据时,先抢救好数据,然后再尝试访问坏数据
部门。 Safecopy 允许您使用坏块排除跳过已知问题扇区
您可以从系统日志或驱动器中检索的文件 (-X)
内部日志,通过 smartmontools 或类似软件。 请注意,您可能
可能需要将物理扇区号转换为逻辑块号
取决于你的来源。
你也应该告诉 safecopy 尽快跳出任何有问题的区域
继续别处。 参数“-f 10% -r 10% -R 0 -Z 0”可以通过
使安全复制跳过设备内容的 10% 并继续那里
回溯。 您可以随时尝试稍后获取数据,首先获取
驱动器其余部分的据称良好的数据。 取决于数据的方法
您计划使用的恢复,用“-M”标记坏数据可能是有意义的
选项。 这使您以后可以找到更多受数据损坏影响的文件
容易地。 使用“-o”选项让safecopy写一个包含所有块的坏块列表
跳过或不可读。
第一次运行完成安全复制后,您可以尝试第二次尝试
获取更多数据。 使用较小的“-f”值并允许安全复制回溯
受影响区域的末尾“-r 1*”。 请务必使用增量模式“-I”
读取第一次运行时跳过的块。
让驱动器在运行之间冷却可能是有意义的。 一旦你得到了所有
来自驱动器“良好”区域的数据,您可能会冒着更“彻底”访问它的风险。
在坏块的情况下增加重试次数“-R”,可能与
头部重新对齐“-Z 1”。 “-f 1*”将使安全复制尝试读取每个
块,根本不会跳过坏区域。
如果您的驱动器停止响应,请关闭电源,让它冷却一段时间,然后
再试一次。
(我从那些将死驱动器带回短时间内的人那里听说
用冰袋将它们冷却到低温。)
! 如果数据真的很重要,请找专业的数据恢复专家
立即,在对驱动器造成进一步损坏之前。
退出 状态
如果没有不可恢复的错误,safecopy 将返回 0(零)。
如果某些数据无法恢复,safecopy 将返回 1。
如果复制因错误或信号而中止,safecopy 将返回 2。
作者
safecopy 及其联机帮助页由 CorvusCorax 设计和编写。
使用 onworks.net 服务在线使用安全复制