如何在Linux中恢复大文件的副本?我有一个巨大的文件(服务器千兆字节)被部分复制到网络驱动器,并且花费了很长时间,并且大部分是在复制操作由于网络问题而停止之前完成的。如何恢复文件副本。我不希望效率低下的脚本,并且ecp无效(对于大型文件似乎无效)。
如何在Linux中恢复大文件的副本?我有一个巨大的文件(服务器千兆字节)被部分复制到网络驱动器,并且花费了很长时间,并且大部分是在复制操作由于网络问题而停止之前完成的。如何恢复文件副本。我不希望效率低下的脚本,并且ecp无效(对于大型文件似乎无效)。
Answers:
如果您知道只需要追加到本地文件而又不想使用rsync(可能需要很长时间来计算校验和),则可以使用curl。例如,如果您在一个缓慢的可移动USB闪存盘上安装了一个大文件,/media/CORSAIR/somefile.dat
并且其中只有一半位于当前目录中,则要恢复:
curl -C - -O "file:///media/CORSAIR/somefile.dat"
仅当目标服务器上具有rsync时,rsync才有用。在那种情况下,这确实是最好的解决方案。
但不是这样。由于rsync的目的是仅将更改的部分复制到大文件中,因此假定这些更改的部分可以位于文件中的任何位置。这意味着它将对所有已复制的块进行校验和。如果您在远程端没有rsync,则本地rsync将从读取已传输的所有内容开始。
如果源计算机具有Web或ftp服务器,则可以将目标服务器上的wget与“ --continue”选项一起使用。(或使用“ --continue-at [-| size]”选项进行卷曲)。
如果目标计算机上有FTP服务器,则可以在源计算机上使用--append选项使用curl。
作为最后的选择,可以将dd与“ bs =”(块大小),“ skip =”和“ seek =”参数一起使用。例如:
假设您将能够使用2048个字节的块。如果目标文件当前为2'048'000'000字节(2 GB),则是2048字节的1'000'000块。要将其余的源文件附加到目标,您可以
dd if =源文件=目标文件bs = 2048跳过= 1000000搜索= 1000000
您可能可以使用更大的块大小来提高传输速度。只需记住使用bs =来指定块大小,并且要跳过和查找的值以块为单位,而不是以字节为单位。