【问题标题】:How can I check the disk size of a VM with Azure Python SDK?如何使用 Azure Python SDK 检查 VM 的磁盘大小?
【发布时间】:2023-04-05 00:27:01
【问题描述】:

当我使用 Azure 创建 VM 时,例如标准 A6,它带有 2 个已安装的单元,一个具有 30GB,另一个具有 285GB。当我 ssh 到虚拟机时,我可以看到这一点。从 Azure 门户,我可以看到 30GB 的存储空间,但看不到 285GB 的存储空间。但是,当我去 Azure 计算器时,我可以看到 Standard A6 机器有 285GB 的临时空间。

  • 这个临时空间是什么? “临时”是什么意思?
  • 如何自动检查磁盘大小?我需要从 python 执行此操作,因为我正在开发一个云代理门户,该门户将向用户显示机器的磁盘大小。
  • 如何手动检查磁盘大小?我在 VM 资源或 Azure 门户的存储帐户中看不到它。我发现此信息的唯一地方是 Azure 计算器,这有点麻烦。

编辑: 虽然我可以通过 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.

【问题讨论】:

    标签: azure azure-storage azure-virtual-machine azureportal azure-sdk-python


    【解决方案1】:

    这个临时空间是什么? “临时”是什么意思?

    您可以查看official document

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

    如何自动检查磁盘大小?我需要从 python,因为我正在开发一个云代理门户,它将显示 给用户的机器的磁盘大小。

    Azure Python SDK 支持检查操作系统磁盘和数据磁盘大小,但不支持检查临时磁盘。临时磁盘仅取决于 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 是临时空间。 (注:结果取决于你的 Linux 系统,我在 Ubuntu 16.04 上测试。A2 大小的 VM。)

    如何手动检查磁盘大小?我在虚拟机中看不到 Azure 门户中的资源或存储帐户。我唯一的地方 发现此信息来自 Azure 计算器,有点 解决方法。

    您可以检查问题 2。

    更新:

    是的,您可以使用 Azure Python SDK 获取 VM 操作系统/数据磁盘大小。例如:

    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。

    【讨论】:

    • 感谢您的回答。你说Azure Python SDK support check OS disk and data disk size - 你能指出我的文档吗?我一直在搜索,在官方文档或示例中找不到。
    • 我已经尝试过这样的计算管理客户端: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: Azure Error: ResourceNotFound; Message: The Resource 'Microsoft.Compute/disks/myosdisk' under resource group GROUP_NAME was not found.
    • @zapatilla ,您可以专门使用github.com/Azure-Samples/virtual-machines-python-manage:你知道它是如何使用的。
    • @zapatilla 是的,您可以使用 Azure Python SDK 获取操作系统/数据磁盘大小。
    • @AdamSmith-MSFT 是的,你是对的,我添加一个例子。
    【解决方案2】:

    1-回答您关于临时存储的问题:“临时存储的目的是什么? 此临时存储用于保存系统页面文件。您也可以仅使用此驱动器来存储临时数据,您可以随时丢失这些数据。例如:如果您的工作流程涉及从 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 连接到虚拟机时,您可以根据您的发行版使用以下信息之一:

    a- df 命令 - 显示 Linux 文件系统上已使用和可用的磁盘空间量。

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

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

    【讨论】:

    • 感谢您的回答。我将编辑我的问题并添加更多详细信息。我们无法通过 ssh 访问我们创建的资源,因此无法运行 df。我们需要使用 Azure Python SDK。
    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 2020-10-10
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2018-10-10
    • 2014-09-13
    相关资源
    最近更新 更多