恢复文件复制linux


9

如何在Linux中恢复大文件的副本?我有一个巨大的文件(服务器千兆字节)被部分复制到网络驱动器,并且花费了很长时间,并且大部分是在复制操作由于网络问题而停止之前完成的。如何恢复文件副本。我不希望效率低下的脚本,并且ecp无效(对于大型文件似乎无效)。

Answers:


4

我会尝试的rsync -a /from/file /dest/file


1
在谈论rsync时,请注意,您可以使用rsync -az -e ssh / from / file user@dest.ation:/ full / dest / path
Mikeage

2
哇。像这样不带任何选项运行rsync将删除/ dest / file并重新传输整个内容。这是如何投票的?
贾斯汀2010年

1
保留文件属性(-a)有何帮助?应该追加吗?
恶意

3

如果您知道只需要追加到本地文件而又不想使用rsync(可能需要很长时间来计算校验和),则可以使用curl。例如,如果您在一个缓慢的可移动USB闪存盘上安装了一个大文件,/media/CORSAIR/somefile.dat并且其中只有一半位于当前目录中,则要恢复:

curl -C - -O "file:///media/CORSAIR/somefile.dat"


感谢您提供的技巧,因为在失去慢速连接时我是从Windows SMB服务器复制(因此没有rsync),所以我必须使用该技巧,并且我不想从头开始下载500MB。
MiKy 2012年

2

是的,rsync是必经之路。对我来说,我们已经通过rsync + ssh传输了100 + GB的数据。如果您要查找真实的备份副本,请确保使用-a(存档)选项保留文件属性(时间,所有者,权限等)。

host1> rsync -aP file user@host2:/path/to/new/dir/

这对于复制在迁移过程中可能会更改的大文件也很有用。您可以将数据预加载到目标位置,一旦准备好进行最终复制,就可以再次执行此操作,但只需要一小部分时间。您可以使用rsync充分发挥其潜力,从而节省实际的停机时间。

PS使用v(详细)可能会减慢许多文件的传输。


2

您想要的命令将类似于

rsync -v --append /path/to/afile /mnt/server/dest/afile

除非您可以通过ssh访问服务器并以这种方式运行rsync,否则在这种情况下,FlyingFish提供的命令是最好的。


0

仅当目标服务器上具有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 =来指定块大小,并且要跳过和查找的值以块为单位,而不是以字节为单位。


您关于rsync的说法是错误的。rsync,阅读--append选项的作用。
贾斯汀2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.