2017-04-07 132 views
1

在错误的存储桶上意外运行删除命令,对象版本控制处于打开状态,但我不太了解应该采取哪些步骤来恢复文件,或者更重要的是如何执行因为我已经删除了几百个这样的文件。从Google云端存储中恢复大容量文件

将不胜感激任何帮助。

回答

1

要恢复数以百计的你可以做的简单的东西的对象:

gsutil cp -AR gs://my-bucket gs://my-bucket 

这将所有对象(包括删除的文件)复制到实时生成,只使用元数据的复制,即不需要复制实际的字节数。注意事项:

  1. 它会让已删除的代保留在原位,因此需要额外的存储空间。

  2. 如果您的存储桶不是空的,此命令将重新复制所有活动对象(最后还有一个额外的存档版本,同样也会让您额外存储)。

  3. 如果你想恢复大量的对象,这个简单的脚本运行得太慢 - 你想要并行化单个gsutil cp操作。在这种情况下,您不能使用gsutil -m选项,因为gsutil会阻止这种情况,为了保留生成顺序(例如,如果有几代同名的对象,并行复制它们最终将与实时生成来自不可预知的一代)。如果您只有一代,您可以通过执行类似操作来并行复制:

    gsutil ls -a gs:// my-bucket/** | SED的/ \(。\)\(#[0-9] \)/ CP的gsutil \ 1 \ 2 \ 1 \ & /'> gsutil_script.sh

这生成的列表所有对象(包括已删除的对象),并将其转换为gsutil cp命令序列,以便将这些对象(通过特定于生成的名称)并行复制回实时生成。如果列表很长,你会想要分解成部分,所以你不要(例如)尝试分叉10万个进程来执行并行复制(这会使你的机器过载)。

+0

感谢Mike的深入解答,祝愿文档准确无误! – Pythonist

+0

实际上,当我尝试使用您的命令进行并行应对时,在s命令的RHS错误中存在'''sed:-e表达式#1,字符35:无效引用\ 2。 – Pythonist

+0

很抱歉 - 命令中的反斜线字符被github格式化吞噬,所以我不得不逃脱它们。我更新了命令来解决这个问题 - 请再试一次。 –