供以后参考,这是我最终的工作方式,并对遇到的各种问题或陷阱提出了一些意见:
1.使用Linux live系统引导计算机
第一步是使用Linux live系统引导包含要映像的磁盘的计算机。
注意:我的第一个想法是使用Ubuntu Live USB磁盘,但是该机器不支持从USB引导,因此我发现使用旧的Knoppix live CD更加容易。
2.使用映像磁盘dd
并通过管道传输数据ssh
然后,我使用dd
以下数据并通过管道将所有磁盘内容复制到本地服务器上的文件映像中ssh
:
$ dd if = / dev / hdX bs = 4k conv = noerror,sync | ssh -c blowfish myuser @ myserver'dd of = myfile.dd'
这里有一些评论:此方法将读取所有磁盘内容,因此可能会花费很长时间(80Gb磁盘花了我5个小时)。瓶颈不是网络,而是磁盘的读取速度。在启动副本之前,我建议您检查BIOS /磁盘/系统参数,以确保磁盘和母板以最快的速度工作(可以使用命令hdparm -i
和通过使用进行测试来检查hdparm -Tt /dev/hdX
)。
注意:dd
不会输出操作进度,但是我们可以通过从另一终端向过程PID 发送USR1信号来强制执行此操作dd
:
$ kill -USR1 PIDofdd
3.回收未使用的空间
此时,不再需要源计算机,我们将专门在目标服务器上工作(也正在运行Linux)。VirtualBox将用于将原始磁盘映像转换为VHD格式,但是在此之前,我们可以将未使用的块清零,以便VirtualBox在最终文件中不为它们分配空间。
为此,我将映像安装为回送设备:
$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file
注意:可以通过parted
在映像文件上使用来获得指示磁盘映像中分区开始的偏移量:
$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 21936821759B 21936789504B primary ntfs boot
2 21936821760B 80023749119B 58086927360B extended lba
5 26608813056B 80023749119B 53414936064B logical ntfs
注意2:默认的Linux内核NTFS驱动程序提供只读访问权限,因此有必要安装和使用用户空间ntfs-3g
驱动程序,否则写入磁盘会引发错误!
4.使用VBoxManage创建VHD映像
此时,我们可以使用VirtualBox实用程序将原始图像转换为VHD文件:
VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD