我正在尝试备份 Linux Ubuntu 10.04 LTS 的分区表。
实际上,我正在使用虚拟机 (VirtualBox) 进行测试。我有一个虚拟磁盘中的源系统、另一个虚拟机作为救援系统,以及另一个与源系统磁盘大小完全相同的空虚拟磁盘。
因此,运行救援系统,我挂载源系统磁盘并使用此命令进行分区表备份:
sfdisk /dev/sdb –d > /backup/sdb-part-table.sf
并且文件被生成并保存,输出消息如下:
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
一旦我有了分区表文件,我就会卸载源磁盘并安装备份空磁盘。
我尝试使用这个命令:
sfdisk /dev/sdb < /backup/sdb-part-table.sf
然后我再次尝试恢复分区表但出现此错误:
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdc: 265 cylinders, 255 heads, 63 sectors/track
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sdc1 * 0+ 245- 246- 1973248 83 Linux
/dev/sdc2 245+ 265- 20- 155649 5 Extended
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 0 - 0 0 0 Empty
/dev/sdc5 245+ 265- 20- 155648 82 Linux swap / Solaris
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdc1 * 2048 3948543 3946496 83 Linux
/dev/sdc2 3950590 4261887 311298 5 Extended
/dev/sdc3 0 - 0 0 Empty
/dev/sdc4 0 - 0 0 Empty
/dev/sdc5 3950592 4261887 311296 82 Linux swap / Solaris
Warning: partition 1 does not end at a cylinder boundary
sfdisk: I don't like these partitions - nothing changed.
(If you really want this, use the --force option.)
因此,最后我强制进行恢复,并且似乎有效:
sfdisk --force /dev/sdb < /backup/sdb-part-table.sf
得到这个结果:
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdc: 265 cylinders, 255 heads, 63 sectors/track
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sdc1 * 0+ 245- 246- 1973248 83 Linux
/dev/sdc2 245+ 265- 20- 155649 5 Extended
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 0 - 0 0 0 Empty
/dev/sdc5 245+ 265- 20- 155648 82 Linux swap / Solaris
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdc1 * 2048 3948543 3946496 83 Linux
/dev/sdc2 3950590 4261887 311298 5 Extended
/dev/sdc3 0 - 0 0 Empty
/dev/sdc4 0 - 0 0 Empty
/dev/sdc5 3950592 4261887 311296 82 Linux swap / Solaris
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
但是,当我将备份移动到似乎没有问题的新文件系统时,系统无法启动,屏幕变黑,好像备份机器上没有安装操作系统,工作源磁盘和备份不工作磁盘中的分区表比较相等。
Mbr 备份已完成并安装。我尝试在分区表恢复之后和之前进行安装。
那么,我知道如何让它发挥作用吗?
提前致谢,祝你度过愉快的一周:D
答案1
您是否尝试过较低级别的方法?例如,使用dd if=/dev/sdc of=mbr.sav bs=512 count=1
,它将完全按照您的预期执行操作,即将 HDD 的前 512 个字节备份到mbr.sav
?要恢复备份,请反转if
和of
参数值。
答案2
之前的答案其实非常接近;您只备份了分区表。分区表是第一个扇区的一部分。第一个扇区中的另一个是引导加载程序。
但是,如果您确实精确复制了第一个扇区,而不是精确复制了 /boot 分区,则很容易出现第一个扇区中的代码跳转到没有所需文件的地址的情况。在这种情况下,启动一些相关媒体,然后重新安装引导加载程序(我认为 Ubuntu 甚至在其媒体上有一个帮助程序)。