首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Google云存储恢复以前版本的文件

从Google云存储恢复以前版本的文件
EN

Stack Overflow用户
提问于 2018-02-15 04:10:15
回答 2查看 2.9K关注 0票数 4

我们使用GCS进行异地备份,效果很好。然而,我们的一台办公室电脑在周末感染了一种randsomware病毒,并对我们所有共享的网络文件进行了加密。问题是我们的备份脚本每晚都会做一次rsync,并同步我们共享的网络文件,这意味着GCS上的所有文件的实时版本现在都是加密的randsomware文件。

我们使用版本控制,并保留所有文件的4个版本。有没有办法恢复所有文件的实时版本之前的版本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-17 00:58:04

只是为了澄清问题中发布的情况,这只是一个假设,自从我转向使用GCS作为我们的异地备份以来,我一直很好奇地试图回答这个问题。

在这种情况下尝试还原的唯一方法似乎是使用一些脚本来获取满足日期要求的文件的文件列表。我发现google的generation ID是一个unix epoc时间戳,单位是微秒(而不是毫秒)。与像Mike建议的那样尝试解析时间戳相比,这更容易用作日期比较。不过,我最终还是使用了gsutil ls来解析文件列表,因为它既快捷又简单。

一旦您有了要使用脚本恢复的文件列表,您就可以将其提供给

cat restoreList.txt | gsutil cp -m -I /restore-location

因为我有一点JS迷的头脑,所以我决定用Node.js来写我的脚本,即使用Python这样的东西也很容易。

代码语言:javascript
复制
const fs = require('fs');

var file = fs.readFileSync('./inputList.txt', 'utf8');

var regex = /(gs:.*)#(\d*)/;
var fileList = {};

// Make sure and remember that JS Dates use the 0-11 notation for months so Feb = 1
// Also google generation IDs are in microseconds so we need to multiply by 1000
const beforeThisDate = new Date(2018, 1, 8, 5, 30).getTime() * 1000;

file.split('\n').forEach(line => {
  var found = line.match(regex);
  if(!found) return;
  var fileName = found[1];
  var fileEpoc = found[2];
  var fullPath = found[0];
  if(!fileList[fileName] && fileEpoc < beforeThisDate) {
    fileList[fileName] = {fileEpoc, fullPath};
    return;
  }
  if(fileList[fileName] && fileEpoc < beforeThisDate && fileList[fileName].fileEpoc < fileEpoc) {
    fileList[fileName] = {fileEpoc, fullPath};
    return;
  }
  return;
})

Object.keys(fileList).forEach(key => {
  console.log(fileList[key].fullPath);
})
票数 1
EN

Stack Overflow用户

发布于 2018-02-15 04:40:32

rsync没有自动执行此操作的选项。您需要列出对象的所有版本(使用gsutil ls -a),然后从每个版本中选择第二个最新的版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48795407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档