误删数据恢复
用户覆盖或删除非归档类型object时,FDS会先将其移动至trash以防误删除。
Trash中数据默认保存7天,用户可以自行通过TTL规则调整,但最多为30天,详见TTL功能。
只有bucket owner可以查询和恢复trash中的数据。
列出已删除object
Web控制台-trash管理里可以看到已删除的object。使用SDK时,listTrashObjects的操作与List Objects操作类似。
以java sdk为例,调用listTrashObjects()
可以列出当前用户所创建的bucket下已被删除的所有object,且如果返回值的truncated为true,则需要调用listNextBatchOfObjects()
来获得下一批已删除的object。部分情况下可能list出来的结果为空,但如果truncated标志为true,则表示仍有已删除的object需要list,大致流程如下:
String bucketName = "foo";
FDSObjectListing objectListing = client.listTrashObjects(bucketName + "/", "");
for (;;){
// do something with objectListing
if (!objectListing.truncated){
break;
} else {
objectListing = client.listNextBatchOfObjects(objectListing);
}
}
在不指定prefix时,会将当前用户已删除的object全部列出来,不会根据bucket名进行区分。
恢复已删除的object
同样可以在Web控制台-trash管理里恢复已删除的object。使用SDK时,可以通过类似restoreObject()
方法来恢复至原bucket。如果原bucket中存在同名object,则相当于执行了一次覆盖写操作。
其他事项
FDS不保证以下几种情况下被删除的object可以正确访问和恢复,如需恢复清联系FDS支持组
- 归档类型的object被删除后不可以恢复
- 如果bucket被删除,即使重新创建了同名bucket,也不可以访问和恢复该bucket下之前的数据
- 超过trash的最大保存版本数(默认为1)时,多余的版本不可以访问和恢复
- 如果设置了TTL规则,指定trash保存最长时间,即使后来撤销或修改了该规则,之前已存在的trash object仍然可能不被正确访问和恢复