问题描述
如果误删除了TOS存储桶中的对象,是否可以恢复?
问题分析
如果TOS存储桶开启了版本控制,删除的时候是普通的delete操作,则可以通过删除“删除标记”进行恢复。
如果TOS存储桶没有开启版本控制,那删除的对象无法进行恢复。
解决方案
1.先查看TOS存储桶是否开启了版本控制
┌──(root)-[~]
└─# aws s3api get-bucket-versioning --bucket xxxx --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
"Status": "Suspended"
}
2.如何开启版本控制
┌──(root)-[/home/kali]
└─# aws s3api put-bucket-versioning --bucket xxxx --versioning-configuration Status=Enabled --endpoint-url=http://tos-s3-cn-beijing.volces.com
┌──(root)-[/home/kali]
└─# aws s3api get-bucket-versioning --bucket xxxx --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
"Status": "Enabled"
}// 可以看到已经开启了版本控制
3.查看桶中对象
┌──(root)-[/home/kali]
└─# aws s3api list-object-versions --bucket xxxx --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
"ETag": "\"bcca0e55a87efb059e0a6315ba755915\"",
"Size": 181,
"StorageClass": "STANDARD",
"Key": "test.py",
"VersionId": "583B49DBE8C60880B9BE",
"IsLatest": true,
"LastModified": "2021-09-07T10:18:31.000Z",
"Owner": {
"DisplayName": "2100046944",
"ID": "2100046944"
}
}
可以看到VersionId
控制台显示如下:
4.将对象删除
┌──(root)-[/home/kali]
└─# aws s3api delete-object --bucket xxxx --key test.py --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
"DeleteMarker": true,
"VersionId": "5831CEA711F2CC6A4E2A"
}
此时使用get-object 尝试进行下载,会报错没有此key,如下:
┌──(root)-[/home/kali]
└─# aws s3api get-object --bucket xxxx --key test.py ./test.key --endpoint-url=http://tos-s3-cn-beijing.volces.com
An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.
5.查看删除对象的删除标记,获取其VersionId
┌──(root)-[/home/kali]
└─# aws s3api list-object-versions --bucket xxxx --endpoint-url=http://tos-s3-cn-beijing.volces.com
"DeleteMarkers": [
"Owner": {
"DisplayName": "2100046944",
"ID": "2100046944"
},
"Key": "test.py",
"VersionId": "5831CEA711F2CC6A4E2A",
"IsLatest": true,
"LastModified": "2021-10-08T07:37:32.000Z"
}
可以看到起DeleteMarkers中的VersionId
6.删除上步中获取到的versionID
┌──(rootkali)-[/home/kali]
└─# aws s3api delete-object --bucket xxxx --key test.py --version-id 5831CEA711F2CC6A4E2A --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
"DeleteMarker": true,
"VersionId": "5831CEA711F2CC6A4E2A"
}
7.控制台进行查看,对象已经恢复
使用get-object进行下载,确认恢复:
┌──(rootkali)-[/home/kali]
└─# aws s3api get-object --bucket xxxx --key test.py ./test.key --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
"AcceptRanges": "bytes",
"LastModified": "Tue, 07 Sep 2021 10:18:31 GMT",
"ContentLength": 181,
"ETag": "\"bcca0e55a87efb059e0a6315ba755915\"",
"VersionId": "583B49DBE8C60880B9BE",
"ContentType": "multipart/form-data; boundary=aaaeee59bfb0d3f0d16fc12cf8c42891",
"Metadata": {},
"StorageClass": "Standard"
}
如果您有其他问题,欢迎您联系火山引擎技术支持服务