问题

ubuntu20.04,师弟把我 /home/user/ 下的一个项目删除了,如何恢复?

回答
理解你的困境,项目被删除是一件很让人头疼的事情。好在 Ubuntu 20.04 提供了几种恢复文件的方法,虽然不能保证 100% 恢复所有内容,但我们可以尽力而为。

下面我会从几个方面详细讲解如何恢复,请按照步骤进行操作,并根据你的情况选择最适合的方法。

在开始之前,请务必注意以下几点:

立即停止写入新数据: 这是最关键的一步!在你尝试恢复文件时,绝对不要在你师弟删除文件所在的同一个硬盘分区上创建任何新的文件、下载任何东西、安装软件,或者进行任何写入操作。新数据的写入可能会覆盖掉被删除文件的数据块,导致恢复的几率大大降低,甚至完全无法恢复。
了解删除的原理: 在 Linux 中,当你删除一个文件时,文件系统只是将文件占用的磁盘空间标记为“可用”,但文件本身的数据块可能还暂时保留在硬盘上。只有当新的数据写入这些空间时,旧的数据才会被真正覆盖。
恢复的可能性: 恢复的成功率取决于多种因素,包括:
文件删除后,硬盘是否被写入了新数据。
文件删除的深度(是误删除还是通过其他工具强制删除)。
你使用的恢复工具的能力。
你的文件系统类型(通常是 ext4)。



恢复方法一:检查回收站 (Trash)

这是最简单也是最常见的情况,但前提是你师弟删除文件时是使用了图形界面的文件管理器(如 Nautilus)并选择“移至回收站”。

1. 打开文件管理器: 在 Ubuntu 的应用程序菜单中找到“文件”(Files)或直接点击桌面左侧的文件夹图标。
2. 找到回收站: 在文件管理器左侧的侧边栏中,你会看到一个名为“回收站”(Trash)的图标。点击它。
3. 查找被删除的项目: 在回收站中,仔细查找你师弟误删除的项目或文件。
4. 恢复文件: 如果找到了,选中你的项目,然后右键点击,选择“恢复”(Restore)。文件会被恢复到它原始的路径下。

如果回收站是空的,或者你的师弟使用了命令行删除(`rm` 命令),那么这个方法就无效了。你需要继续尝试下面的更高级方法。



恢复方法二:使用 `extundelete` (推荐,但需要一些操作)

`extundelete` 是一个专门用于恢复 ext3 和 ext4 文件系统的工具。它通过解析文件系统的日志来查找被删除文件的信息。

准备工作:

1. 安装 `extundelete`:
首先,你需要安装 `extundelete`。打开终端 (Ctrl+Alt+T) 并执行以下命令:
```bash
sudo apt update
sudo apt install extundelete
```
2. 卸载包含项目的文件系统(关键步骤):
非常重要! 在尝试恢复之前,必须确保包含被删除文件的分区(通常是你的 `/home` 分区,也就是你的 `/` 分区)是 未挂载 的状态。这是因为 `extundelete` 需要直接访问原始的磁盘设备,而不是文件系统。
确定分区: 你需要知道你的 `/home` 目录所在的分区是什么。你可以通过以下命令查看:
```bash
df h
```
查找 `/home` 对应的设备名,例如 `/dev/sda1` 或 `/dev/nvme0n1p2`。
卸载分区:
在你执行卸载命令之前,请确保你没有在那个分区上运行任何程序或文件操作。
如果你的 `/home` 是独立分区,你可以尝试卸载它。但通常情况下,`/home` 是包含在根目录 `/` 分区里的。
如果你要卸载包含根目录 `/` 的分区,你可能需要从 Live USB/CD 启动你的 Ubuntu 系统,这样才能确保根分区未被使用。
如果你不熟悉从 Live USB 启动,请谨慎操作,否则可能导致系统无法启动。
最稳妥的方法是: 准备一个 Ubuntu Live USB/CD,用它启动你的电脑,进入“Try Ubuntu”模式。
找到设备名: 在 Live USB 环境下,再次打开终端并执行 `df h`,找到你的主分区(通常是挂载在 `/mnt/something` 或者 `/media/ubuntu/your_disk_label` 的地方,而不是 ``)。
执行卸载命令:
如果你是从 Live USB 启动的: 假设你的主分区设备名是 `/dev/sda1`,并且你已经在 Live 环境下找到了它(可能需要通过 `lsblk` 确认)。
```bash
sudo umount /dev/sda1 将 /dev/sda1 替换为你的实际分区设备名
```
如果你是在正常运行的系统中尝试卸载(不推荐,且通常不可能成功卸载根分区): 如果你的 `/home` 是独立分区(非常少见),并且你确定它没有被使用:
```bash
sudo umount /dev/sdXY 将 /dev/sdXY 替换为你的 /home 分区设备名
```
如果卸载失败,提示“device is busy”,说明有进程在使用该分区,你必须从 Live USB 启动。

