我们使用GCS进行异地备份,效果很好。然而,我们的一台办公室电脑在周末感染了一种randsomware病毒,并对我们所有共享的网络文件进行了加密。问题是我们的备份脚本每晚都会做一次rsync,并同步我们共享的网络文件,这意味着GCS上的所有文件的实时版本现在都是加密的randsomware文件。
我们使用版本控制,并保留所有文件的4个版本。有没有办法恢复所有文件的实时版本之前的版本?
发布于 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这样的东西也很容易。
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);
})发布于 2018-02-15 04:40:32
rsync没有自动执行此操作的选项。您需要列出对象的所有版本(使用gsutil ls -a),然后从每个版本中选择第二个最新的版本。
https://stackoverflow.com/questions/48795407
复制相似问题