虚拟机需要经常在不同的host之间迁移,在迁移的过程中是否发生异常,出现数据丢失的情况?这就需要用到md5进行验证。

md5sum和sha1sum谁更快?

答:md5更快一些

root@proxmox1:~# time sha1sum /dev/pve/vm-101-disk-1
224f021a11a165445634fedd600571f362cf340f  /dev/pve/vm-101-disk-1
real    2m15.577s
user    0m37.709s
sys     0m11.308s
root@proxmox1:~# time md5sum /dev/pve/vm-101-disk-1
ca0b0148fad43569d039e21b0412c7a7  /dev/pve/vm-101-disk-1
real    1m53.967s
user    0m29.713s
sys     0m10.881s
一个以raw文件形式保存的镜像文件,通过dd复制到lvm后,两者的md5是否一致?

答:一致。使用dd复制一个文件,是以byte to byte方式进行的,所以只要成功完成复制,则不管是file还是lvm方式,他们的md5值就肯定是一致的。

能否截取dd前后两个镜像文件的前面一部分进行md5sum校验?

简答之:不行。假如复制过程中止,那么前面的字节完全一致,但后面的字节就有问题了,所以,要判断dd前后两者的差异,必须是对整个文件做md5sum,而不能仅对两个文件的前半部分做md5sum。

以下是对上面两个问题的验证:

root@proxmox2:/var/lib/vz/images/105# dd if=vm-105-disk-1-copy.raw of=/dev/pve/vm-103-disk-1 bs=64M
94+0 records in
94+0 records out
6308233216 bytes (6.3 GB) copied, 31.173 s, 202 MB/s
root@proxmox2:/var/lib/vz/images/105# dd if=vm-105-disk-1-copy.raw bs=1M count=6000 | md5sum -
6000+0 records in
6000+0 records out
6291456000 bytes (6.3 GB) copied, 21.7435 s, 289 MB/s
7851bf8b8223a0d75f200ca0a634cebc  -
root@proxmox2:/var/lib/vz/images/105# dd if=/dev/pve/vm-103-disk-1 bs=1M count=6000 | md5sum -
7851bf8b8223a0d75f200ca0a634cebc  -
6000+0 records in
6000+0 records out
6291456000 bytes (6.3 GB) copied, 28.4937 s, 221 MB/s
root@proxmox2:/var/lib/vz/images/105# dd if=/dev/pve/vm-103-disk-1 bs=1M count=6700 | md5sum -
d43ba920c9e8552f81fe79dcb5f25d5a  -
6700+0 records in
6700+0 records out
7025459200 bytes (7.0 GB) copied, 31.5748 s, 223 MB/s
root@proxmox2:/var/lib/vz/images/105# dd if=vm-105-disk-1-copy.raw bs=1M count=6700 | md5sum -
6700+0 records in
6700+0 records out
7025459200 bytes (7.0 GB) copied, 24.3232 s, 289 MB/s
b402d2ad99acd39c352b2dfa54e65691  -
root@proxmox2:/var/lib/vz/images/105# md5sum /dev/pve/vm-103-disk-1
3f7820f6818ea698620828aa55f9b56d  /dev/pve/vm-103-disk-1
root@proxmox2:/var/lib/vz/images/105# md5sum vm-105-disk-1-copy.raw
3f7820f6818ea698620828aa55f9b56d  vm-105-disk-1.raw

设想:假如dd能从反方向读取镜像文件,是否就可以实现快速验证的目的呢?尚未测试,理论上是可以,但是对于生产用的数据,还是建议针对整个文件做md5校验。

当虚拟机的硬盘数据发生变化时,镜像的md5是否会发生改变?

答:会

在关机状态下,先创建md5

root@proxmox1:/var/lib/vz/images/103# md5sum vm-103-disk-1.raw
aba7268ebf9bfcfec011337aa3a14dec  vm-103-disk-1.raw

虚拟机启动后,生成一个测试文件test.txt

root@proxmox1:~# md5sum /dev/pve/vm-103-disk-1
3da2a9521f3ffdad41d8bd240762ff93  /dev/pve/vm-103-disk-1

说明只要虚拟机硬盘内容发生变化,镜像的md5就一定会发生变化。