我已经制作了一个完整的图像(至少我认为我已经制作了),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)猜测,我猜您只丢失了交换分区,这没什么大不了的。
那么该怎么办?!
- 对您的硬盘进行分区,
sda1
= 60003385344 字节(sda2
= 其余部分) - 将您的图像写回至
sda1
。 - 恢复引导加载程序
- 如何做到这一点取决于你使用哪一个
- 对于 GRUB:
- 安装
sda1
(例如mkdir /root/part1 && mount /dev/sda1 /root/part1
) chroot /root/part1
update-grub
(这是 Debian 的方式,取决于你的发行版)
- 安装