我不小心从我的主磁盘 (SSD) 中删除了 2 或 3 个与 Windows 相关的分区(我是双启动 Mint 和 Win 10)。当我意识到我正在错误的驱动器上工作时,我立即停止了自己的工作(我试图从内部硬盘驱动器中删除分区)。
系统仍在运行,如何恢复不小心删除的分区?
答案1
只要您只删除了分区,并且没有向分区以前占用的空间写入任何内容,就可以重新创建分区。只需注意仅重新创建分区,而不是在其上创建文件系统或以其他方式格式化它们。您只需重写分区表即可。
即使您重新启动了系统,您也可以执行此操作,但查找必要的信息可能会更加困难。
要重新创建分区,您需要知道:
- 它的起始位置。这是绝对必要的。如果出错,您将无法访问任何数据。
- 它的大小。如果太大,就会浪费空间。如果它太小,请小心:它可能看起来可以正常工作,但随后会导致可怕的数据丢失。
- 可能是它的类型。 Linux 通常不关心分区类型,但 Windows 关心。幸运的是,如果您知道分区的操作系统和用途(例如文件系统、交换、加密卷……),则可以确定分区类型。
- 可能是它的编号。分区号决定了 Linux 中的编号
/dev/sdz99
和 Windows 中的驱动程序盘符。
请注意偏移量和大小的舍入,以及十进制和二进制单位前缀之间的差异,例如 1,000,000 字节(1 MB,十进制)与 2 20 =1,048,576 字节(1 MiB,二进制)。我建议使用fdisk
并指定 512 字节扇区的大小,因为所有大小和偏移量都是 512 字节的倍数,而较大的单位会带来舍入的风险。
在Linux下,您可以从.txt文件中找到内核所知道的分区的位置/sys/block
。如果内核仍在使用一些旧的分区,那么在修改分区表后它就无法重新读取分区表,所以这仍然是旧的信息。单位是512字节块。例如:
$ cat /sys/block/sda/sda2/start
14680064
$ cat /sys/block/sda/sda2/size
2097152
这显示分区号 2 从偏移量 14680064*512 字节 (7 GiB) 开始,大小为 2097152*512 字节 (1 GiB)。
如果您无法弄清楚分区从哪里开始,您可以使用一个工具来搜索它们。测试盘包括这个功能。您可以在 Mint 上安装它(有一个 Debian 软件包)或从 liveCD/liveUSB 运行它。当您想要恢复已删除的文件时,实时运行非常有必要,但如果您只是从分区表中删除了一个分区,则可以继续正常使用系统。使用一个参数运行testdisk
,即要恢复分区的磁盘,然后使用“分析”菜单。
请确保建议的分区看起来合理。该工具可能会发现误报,尤其是但不限于您今天之前删除的以前分区的位置。
一旦您认为已经恢复了分区,请进行一些健全性检查:
file -s /dev/sdz99
应该告诉您/dev/sdz99
包含您期望的文件系统或其他卷的类型。tune2fs -l
在 ext2/ext3/ext4 文件系统上运行,ntfsinfo
以探测 NTFS 文件系统等。fsck -n
在文件系统上运行。如果分区在文件系统之前结束,它应该大声抱怨(但我不确定是否所有文件系统类型都是如此)。