开始恢复:

一旦你的分区被卸载,你就可以使用 `extundelete` 了。

1. 执行恢复命令:
语法: `extundelete /dev/sdXY restoredirectory /home/user/your_project_folder_name`
重要提示:
`/dev/sdXY`:替换为你的实际分区设备名(例如 `/dev/sda1`)。
`/home/user/your_project_folder_name`:替换为你师弟删除的 项目文件夹的完整路径和名称。例如,如果项目在 `/home/user/my_code` 目录下被删除了,这里就填 `/home/user/my_code`。
恢复的输出目录: `extundelete` 默认会将恢复的文件保存在当前目录下创建一个 `RECOVERED_FILES` 文件夹。请确保你执行此命令的当前目录不是你要恢复的那个分区上,最好是在一个不同的存储设备上,或者在你从 Live USB 启动的内存中。 例如,如果你从 Live USB 启动,你可以先在桌面创建一个文件夹,然后进入那个文件夹再执行命令。

示例:
假设你的主分区是 `/dev/sda1`,你想恢复 `/home/user/my_project` 这个项目,并且你在 Live USB 环境下,在桌面的 `~/Desktop/recover_area` 目录中执行命令:
```bash
cd ~/Desktop/recover_area
sudo extundelete /dev/sda1 restoredirectory /home/user/my_project
```

2. 检查恢复结果:
命令执行完毕后,在当前目录下会生成一个名为 `RECOVERED_FILES` 的文件夹。进入这个文件夹,查看里面是否有你丢失的项目。
`extundelete` 会尝试恢复你指定目录下的所有内容。

如果上述命令没有找到你的项目,你可以尝试恢复整个用户目录:

```bash
sudo extundelete /dev/sda1 restoredirectory /home/user
```
这会尝试恢复 `/home/user` 下的所有被删除的文件和目录。恢复的文件会保存在 `RECOVERED_FILES` 文件夹内,并保留其原始的路径结构。

重要提示:
`extundelete` 的恢复过程可能需要一些时间,具体取决于你的硬盘大小和数据量。
如果恢复的文件是乱码或者不完整,说明数据已经被部分覆盖,无法完全恢复。



恢复方法三:使用 `testdisk` 和 `photorec` (更强大的工具集)

`testdisk` 和 `photorec` 是功能非常强大的数据恢复工具。`testdisk` 主要用于修复分区表和恢复删除的分区,而 `photorec` 则是一个文件数据恢复工具,它通过扫描磁盘扇区来查找特定文件类型,即使文件系统信息丢失也能工作。

准备工作:

1. 安装 `testdisk`:
```bash
sudo apt update
sudo apt install testdisk
```

使用 `photorec` 进行文件恢复(更常用):

`photorec` 是 `testdisk` 的一部分,它非常适合恢复大量文件,因为它会根据文件签名来识别文件类型。

1. 启动 `photorec`:
```bash
sudo photorec
```
2. 选择要扫描的磁盘: `photorec` 会列出你系统上的所有磁盘。选择包含你丢失文件的硬盘(例如 `Disk /dev/sda`)。
3. 选择分区表类型: 通常是 `Intel` (MBR) 或 `GPT`。让 `photorec` 自动检测。
4. 选择要扫描的分区: 选择包含 `/home/user` 的分区。
5. 选择文件系统类型: 通常是 `[ext2/ext3]` (对于 ext4 也可以选择这个,因为它兼容)。
6. 选择恢复模式:
Free: 扫描未分配的空间,恢复可能更快。
Whole: 扫描整个分区,更全面但速度较慢。
推荐先尝试 Free。
7. 选择恢复文件的保存位置:
非常重要! 选择一个 不同于 你要恢复的分区作为保存目录。例如,如果你要恢复的 `/home` 分区是 `/dev/sda1`,你可以将文件保存在另一个硬盘、U盘或者Live USB的内存中。
使用箭头键导航到你想要保存恢复文件的目录,然后按 `C` 键确认。
8. 开始扫描: `photorec` 会开始扫描并查找匹配文件签名的数据。这个过程可能非常漫长,取决于你的硬盘大小和数据量。
9. 检查恢复结果:
`photorec` 会在你指定的保存目录下创建多个子目录(如 `recup_dir.1`, `recup_dir.2` 等),里面包含恢复的文件。
由于 `photorec` 是基于文件签名恢复的,恢复的文件名通常会丢失,会被重新命名(如 `f12345.txt`),并且所有的文件都可能被归类到特定的文件类型文件夹中(如 `.jpg`, `.txt`, `.zip` 等)。
你需要仔细地浏览这些恢复出来的文件,找到你丢失的项目。这可能会是一个繁琐的过程。



