回收站被清空,里面文件“没了”,你打开回收站,空空如也,心里凉了半截。先别慌,也别急着往系统盘里继续存东西——在银河麒麟系统里,“清空回收站”这个操作删掉的通常是目录记录和 inode 索引,数据块本身大概率还躺在磁盘上。只要之后没有大量写入覆盖,就有机会恢复。
这篇文章不聊玄学,直接给出一条可以落地的恢复路径:先判断文件还有没有救,再根据文件系统类型选择恢复方案。重点覆盖 ext4 和 xfs 两种主流文件系统,用 extundelete、testdisk、photorec、debugfs 这几个工具完成找回。同时会解释清空回收站到底发生了什么、为什么停止写入才是第一件事、以及后期如何避免再踩这个坑。
如果你是在银河麒麟桌面系统上误清了回收站,或者清完才发现里面还有重要文档、报表、代码、数据库备份,这篇建议直接收藏。照着一小节一小节做,能救回多少是多少。
1. 核心结论速览
| 项目 | 说明 |
|---|---|
| 现象 | 银河麒麟桌面版清空回收站后,文件在图形界面中消失 |
| 本质 | 清空回收站执行的是类似 unlink/rm 的操作,数据块不会立即物理抹除 |
| 恢复前提 | 清空后没有对原分区大量写入,数据块未被覆写 |
| 最关键动作 | 立即停止向被删文件所在分区写入,最好马上只读挂载或制作磁盘镜像 |
| 主要恢复工具 | extundelete、testdisk、photorec、debugfs |
| 适用文件系统 | ext4 恢复成功率相对较高,xfs 恢复难度明显更大 |
| 机械硬盘 | 恢复概率较高 |
| SSD(固态硬盘) | 取决于 TRIM 是否触发,触发后恢复概率显著下降 |
| 不保证结果 | 数据恢复没有百分百成功,越小、越完整的文件越容易找回 |
这篇文章核心想表达的就一句话:银河麒麟清空回收站不等于数据物理消失,但“能不能恢复”是抢时间的技术活。不要在意外发生后继续用被删文件所在的分区,这是所有恢复方案的前提。
2. 先理解银河麒麟的“清空回收站”到底做了什么
2.1 回收站不是垃圾桶,是一个特殊目录
银河麒麟桌面系统属于国产 Linux 操作系统生态,桌面环境虽然有自己的风格和交互,但底层文件系统机制与标准 Linux 一致。图形界面里删文件,系统不会直接用 rm 把文件从磁盘上抹掉,而是把文件移动到用户回收站目录。
对现代 Linux 桌面环境,回收站路径通常就是用户主目录下的隐藏目录:
~/.local/share/Trash/这个目录下有两个关键子目录:
files/:存放被移入回收站的实际文件。info/:存放每个回收站文件的元数据信息,包括原始路径、删除时间。
也就是说,你从桌面删掉一个 Word 文档,它并没有被清走,只是被移到~/.local/share/Trash/files/,同时在~/.local/share/Trash/info/里多了一条记录。
2.2 清空回收站相当于什么
点“清空回收站”之后,系统做的事情比普通 rm 更彻底一点:它不仅删掉了回收站里文件对应的目录项和 inode,还会把info/下对应的元数据文件一起清理掉。
但是,这里有一个 Linux 文件系统的核心事实:rm 删除文件,只是把文件的目录项从文件系统目录结构中移除,同时释放 inode 的占用标记。文件内容所在的数据块,并不会被立刻清零或覆写。
操作系统把这些数据块标记为“空闲可写”,但数据本身还在原位置。
所以,“清空回收站”后的文件状态是:
- 目录项丢了,你无法通过正常路径找到文件;
- inode 被释放,文件系统认为这块空间可以继续写入;
- 文件的数据块内容大概率还在,等待新数据覆盖。
理解这一点,才能明白为什么要抢时间。如果你继续下载文件、保存文档、装软件、更新系统,新数据就可能写到这些可用的数据块上,把原本文件的内容覆盖掉。覆盖了就真的回不来了。
2.3 什么情况下属于“彻底没救”
- 删除后执行了
fstrim或者对 SSD 触发了 TRIM,文件块被固态硬盘固件直接回收; - 删除后又往同一分区写入了大量数据,且恰好写到了原文件数据块的位置;
- 文件系统是 xfs,且没有其他备份或镜像;
- 无意中执行了文件粉碎、磁盘擦除类工具(如
shred、部分系统工具里的“彻底删除”选项)。
如果存在上述情况,恢复概率会大幅降低,甚至无法恢复。这也是为什么文章开头反复强调:意外发生后,第一反应应该是停止写入。
3. 恢复前的第一条铁律:停止一切写入
很多用户在清空回收站后发现文件没了,第一反应是打开浏览器搜索恢复工具并下载安装,顺手可能还往同一个分区存了几个新文件。这一步如果发生在被删文件所在分区,就等于在下“埋人”——你越操作,恢复概率越低。
3.1 立刻要做的 3 件事
至少先做下面三件事:
- 停止所有正在进行的下载任务、视频录制、日志写入、编译任务。
- 关闭可能自动写入磁盘的应用:网盘同步、数据库服务、日志轮转、编辑器自动保存。
- 如果被删文件在系统盘
/或/home分区,建议尽快将系统引导到只读模式,或者直接关机,拆出硬盘挂载到另一台机器上操作。
这里必须强调:不要在被恢复对象所在分区安装恢复工具。安装软件本身也是在写入数据。正确做法是把恢复工具放到另一块硬盘、U 盘或系统分区之外的位置。
3.2 判断文件所在分区
先用只读方式查看挂载情况,不建议在当前系统里去写任何东西,但只读命令没问题:
# 查看当前所有分区的挂载、文件系统类型、容量 df -hT # 查看更详细的设备信息 lsblk -f # 查看指定分区的 UUID 和文件系统类型,例如 /dev/sda2 blkid /dev/sda2 # 查看默认挂载参数 mount输出重点看这几个字段:
/(根分区)是哪个设备;/home是否独立分区;TYPE是 ext4 还是 xfs;- 各个分区的已用空间和剩余空间。
回收站通常在用户主目录~/.local/share/Trash,如果你没有单独给/home分区,那被删文件就在根分区/上;如果/home是独立分区,就在那个分区上。
3.3 准备只读挂载或镜像
最稳妥的恢复方式是让被删文件所在分区保持只读,甚至把它卸载下来,用另一块硬盘存放恢复出来的文件。下面给一个通用操作模板:
# 假设被删文件所在分区是 /dev/sda2,原来挂载在 /data # 先在数据分区之外建一个恢复输出目录 sudo mkdir -p /mnt/restored # 卸载原分区 sudo umount /dev/sda2 # 以只读方式重新挂载到 /mnt/recovery sudo mkdir -p /mnt/recovery sudo mount -o ro,noatime /dev/sda2 /mnt/recovery如果你有多余硬盘,更推荐先做整盘镜像,再在镜像上操作恢复,这样即使恢复过程中误操作,原盘数据还在:
# 用 dd 制作 dd 镜像,注意:输出文件不要放在被恢复分区上 sudo dd if=/dev/sda2 of=/media/backup/kylin-partition.img bs=64M status=progress conv=noerror,sync镜像做完后,后续所有 extundelete、testdisk、photorec 操作都可以在镜像文件上执行,原分区可以继续正常使用或等结果确认后再动。
4. 环境准备:确认文件系统类型与恢复工具
4.1 ext4 还是 xfs
银河麒麟系统根据安装选项和系统版本,根分区或数据分区可能是 ext4,也可能是 xfs。两者数据恢复路径差异很大:
- ext4:有成熟的 extundelete 工具,且 ext4 的 inode 复用机制让已删文件在一段时间内恢复概率较高。
- xfs:没有像 extundelete 那样“说删就捞”的成熟开源工具,恢复难度明显更高,更多时候要依赖文件内容特征扫描或商业恢复工具。
所以在恢复前先确认文件系统类型,能少走很多弯路。
# 查看所有分区的类型 lsblk -f # 或者单独确认某个分区 blkid /dev/sda24.2 怎么准备工具
如果你还有一台正常运行的 Linux 机器,可以在那台机器上安装恢复工具,再把故障硬盘或镜像挂过去。也可以准备一个 Ubuntu/Debian 系的 Live USB,启动到桌面后进行恢复操作。银河麒麟基于 Debian/Ubuntu 技术体系,软件包管理使用apt,所以在系统软件源里通常可以直接安装这些工具。
# 在独立的恢复环境中安装 sudo apt update sudo apt install extundelete testdisk e2fsprogs # 如果不需要 extundelete,只想做文件类型恢复,装 testdisk 就够了 sudo apt install testdisk如果你的软件源里没有 extundelete,可以考虑源码编译安装,但需要注意依赖匹配。在 U 盘或第二台机器上提前装好这些工具,是数据恢复的前提。切记不要在被恢复分区的系统里反复安装软件。
5. ext4 分区实操:用 extundelete 恢复清空回收站的文件
5.1 extundelete 基本原理
extundelete 通过分析 ext4 文件系统的 inode 分配情况、目录项残留、日志信息,找到已经被删除但数据块仍保留的文件,然后把内容抽取出来。它支持按文件名恢复、按 inode 恢复、批量恢复全部已删文件。
需要注意:银河麒麟的根分区如果默认是 ext4,extundelete 是当前最优先尝试的开源工具。
5.2 单文件恢复
如果明确记得被删文件路径,比如/home/user/桌面/重要报表.docx,可以指定路径恢复:
# 在只读挂载或镜像上执行,--output-dir 输出到另一块硬盘 sudo extundelete /dev/sda2 --restore-file '/home/user/桌面/重要报表.docx' --output-dir /mnt/restored5.3 按目录恢复
如果只记得大概目录,不知道完整文件名,可以按目录恢复:
sudo extundelete /dev/sda2 --restore-directory '/home/user/文档/项目资料' --output-dir /mnt/restored5.4 恢复全部已删除文件
清空回收站往往涉及多个文件,不知道具体有哪些,最省事的做法是恢复所有能够找回的文件:
sudo extundelete /dev/sda2 --restore-all --output-dir /mnt/restored执行完成后,在/mnt/restored/下会生成一个RECOVERED_FILES/目录,里面是按 inode 或原路径组织的恢复文件。
5.5 extundelete 恢复的效果判断
恢复完成后,先不要急着把文件复制回原分区。先在恢复目录里做检查:
# 查看恢复出来的文件列表 find /mnt/restored/RECOVERED_FILES -type f -printf '%p %s\n' # 用 file 命令确认文件类型是否正确 file /mnt/restored/RECOVERED_FILES/重要报表.docx # 如果是文本类文件,直接读开头内容验证 head -n 20 /mnt/restored/RECOVERED_FILES/重要报表.docx对于 Office 文档、PDF、压缩包,file命令能识别文件头;对于代码和文本,head能看到实际字符。如果file输出的文件类型和扩展名对不上,说明这个文件的部分数据块可能已经被覆写,需要用 testdisk/photorec 按内容特征再捞一次。
5.6 extundelete 失败的常见原因
- 分区挂载为可写状态执行工具,期间系统写入导致数据块被覆盖。
- 文件系统日志信息不完整,extundelete 无法定位 inode。
- 文件刚写出来还没有落盘,删除后数据块未分配。
- 文件系统碎片化严重,文件数据块分散,部分块已被复用。
遇到这些情况,不要恋战,换 testdisk 或 photorec 继续按文件特征扫描。
6. 通用兜底方案:testdisk 与 photorec 按内容特征扫描
如果你的文件系统不是 ext4,或者 extundelete 找不到目标文件,下一个可靠方案是使用testdisk 套件。photorec 是 testdisk 自带的按文件内容特征扫描恢复工具,不依赖文件系统目录结构,直接在磁盘数据块里找文件头特征。
6.1 交互式启动 testdisk
sudo testdisk /dev/sda2进入交互界面后,按下面流程走:
- 选择设备,按 Enter;
- 选择分区表类型,一般选 Intel 或 EFI GPT,不确定时使用默认推荐;
- 选择 Quick Search 或 Deeper Search;
- 找到目标分区后,用文件列表模式恢复单个文件;
- 对于不能直接定位的已删文件,进入 Advanced 菜单,按目录或 inode 继续查找。
testdisk 的优势在于能重建部分目录结构,恢复出来的文件更完整;缺点是需要交互操作,对新手来说界面不够直观。
6.2 用 photorec 找回特定类型文件
photorec 是命令行交互工具,启动方式:
# 把扫描结果输出到独立恢复目录 sudo photorec流程简述:
- 选择要扫描的磁盘或分区;
- 选择文件系统类型(ext4 选 ext2/ext3/ext4 那一档);
- 选择扫描范围:整个分区还是自由空间;
- 选择输出目录;
- 等待扫描,按文件头匹配 Word、PDF、图片、压缩包等文件。
photorec 恢复出的文件没有原始文件名,文件多时靠尺寸和内容辨认,适合“知道里面有几个重要文档但文件名记不清”的场景。恢复结果输出结构按扩展名分类,比如docx、pdf、zip各自放在子目录里。
6.3 photorec 的用法建议
- 第一次扫描建议先选自由空间,速度较快,清空回收站后的文件数据和已分配文件不同,大概率会出现在自由空间里。
- 扫描时间取决于分区大小和磁盘速度,几百 GB 的分区可能跑几小时。
- 中途不要中断,中断后已恢复的文件在输出目录里,但未完成的扫描无法续跑。
- 如果磁盘是 SSD 且早已触发过 TRIM,就不用浪费大量时间做全盘扫描了,优先考虑备份或镜像。
7. 进阶操作:用 debugfs 手工定位已删除 inode
前面提到 ext4 清空回收站后,inode 被释放但不一定立即复用。如果你会一点文件系统底层操作,可以用debugfs直接翻 ext4 的磁盘结构,找回特定 inode 对应的数据块。
7.1 打开设备
# 确保分区为只读或已卸载 sudo debugfs -R 'lsdel' /dev/sda2lsdel会列出所有已删除但仍占用 inode 的文件,输出里能看到 inode 编号、大小、删除时间等信息。
7.2 按 inode 导出文件
找到目标 inode 之后,可以用dump命令导出:
# 进入 debugfs 交互模式 sudo debugfs /dev/sda2 # 在交互界面中执行 dump <inode编号> /mnt/restored/recovered-<inode编号>.bindebugfs 适合恢复单个小文件,不适合大批量恢复,操作前建议对lsdel输出做完整记录,避免操作过程中误判。
这个工具不是必选,但当你已经知道删除文件的大概时间、大小,用lsdel按时间和大小匹配 inode,往往比全盘扫描更快更准。
8. xfs 文件系统的恢复思路
如果你在安装银河麒麟时选择了默认的 xfs,或者数据分区是 xfs,恢复策略要调整。
xfs 在删除文件后不保留类似 ext4 那样直接的“已删文件 inode 列表”回复路径,开源工具里没有稳定的 xfs undelete 软件。可选的方案有:
- 用文件特征扫描工具:photorec 对 xfs 分区同样可扫,它不依赖具体文件系统细节,直接从块设备里匹配文件头。只是文件名、目录结构、碎片化文件的完整度不如 ext4 场景。
- 使用商业数据恢复软件:某些商业工具支持 xfs 更完整地解析 AG(分配组)里的空闲 inode 记录。需要根据实际情况选择,先看试用版能否识别需要恢复的文件。
- 找原文件缓存或备份副本:如果文件之前被打开过,某些应用可能保留了临时文件或自动保存副本。比如 WPS 的备份目录、浏览器缓存、编辑器交换文件。
xfs 恢复比 ext4 难是整体情况,不是每个文件都无法恢复。优先做过文件特征扫描,再逐个验证恢复文件内容。
9. 常用恢复工具对比与选择
| 工具 | 适用文件系统 | 恢复方式 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|---|---|
| extundelete | ext2/ext3/ext4 | 按 inode、路径恢复 | 能找回原文件名和路径,批量恢复 | 依赖文件系统日志和 inode 未被复用 | 清空回收站后第一时间恢复 |
| testdisk | 多种文件系统 | 分区分析、目录扫描恢复 | 可重建分区表,恢复目录结构 | 交互界面复杂 | 分区表损坏或目录结构丢失 |
| photorec | 多种文件系统 | 按文件内容特征扫描 | 不依赖文件系统结构,识别文件头 | 文件名丢失,结果量大 | ext4/xfs 均可兜底 |
| debugfs | ext2/ext3/ext4 | 手工 inode 导出 | 精确控制单个文件 | 操作门槛高 | 已知 inode 编号的小文件恢复 |
如果只选一个工具,优先用 extundelete;如果它失败了,再用 photorec 兜底;如果文件系统是 xfs,直接启用 photorec。
10. 银河麒麟 SSD 与机械硬盘的恢复差异
这个因素非常关键,很多人会忽略。
在 SSD 上,现代 Linux 系统默认会启用 TRIM 机制。当文件被删除、回收站被清空时,文件系统告诉 SSD 哪些逻辑块已经空闲。SSD 固件会后台执行数据块擦除,为下一次写入做准备。一旦 TRIM 执行完,原本文件内容所在物理块的数据就被清掉或标记为无效,软件层面就没有恢复可能了。
机械硬盘不存在这个问题,文件删除后数据块一直停留在盘面,直到被新数据覆写。所以:
- 机械硬盘:停止写入后,恢复概率高,时间压力相对小。
- SSD:要抢窗口期。如果系统开启了定期 fstrim,或者删除后又有大量写入,恢复机会窗口会非常短。
- 外置移动硬盘:外置硬盘若没有系统后台清理机制,恢复概率相对放心。
对普通用户,最重要判断是:清空回收站后,你有没有向同一块磁盘写入大量数据。有,则优先试 extundelete 和 photorec;没有,可以稍微从容一点但也不要拖延。
11. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| extundelete 提示找不到设备 | 分区繁忙或没有权限 | 检查挂载状态,卸载分区 | umount卸载后以只读方式重新挂载 |
| 恢复出来的文件是 0 字节 | 数据块已被覆写 | 用file检查恢复文件 | 改用 photorec 按文件头回收 |
| 恢复文件打开乱码 | 文件块碎片化,序列读取出错 | 对比原文件大小 | 用 photorec 重新扫描,优先找小文件 |
| 回收站清空后时间过了很久 | 系统持续写入 | 查看分区已用空间变化 | 仍然可以做只读扫描,但成功率低,不要抱有高期望 |
| 根分区不是 ext4,是 xfs | 系统安装时选择 xfs | blkid查看类型 | 换用 photorec 或商业方案 |
| SSD 上恢复结果为空 | TRIM 已执行 | 查询系统日志是否触发 fstrim | 基本无法软件恢复,改为从备份恢复 |
| 找不到回收站目录 | 使用 rm 命令删除而非图形界面删除 | 在 Shell 中查看~/.local/share/Trash | 理解删除方式不同,恢复路径不变 |
| 恢复工具无法安装 | 软件源缺失或权限不足 | apt-cache search extundelete | 换 Live 系统,或在第二台机器上操作 |
| 恢复量大,磁盘空间不足 | 输出目录空间不够 | df -h /mnt/restored | 换更大的外置硬盘,或按单个文件恢复 |
12. 法律合规与数据安全问题
数据恢复过程中必须注意边界。
- 如果你在单位电脑上误删了工作文件,不要自行用外部工具全盘扫描后把数据复制到个人存储设备。先按单位保密要求和数据安全制度上报,由负责人决定处理方式。
- 恢复出来的数据可能包含同事的个人信息、客户资料、隐私内容,即使恢复成功,也不能随意公开、外传、截图发到群里。
- 如果删除的是涉密文件、敏感数据,不要尝试自行对外求助远程操作,应由单位信息部门处理。
- 合规使用数据恢复工具本身没有问题,但“恢复他人删除的隐私数据”“恢复后发现不是自己需要的文件还继续浏览”都属于越界行为。
- 平时使用银河麒麟进行文件清理时,培养“开启回收站提示”“删除前确认”的习惯,比事后恢复更稳妥。
13. 最佳实践与预防建议
能恢复是运气好,不丢文件才是正确目标。银河麒麟系统日常使用建议如下:
13.1 调整回收站使用习惯
- 删除文件时优先使用图形界面“移到回收站”,不要直接按
Shift + Delete或右键“彻底删除”。 - 清空回收站前先看一眼里面有哪些文件,尤其是“文档”“桌面”“下载”目录下的内容。
- 对重要文件多的项目,可以考虑把回收站容量上限调大,让文件在回收站中停留更久。
13.2 建立备份体系
- 重要文档用“数据同步”或者移动硬盘定期备份。
- 系统数据、数据库、代码仓库用版本管理和定期导出。
- 至少保留一周以内的一版备份,恢复成本远低于事后找数据。
13.3 万一发生误删时按顺序做
- 停止写入,不要继续使用被删文件所在分区。
- 确认文件系统类型和分区位置。
- 挂载只读或制作镜像。
- 先试 extundelete,再试 photorec。
- 恢复输出到另一块硬盘。
- 验证文件完整性后再考虑拷回原位置。
13.4 不同场景要区别处理
- 个人笔记本:可以自行按本文方法恢复。
- 工作电脑:先报备,再操作,避免因为恢复操作影响单位业务。
- 服务器分区:优先检查快照、备份、云备份,不要直接在业务盘上跑全盘扫描。
- 数据库文件:不要盲目恢复,先尝试从数据库自身的备份和归档恢复,文件级恢复容易得到损坏的孤立文件。
14. 总结与下一步
这次“银河麒麟清空回收站”的教训,核心不在工具,在操作时机。工具只是帮你把数据块内容重新捞出来,能不能捞出来取决于你清空后到开始恢复之间,系统有没有大量写入过那块磁盘。
如果你现在正处于误删状态,按这个顺序行动:
- 立刻停止对目标分区的写入;
- 把分区置为只读,或者直接关机拆盘;
- 用 extundelete 先试,失败换 photorec;
- 恢复结果输出到独立硬盘;
- 验证文件内容后再使用。
这篇文章给出的恢复方案,对银河麒麟桌面版、通用 Linux 桌面环境、Ubuntu/Debian 系系统都适用。即使文件系统不是 ext4,只要磁盘是机械硬盘,photorec 也有机会从原始数据块里找回一部分文件内容。建议把文章收藏备用,同时尽快把备份这件事提上日程——清空回收站后“数据还有救”不代表每次都还有救,真正可靠的保护,永远是删不掉的那份备份。