如何使用 Azure Python SDK 检查虚拟机的磁盘大小?

How can I check the disk size of a VM with Azure Python SDK?

当我使用 Azure 创建 VM(例如标准 A6)时,它带有 2 个安装单元,一个 30GB,另一个 285GB。当我通过 ssh 连接到 VM 时,我可以看到这一点。在 Azure 门户中,我可以看到 30GB 的存储空间,但看不到 285GB 的存储空间。但是,当我转到 Azure 计算器时,我可以看到标准 A6 机器有 285GB 临时space。

编辑: 虽然我可以通过 Azure 门户和 SDK 访问机器,但我无法通过 ssh 进入创建的虚拟机(这是我无法更改的项目要求),所以 运行 bash 命令这不是一个选项。

我发现了一些似乎可以实现我需要的东西,但它似乎不起作用:

vm = cmc.virtual_machines.get(GROUP_NAME, VM_NAME)
os_disk_name = vm.storage_profile.os_disk.name
cmc.disks.get(GROUP_NAME, os_disk_name)
---------------------------------------------------------------------------
CloudError                                Traceback (most recent call last)
<ipython-input-39-818c4d1cac7d> in <module>()
----> 1 cmc.disks.get(GROUP_NAME, os_disk_name)
~/lib/python3.6/site-packages/azure/mgmt/compute/v2017_03_30/operations/disks_operations.py in get(self, resource_group_name, disk_name, custom_headers, raw, **operation_config)
    285             exp = CloudError(response)
    286             exp.request_id = response.headers.get('x-ms-request-id')
--> 287             raise exp
    288 
    289         deserialized = None
CloudError: Azure Error: ResourceNotFound
Message: The Resource 'Microsoft.Compute/disks/myosdisk' under resource group GROUP_NAME was not found.

1-回答你关于暂存的问题:“暂存的目的是什么? 此临时存储用于保存系统分页 file.You 也可以仅使用此驱动器存储临时数据,您可以承受任何丢失的临时数据 time.Like 例如:如果您的工作流程涉及从blob,对其进行处理并将其存储回 blob,然后您可以将内容下载到临时存储,处理内容,然后将处理后的内容保存回 blob。”可以在此处找到更多详细信息:https://blogs.msdn.microsoft.com/mast/2013/12/06/understanding-the-temporary-drive-on-windows-azure-virtual-machines/

2- 使用 Python 检查磁盘大小,我建议检查:Find size and free space of the filesystem containing a given file 建议是:

import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
    output.split("\n")[1].split()

3- 当您通过 SSH 连接到 VM 时,您可以根据您的发行版使用以下信息之一:

a- df 命令 – 显示在 Linux 文件系统上使用和可用的磁盘数量 space。

b- du 命令 – 显示指定文件和每个子目录使用的磁盘数量space。

c- btrfs fi df /device/ – 显示基于 btrfs 的挂载 point/file 系统的磁盘 space 使用信息。 更多信息在这里:https://www.cyberciti.biz/faq/linux-check-disk-space-command/

What is this temporary space? What does it mean it's "temporary"?

你可以检查这个official document

默认情况下,当您创建 VM 时,Azure 会为您提供一个 OS 磁盘 (/dev/sda) 和一个临时磁盘 (/dev/sdb)。您添加的所有其他磁盘显示为 /dev/sdc、/dev/sdd、/dev/sde 等。临时磁盘 (/dev/sdb) 上的所有数据都不是持久的,如果 VM 调整大小、重新部署或维护等特定事件强制重启 VM,则这些数据可能会丢失。临时磁盘的大小和类型与您在部署时选择的 VM 大小有关。

How can I automatically check the disk size? I need to do this from python since I'm working on a cloud broker portal that'll show the disk size of a machine to a user.

Azure Python SDK支持检查OS磁盘和数据磁盘大小,但不支持检查临时磁盘。临时磁盘仅取决于 VM 大小。它不支持更改大小。您可以通过 ssh 连接到您的虚拟机。执行df -h。默认情况下,您将看到以下内容:

root@shui:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.7G     0  1.7G   0% /dev
tmpfs           342M  4.9M  338M   2% /run
/dev/sda1        30G  1.3G   28G   5% /
tmpfs           1.7G     0  1.7G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           1.7G     0  1.7G   0% /sys/fs/cgroup
/dev/sdb1        59G   52M   56G   1% /mnt

/dev/sdb1 是暂时的 space。 (注意:结果取决于你的 Linux 系统,我在 Ubuntu 16.04.A2 大小的 VM 上测试。)

How can I manually check the disk size? I can't see it in the VM resource or the storage account in the Azure portal. The only place I found this information was from the Azure calculator which is a bit of a work around.

你可以检查问题 2。

更新:

是的,您可以使用 Azure Python SDK 获取 VM OS/Data 磁盘大小。例如:

rg = 'shuicli'
name = 'shui'
vm = compute_client.virtual_machines.get(rg,name)
##get OS disk size(GB)
print vm.storage_profile.os_disk.disk_size_gb
datadisks = vm.storage_profile.data_disks
##get data disk size(GB)
for i in datadisks:
    print i.disk_size_gb

请参阅此 link 中的 Azure Python SDK。