You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Lake Gen2容器被Spark DataFrame覆写后如何恢复原始文件?

ADLS Gen2容器根目录被Spark overwrite操作覆写后的恢复方案

恢复前提判断

  • 首先确认存储账户是否配置了软删除功能,这是最核心的恢复条件:
    • Blob软删除:开启后被覆盖、删除的blob会在配置的保留周期内(可设置7~365天)保留为软删除状态,可直接恢复
    • 容器软删除:开启后即使整个容器被删除也可恢复,你当前场景未删除容器,只要开启Blob软删除即可支持恢复
  • 补充说明:Spark以overwrite模式写入非分区路径时,默认会先清空目标路径下所有文件,你容器内原有的所有文件都会被标记为删除,并非仅覆盖根目录下的同名文件。

已开启软删除的恢复操作

门户操作(适合小批量恢复)

  1. 进入目标存储账户,在左侧「数据存储」分类下点击「容器」,打开被覆写的对应容器
  2. 打开页面顶部的「显示已删除的Blob」开关,所有被删除/覆盖的旧文件都会显示,状态标记为「已删除(软删除)」
  3. 勾选需要恢复的文件/文件夹,右键选择「取消删除」即可完成恢复,原有目录结构会完整保留。

命令行批量恢复

Azure CLI 批量恢复命令示例:

# 列出容器内所有软删除的blob并批量恢复
az storage blob list --account-name <你的存储账户名> --container-name <容器名> --include-deleted --auth-mode login | jq '.[] | select(.deleted == true) | .name' | xargs -I {} az storage blob undelete --account-name <你的存储账户名> --container-name <容器名> --name {} --auth-mode login

PowerShell 批量恢复命令示例:

$ctx = New-AzStorageContext -StorageAccountName <你的存储账户名> -UseConnectedAccount
Get-AzStorageBlob -Context $ctx -Container <容器名> -IncludeDeleted | Where-Object {$_.Deleted -eq $true} | Restore-AzStorageBlob

未开启软删除的处理方案

如果存储账户未提前开启Blob软删除,无法通过原生自助功能恢复,可尝试以下两个路径:

  • 若存储账户开启了Blob版本控制、变更源功能,可直接拉取对应历史版本的Blob数据恢复
  • 若未开启上述功能,需尽快提交Azure技术支持工单申请数据恢复,仅当后台底层块存储未擦除旧数据时可恢复,操作完成后间隔时间越短,恢复成功率越高。

后续规避建议

  • 所有生产存储账户必须开启Blob软删除+容器软删除,保留周期建议设置不低于30天
  • Spark写入路径禁止直接指向容器根目录,所有写入操作必须指定明确的子目录路径
  • 生产环境存储账户配置最小权限访问:普通业务账号仅授予指定子目录的写入权限,不分配根目录的删除/覆写权限
  • 生产代码使用overwrite写入模式前,必须增加路径合法性校验逻辑,避免误写父级目录

内容的提问来源于stack exchange,提问作者Techno_Eagle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:11