我需要将可启动磁盘克隆到不同计算机上的多个磁盘(不同大小),并且它需要可编写脚本,但我找不到方法来做到这一点。
我在一切上都使用 Ubuntu 16.04。
首先我尝试dd
,我运行(卸载磁盘):
$ dd if=/dev/sda bs=1K count=10000000 status=progress | gzip -c > os.img
这大约是 10GB,压缩文件大约是 3.8GB,源磁盘是 120GB,我测试的目标磁盘是 16GB,所以我确信它可以在所有大小上工作,我用以下命令写入磁盘:
$ gunzip -c os.img | dd bs=1K of=/dev/sda status=progress
但它无法启动,我得到:
内核恐慌 - 不同步:VFS:无法在未知块(0,0)上安装根文件系统
不知道这意味着什么,所以我用谷歌搜索但没有找到解决方案。然后我尝试将磁盘安装在实时操作系统上,看看至少是否有效,但我得到:
$ sudo mount /dev/sda1 /mnt
EXT4-fs (sda1): bad geometry: block count 29306624 exceeds size of device (14653670 blocks)
这对我来说没有意义。有人知道我是否可以解决这个问题或者是否有更好的方法来做到这一点?我看到有人推荐clonezilla,但我找不到可编写脚本的版本,看起来我只能将它与“终端GUI”一起使用。
答案1
问题在于源磁盘的大小大于(某些)目标磁盘。这意味着分区表不起作用,因为它是为不同大小的磁盘制作的。
在你的位置,我会编写一个脚本,使用fdisk
etc. 首先删除磁盘上的所有分区,然后创建一个固定大小的分区(这应该与你的图像来自的分区的大小相同;你可能有创建这样的分区),然后使其可引导。这将确保分区表对于该大小的磁盘是正确的。最后你复制分割(例如/dev/sda1)而不是整个磁盘。
顺便说一句,同时使用gzip
/gunzip
和dd
没有意义(除非您喜欢进度显示) -dd
所做的一切都是为了确保写入具有某种特定的大小。你可以只使用
gzip -c /dev/sda1 > os.img
gunzip -c os.img > /dev/sdb1
等等。如果你想显示进度,还有pv
.