我有一个使用 qemu-img 创建的 VHD 磁盘,使用 qemu-img,我看到的大小为
vmdkDisk="xxxxxxx-disk1.vmdk"
vhdDisk="xxxxxxx-disk1.vhd"
qemu-img convert -f vmdk -O qcow2 $vmdkDisk image.qcow2
# -- resize raw image
qemu-img resize -f raw image.qcow2 8g
# -- convert raw disk to VHD
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc image.qcow2 $vhdDisk
qemu-img info -f vpc --output json xxxxxxx-disk1.vhd
{
"virtual-size": 8589934592,
"filename": "xxxxxxx-disk1.vhd",
"format": "vpc",
"actual-size": 5870948352,
"dirty-flag": false
}
所以我知道以 MB 为单位的虚拟大小是 8589934592/1024/1024=8192MB
但是,当我尝试将 VHD 上传到 azure 存储容器时,出现以下错误
az storage blob upload-batch --account-name yyyy \
--account-key 0000000== \
--destination vhd --source . --type page
1/2: "xxxxxxx-disk1.vhd"[#####################] 100.0000%ERROR: The command failed with an unexpected error. Here is the traceback:
ERROR: Invalid page blob size: 167816. The size must be aligned to a 512-byte boundary.
Traceback (most recent call last):
File "/opt/az/lib/python3.10/site-packages/knack/cli.py", line 233, in invoke
cmd_result = self.invocation.execute(args)
File "/opt/az/lib/python3.10/site-packages/azure/cli/core/commands/__init__.py", line 663, in execute
raise ex
File "/opt/az/lib/python3.10/site-packages/azure/cli/core/commands/__init__.py", line 726, in _run_jobs_serially
results.append(self._run_job(expanded_arg, cmd_copy))
File "/opt/az/lib/python3.10/site-packages/azure/cli/core/commands/__init__.py", line 718, in _run_job
return cmd_copy.exception_handler(ex)
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/__init__.py", line 412, in new_handler
first(ex)
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/__init__.py", line 412, in new_handler
first(ex)
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/_exception_handler.py", line 17, in file_related_exception_handler
raise ex
File "/opt/az/lib/python3.10/site-packages/azure/cli/core/commands/__init__.py", line 697, in _run_job
result = cmd_copy(params)
File "/opt/az/lib/python3.10/site-packages/azure/cli/core/commands/__init__.py", line 333, in __call__
return self.handler(*args, **kwargs)
File "/opt/az/lib/python3.10/site-packages/azure/cli/core/commands/command_operation.py", line 121, in handler
return op(**command_args)
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 527, in storage_blob_upload_batch
include, result = _upload_blob(cmd, blob_client, file_path=src,
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/util.py", line 311, in wrapper
return True, func(*args, **kwargs)
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 509, in _upload_blob
return upload_blob(*args, **kwargs)
File "/opt/az/lib/python3.10/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 633, in upload_blob
response = client.upload_blob(data=stream, length=length, metadata=metadata,
File "/opt/az/lib/python3.10/site-packages/azure/core/tracing/decorator.py", line 73, in wrapper_use_tracer
return func(*args, **kwargs)
File "/opt/az/lib/python3.10/site-packages/azure/multiapi/storagev2/blob/v2021_06_08/_blob_client.py", line 730, in upload_blob
return upload_page_blob(**options)
File "/opt/az/lib/python3.10/site-packages/azure/multiapi/storagev2/blob/v2021_06_08/_upload_helpers.py", line 201, in upload_page_blob
raise ValueError("Invalid page blob size: {0}. "
ValueError: Invalid page blob size: 167816. The size must be aligned to a 512-byte boundary.
To check existing issues, please visit: https://github.com/Azure/azure-cli/issues
To open a new issue, please run `az feedback`
如果我试了167816/512= 327.765625,那么确实不是整数
但是,这里的 blob 大小是如何计算的?
谢谢!
az storage blob upload-batch --account-name yyyy \
--account-key 0000000== \
--destination vhd --source . --type page \
--pattern *.vhd
我放弃添加文件模式过滤器和azcli将nohup日志与vhd一起上传,导致错误。