不小心用dd覆盖了错误的磁盘,如何恢复?

use*_*388 5 linux hard-drive data-recovery dd

我想dd从图像sdbsdc,但是,因为一个小时,我已经建立了一些与众不同的事情之前,我只是复制相同的命令:

dd if=/home/user/Downloads/ubuntu.iso  of=/dev/rsdb bs=2M; sync
Run Code Online (Sandbox Code Playgroud)

sda = 内置硬盘
sdb = USB 硬盘(从现在启动)
sdc = USB 记忆棒

我启动的硬盘驱动器上有 3 个分区,我猜其他 2 个处于只读模式,并且我尝试了两次 shell 中的错误:

568328192 bytes (568 MB) copied, 38,5818 s, 14,7 MB/s
dd: error writing ‘/dev/rsdb’: No space left on device
715128832 bytes (715 MB) copied, 17,1752 s, 41,6 MB/s
Run Code Online (Sandbox Code Playgroud)

现在我意识到我在从(使用rsdb)启动的硬盘驱动器上覆盖了 1GB 。我没关过电脑。我会丢失此驱动器上的所有数据吗?我现在可以恢复任何东西吗?

这是我的/proc/partitions

   8        0  156290904 sda
   8        1  154218496 sda1
   8        2          1 sda2
   8        5    2069504 sda5
   8       16  244198582 sdb
   8       17   31457280 sdb1
   8       18   20971520 sdb2
   8       19  191768576 sdb3
   8       32    2011136 sdc
   8       33    2011135 sdc1
Run Code Online (Sandbox Code Playgroud)

use*_*686 2

您已经销毁了第一个 ~1 GB,其中覆盖了分区表和第一个分区的文件/目录列表。不过,您仍然可以重建分区表并发现 sdb2 和 sdb3 未受影响。

从终端运行此脚本,并记下它报告的开始/大小/结束编号(以防万一):

for part in /sys/class/block/sdb[0-9]*; do
    num=$(<$part/partition)
    start=$(<$part/start)
    size=$(<$part/size)
    end=$((start+size-1))
    echo "partition $num: start $start, size $size, end $end"
done
Run Code Online (Sandbox Code Playgroud)

然后使用parted /dev/sdbfdisk /dev/sdb手动创建匹配的分区。例如,如果打印:

partition 1: start 2048, size 204800, end 206847
Run Code Online (Sandbox Code Playgroud)

那么你可以使用:

parted /dev/sdb mkpart primary 2048s 206847s
Run Code Online (Sandbox Code Playgroud)

(注意s最后的单位)