起因
一次巡检s3备份查看时, 一回车手滑,出现了下面这种画面,生产事故?!!!
现象
aws s3 rm s3://gfai-hk/upload.cmd
证实的确被删除了,- 推断后面的生产数据也被全删, 尝试用s3命令恢复
- 发现需要该对象开启版本控制, rm被删除才有可能找回,否则永久删除
- 于是尝试下面的命令
- 先找出被删除文件
- 后逐一执行恢复
aws s3api list-object-versions --bucket bucketname --prefix path/to/folder/ --query 'DeleteMarkers[].[Key,VersionId]' --output text | awk '{print $1 " " $2}' | while read objid versionid; do aws s3api delete-object --bucket bucketname --key $objid --version-id $versionid; done
- upload.cmd 无法获取控制版本, 找不到它的删除标记信息
分析
- 所使用的命令行账号权限不足?
- 但问询后,没有操作记录
- …
- 关键: 是否开启版本控制,没开启被rm删,就真找不回了!!!
- …
- 马上查看生产情况,发现ad 目录下的文件都在…
- 没删掉? 可upload.cmd 的确不见了…
- 删目录和删对象不一样???
解决
查阅文档发现
- 下面该命令只能删除空目录。如果
logs/
目录下有对象或子目录,则该命令将不删除。
aws s3 rm s3://example-bucket/logs/
- 要删除目录及其下的所有对象,需要使用 --recursive 参数
aws s3 rm s3://your-bucket-name/path/to/directory/ --recursive
结论
- 一场因技术储备不足,误操作造成的虚假事故…