恢复方法四:检查系统日志或 Git 仓库(如果适用)

如果你的项目是使用 Git 进行版本控制的,那么恢复的可能性非常高。

1. 检查 Git 仓库:
如果你将项目托管在 GitHub, GitLab, Bitbucket 等平台上,直接从远程仓库 `clone` 下来即可。
如果你本地有一个 Git 仓库,并且你之前有提交(commit)和推送(push),那么即使文件被删除了,你也可以通过 Git 的历史记录来恢复。
```bash
cd /home/user/your_project 进入你项目所在的目录 (如果还有的话)
git reflog 查看所有 Git 操作的记录
git log 查看提交历史
git checkout 恢复到某个特定的提交
```
如果项目目录本身都被删除了,你可以在一个新位置 `git clone` 你的远程仓库,或者找到你本地仓库的 `.git` 目录(通常在项目根目录下),然后尝试恢复这个 `.git` 目录。

2. 检查系统日志(可能性极低,但可以碰碰运气):
在非常罕见的情况下,一些系统操作(如某些文件管理器的调试日志)可能会记录被删除文件的路径,但这对于恢复文件内容本身几乎没有帮助。



重要提示和建议:

耐心和细致: 文件恢复是一个需要耐心和细致的过程。不要急于求成。
多个工具尝试: 如果一种方法不起作用,尝试另一种方法。`extundelete` 通常在文件系统层面更直接,而 `photorec` 在文件签名恢复方面更强大。
避免重复写入: 在整个恢复过程中,请务必记住第一条建议:立即停止写入新数据!
提前做好备份: 这次经历是一个非常好的教训。以后务必养成定期备份重要数据的习惯。你可以使用 `rsync`、`tar`、或者像 Timeshift 这样的备份工具。
使用外部存储: 将备份和恢复操作放在与主系统不同的物理介质上进行,可以避免意外的数据覆盖。
寻求专业帮助: 如果文件极其重要且以上方法都无效,可以考虑联系专业的数据恢复服务公司,但费用会比较高昂。

具体操作步骤回顾:

1. 确认删除情况: 是回收站还是命令行 `rm`?
2. 安装恢复工具: `sudo apt install extundelete testdisk`
3. 停止所有写入操作。
4. (推荐)从 Live USB 启动。
5. 使用 `extundelete` 恢复指定目录: `sudo extundelete /dev/sdXY restoredirectory /home/user/your_project_folder_name`
6. 如果 `extundelete` 效果不佳,使用 `photorec` 扫描并恢复文件: `sudo photorec`,并选择不同的保存位置。
7. 检查 Git 历史记录(如果使用 Git)。
8. 仔细检查恢复结果。

希望这些详细的步骤能帮助你找回丢失的项目!祝你好运!

网友意见

user avatar

1.迅速而优雅地关机,不要进行额外IO操作, 避免覆盖数据。(umount /home可以起到相似作用,但鉴于Ubuntu20.04默认安装并不将/home单独分区,并不优先推荐)

2. 绝大多数情况下,(在文件没有被覆盖的前提下)通过rm删除的文件一般是可恢复的。当然shred这种暴力方法不算。

3.首先评估数据价值。如果你愿意为了被误删的数据付出1K以上的经济代价,那么保护好现场,赶紧联系正规可靠专业数据恢复机构。请不要轻信任何网络上的广告、推广,包括来路不明的淘宝店铺等。

4.但是在绝大多数情况下,纯软件导致的数据丢失恢复并没有这么困难。建议在另一台Linux系统或是通过liveCD等方式只读地挂载需要恢复数据的分区, Google搜索ext4误删除文件恢复并按照文章提示尝试恢复。尝试可以适当大胆些,因为只读访问并不会对分区数据造成任何进一步的破坏。但切记恢复时不要将文件恢复到需要恢复数据的分区,请保存在其他介质中,确认恢复的文件完整无误以后再拷贝的原来的分区。时间、空间允许的前提下,建议保存原分区镜像。(以及,定期备份是一个好习惯。)

5.奇怪的想法:如果用TSK或者Autopsy一类取证工具进行数据恢复会如何?(开个玩笑,请不要受到误导)

类似的话题

  • 回答
    理解你的困境,项目被删除是一件很让人头疼的事情。好在 Ubuntu 20.04 提供了几种恢复文件的方法,虽然不能保证 100% 恢复所有内容,但我们可以尽力而为。下面我会从几个方面详细讲解如何恢复,请按照步骤进行操作,并根据你的情况选择最适合的方法。在开始之前,请务必注意以下几点: 立即停止写.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有