dd 将映像恢复到 HDD(有问题)

dd 将映像恢复到 HDD(有问题)

我已经制作了一个完整的图像(至少我认为我已经制作了),dd if=/dev/sda of=/mnt/sda.img bs=32M其中 mnt 是我使用的外部 HD。

今天早上我来恢复那个映像,所以我启动了一个实时 USB,安装了外部硬盘并运行dd if=/mnt/sda.img of=/dev/sda bs=32M,我重新启动后发现驱动器缺少 MBR 和分区表。我尝试再次使用小得多的块大小写入磁盘,我想大约是 64k,但这没什么区别。

我是否因为某种原因未能备份整个磁盘?(例如丢失了 MBR?)

我运行了文件sda.img并将其识别为 ext4 数据。

编辑:(回应 mpy)

据我所知,我运行的命令应该已经成像整体磁盘,从第一个扇区到最后一个扇区。

sfdisk -l /mnt/sda.img产量

sfdisk:磁盘 sda.img:无法获取几何图形

磁盘 sda.img:7294 个柱面,255 个磁头,63 个扇区/磁道

我的硬盘上有两个映像,一个安装了 Linux,另一个安装了 Win 7。Linux 映像的大小不一样,它更小,大概是dd没有复制所有内容。

ls -l

..... 60003385344 5月29日 14:19 sda.img

..... 64023257088 5月31日 13:08 sda-​​win.img

我很感激在擦除硬盘之前我应该​​检查一下图像大小... 是否可以尝试恢复此图像(比如,假设丢失的 4GB 只是空白空间)?有趣的是,我可以循环安装图像并访问大部分数据(我看不到任何丢失的东西)

答案1

如果您可以循环挂载映像,则表明该映像仅包含一个分区。通常,如果您尝试循环挂载整个磁盘的映像,则会出现错误:

# mount -o loop sda.img /mnt/loop
mount: you must specify the filesystem type

这可以通过它来验证,file它还ext4为您报告了一个文件系统。整个磁盘映像file应该识别一个引导扇区:

# file sda.img
sda.img: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.97; partition 1: ID=0x83, active, starthead 32, startsector 2048, 77607966 sectors; partition 2: ID=0x82, starthead 254, startsector 77611008, 4194304 sectors; partition 3: ID=0x83, starthead 254, startsector 81805312, 894967808 sectors, code offset 0x48, OEM-ID "      \320", Bytes/sector 190, sectors/cluster 124, reserved sectors 191, FATs 6, root entries 185, sectors 64514 (volumes <=32 MB) , Media descriptor 0xf3, sectors/FAT 20644, heads 6, hidden sectors 309755, sectors 2147991229 (volumes > 32 MB) , physical drive 0x7e, dos < 4.0 BootSector (0x0)

sfdisk -l作为参考,以下是磁盘映像(sda.img)和分区映像( )的输出sda1.img

# sfdisk -l sda.img
Disk sda.img: cannot get geometry

Disk sda.img: 0 cylinders, 0 heads, 0 sectors/track
Warning: The partition table looks like it was made
  for C/H/S=*/255/63 (instead of 0/0/0).
For this listing I'll assume that geometry.
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
 sda.img1   *      0+   4830-   4831-  38803983   83  Linux
 sda.img2       4831+   5092-    262-   2097152   82  Linux swap / Solaris
 sda.img3       5092+  60801-  55710- 447483904   83  Linux
 sda.img4          0       -       0          0    0  Empty

# sfdisk -l sda1.img
Disk sda1.img: cannot get geometry

Disk sda1.img: 0 cylinders, 0 heads, 0 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
 sda1.img: unrecognized partition table type
No partitions found

因此,我假设您的系统sda.img只包含一个分区。这总比没有好。根据不同的大小(64023257088-60003385344 = 大约 4 GB)猜测,我猜您只丢失了交换分区,这没什么大不了的。

那么该怎么办?!

  1. 对您的硬盘进行分区,sda1= 60003385344 字节(sda2= 其余部分)
  2. 将您的图像写回至sda1
  3. 恢复引导加载程序
    • 如何做到这一点取决于你使用哪一个
    • 对于 GRUB:
      1. 安装sda1(例如mkdir /root/part1 && mount /dev/sda1 /root/part1
      2. chroot /root/part1
      3. update-grub(这是 Debian 的方式,取决于你的发行版)

相关内容