温馨提示×

linux hdfs怎么恢复误删

小樊
47
2026-10-13 10:08:53
栏目: 智能运维

在 Linux 上恢复 HDFS 误删文件,能否恢复主要取决于 是否开启了回收站(Trash) 以及 删除方式。下面按常见场景一步步说明。


一、先看是否开启 HDFS 回收站(最常见可恢复方式)

HDFS 默认 可能未开启回收站,但很多集群会开启。

1. 检查回收站是否开启

hdfs getconf -confKey fs.trash.interval
  • 返回值 > 0:开启了(单位:分钟)
  • 返回 0:未开启

2. 查看回收站目录

hdfs dfs -ls /user/<username>/.Trash/Current

或

hdfs dfs -ls /user/root/.Trash/Current

3. 从回收站恢复

hdfs dfs -mv /user/root/.Trash/Current/path/to/file /original/path/

✅ 这是最安全、最推荐的方式


二、如果没开回收站,但刚删不久(NameNode 未清理)

前提条件

  • 使用 hdfs dfs -rm(不是 skipTrash)
  • NameNode 还未触发 block 删除
  • 集群未重启清理元数据

恢复思路(高级)

  1. 停止对外写入
  2. 从 NameNode 编辑日志(edits)恢复
  3. 使用 hdfs oiv 解析 fsimage

⚠️ 复杂,一般不推荐手工做


三、从 HDFS 快照(Snapshot)恢复(如果有)

1. 查看是否有快照

hdfs dfs -ls /path/.snapshot

2. 从快照拷贝

hdfs dfs -cp /path/.snapshot/snapshot_name/file /path/

✅ 如果你之前建过 snapshot,这是最稳的


四、从底层 HDFS Block 恢复(极端情况)

适用于:

  • 回收站没开
  • 快照没有
  • 文件极小概率还能找到 block

步骤概览

  1. 找到误删文件路径
  2. 从 DataNode 本地磁盘找 block
    find /dfs/dn/current -name "blk_*"
    
  3. 合并 block 并导出
  4. 重新 put 到 HDFS

⚠️ 成功率低,不保证完整


五、从备份恢复(最可靠)

如果有:

  • DistCp 备份
  • 集群冷备
  • 云快照

直接恢复即可。


六、防止再次误删的建议 ✅

开启回收站

<property>
  <name>fs.trash.interval</name>
  <value>1440</value>
</property>

删除时强制走回收站

hdfs dfs -rm file
# 不要用
hdfs dfs -rm -skipTrash file

建快照

hdfs dfsadmin -allowSnapshot /path
hdfs dfs -createSnapshot /path snap1

七、快速判断你现在能用哪种方式

你可以告诉我:

  1. 用的什么命令删的(rm / rm -skipTrash)
  2. fs.trash.interval 的值
  3. 是否开过 snapshot
  4. 删除多久了

我可以直接告诉你 现在还能不能恢复、怎么恢复。

0 踩