@@ -274,7 +274,7 @@ def xva_export_import(vm: VM, compression: XVACompression, temp_large_dir: str,
274274 growpart_returncode = vm .ssh_with_result ('growpart /dev/xvda 3' ).returncode
275275 assert growpart_returncode in [0 , 1 ] # growpart returns 1 if the size is already the expected one
276276 vm .ssh ('resize2fs /dev/xvda3' )
277- stream_size = volume_size // 2
277+ stream_size = min ( volume_size // 2 , 2 * GiB )
278278 else :
279279 stream_size = 500 * MiB
280280
@@ -311,16 +311,8 @@ def vdi_export_import(vm: VM, sr: SR, image_format: ImageFormat, temp_large_dir:
311311 defer (lambda : vm .disconnect_vdi (vdi_src ) if vdi_src is not None and vdi_src .uuid in vm .vdis else None )
312312 dev = f'/dev/{ vbd .param_get ("device" )} '
313313
314- # the stream is 1/5 of the full one, truncated to a multiple of 32KiB, in order to
315- # be validable in a single command
316- stream_size = (config .volume_size // 5 // (32 * KiB )) * (32 * KiB )
317- stream_position = (config .volume_size // 2 )
318-
319- checksum1 = randstream (vm , f'generate --size { stream_size } { dev } ' )
320- # use a different seed to not write the same data (default seed is 0)
321- checksum2 = randstream (vm , f'generate --seed 1 --position { stream_position } --size { stream_size } { dev } ' )
322- randstream (vm , f'validate --size { stream_size } --expected-checksum { checksum1 } { dev } ' )
323- randstream (vm , f'validate --position { stream_position } --size { stream_size } --expected-checksum { checksum2 } { dev } ' )
314+ checksums = partially_populate_device (vm , dev , config .volume_size )
315+ validate_partially_populated_device (vm , dev , config .volume_size , checksums )
324316 vm .disconnect_vdi (vdi_src )
325317
326318 image_path = f'{ temp_large_dir } /{ vdi_src .uuid } .{ image_format } '
@@ -332,7 +324,8 @@ def vdi_export_import(vm: VM, sr: SR, image_format: ImageFormat, temp_large_dir:
332324
333325 # check that the zero blocks are not part of the result
334326 size_mb = int (vm .host .ssh (f'du -sm --apparent-size { image_path } ' ).split ()[0 ])
335- assert stream_size // MiB * 2 < size_mb < stream_size // MiB * 2.1 , f"unexpected image size: { size_mb } "
327+ stream_size = partial_stream_size (config .volume_size )
328+ assert stream_size // MiB * 3 < size_mb < stream_size // MiB * 3.1 , f"unexpected image size: { size_mb } "
336329 vdi_dest = sr .create_vdi (image_format = image_format , virtual_size = config .volume_size )
337330 defer (lambda : vdi_dest .destroy ())
338331
@@ -341,5 +334,4 @@ def vdi_export_import(vm: VM, sr: SR, image_format: ImageFormat, temp_large_dir:
341334 defer (lambda : vm .disconnect_vdi (vdi_dest ))
342335 dev = f'/dev/{ vbd .param_get ("device" )} '
343336
344- randstream (vm , f'validate --size { stream_size } --expected-checksum { checksum1 } { dev } ' )
345- randstream (vm , f'validate --position { stream_position } --size { stream_size } --expected-checksum { checksum2 } { dev } ' )
337+ validate_partially_populated_device (vm , dev , config .volume_size , checksums )
0 commit comments