Azure 虚拟机使用磁盘来存储 VM 操作系统、应用程序和数据。 创建 VM 时,请务必选择适用于所需工作负荷的磁盘大小和配置。 本教程介绍如何部署和管理 VM 磁盘。 学习内容:

  • OS 磁盘和临时磁盘
  • 数据磁盘数
  • 标准磁盘和高级磁盘
  • 磁盘性能
  • 附加和准备数据磁盘
  • 调整磁盘大小
  • 磁盘快照

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.4 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI 2.0

默认 Azure 磁盘

创建 Azure 虚拟机后,将自动向此虚拟机附加两个磁盘。

操作系统磁盘 - 操作系统磁盘大小可达 1 TB,并可托管 VM 操作系统。 默认情况下,OS 磁盘标记为“/dev/sda”。 已针对 OS 性能优化了 OS 磁盘的磁盘缓存配置。 由于此配置,OS 磁盘不应托管应用程序或数据。 对于应用程序和数据,请使用数据磁盘,本文后面会对其进行详细介绍。

临时磁盘- 临时磁盘使用 VM 所在的 Azure 主机上的固态驱动器。 临时磁盘具有高性能,可用于临时数据处理等操作。 但是,如果将 VM 移动到新的主机,临时磁盘上存储的数据都将被删除。 临时磁盘的大小由 VM 大小决定。 临时磁盘标记为“/dev/sdb”,且装载点为 /mnt。

临时磁盘大小

类型 VM 大小 临时磁盘大小上限 (GB)
常规用途 A 和 D 系列 800
计算优化 F 系列 800
内存优化 D 系列 6144

Azure 数据磁盘

可添加额外的数据磁盘,用于安装应用程序和存储数据。 在任何需要持久和灵敏数据存储的情况下,都应使用数据磁盘。 每个数据磁盘的最大容量为 1 TB。 虚拟机的大小决定可附加到 VM 的数据磁盘数。 每个 VM 核心可附加两个数据磁盘。

每个 VM 的最大数据磁盘数

类型 VM 大小 每个 VM 的最大数据磁盘数
常规用途 A 和 D 系列 32
计算优化 F 系列 32
内存优化 D 系列 64

VM 磁盘类型

Azure 提供两种类型的磁盘。

标准磁盘

标准存储以 HDD 为基础,可以在确保性能的同时提供经济高效的存储。 标准磁盘适用于经济高效的开发和测试工作负荷。

高级磁盘

高级磁盘由基于 SSD 的高性能、低延迟磁盘提供支持。 完美适用于运行生产工作负荷的 VM。 高级存储支持 DS 系列、DSv2 系列和 FS 系列 VM。 高级磁盘分为 3 种类型(P10、P20 和 P30),磁盘大小决定磁盘类型。 选择时,磁盘大小值舍入为下一类型。 例如,如果磁盘大小小于 128 GB,则磁盘类型为 P10。 如果磁盘大小介于 129 GB 和 512 GB 之间,则大小为 P20。 如果超过 512 GB,则大小为 P30。

高级磁盘性能

高级存储磁盘类型 P10 P20 P30
磁盘大小(向上舍入) 128 GB 512 GB 1,024 GB (1 TB)
每个磁盘的最大 IOPS 500 2,300 5,000
每个磁盘的吞吐量 100 MB/秒 150 MB/秒 200 MB/秒

尽管上表确定了每个磁盘的最大 IOPS,但还可通过条带化多个数据磁盘实现更高级别的性能。 例如,Standard_GS5 VM 最多可实现 80,000 IOPS。 若要详细了解每个 VM 的最大 IOPS,请参阅 Linux VM 大小

创建并附加磁盘

可创建磁盘,并将其附加到新建 VM 或现有 VM。

在 VM 创建时附加磁盘

使用 az group create 命令创建资源组。

Azure CLI复制
az group create --name myResourceGroupDisk --location chinaeast

使用 az vm create 命令创建 VM。 --datadisk-sizes-gb 参数用于指定应创建并附加到虚拟机的附加磁盘。 若要创建并附加多个磁盘,请使用空格分隔的磁盘大小值列表。 在以下示例中,创建的 VM 具有两个均为 128 GB 的数据磁盘。 因为磁盘大小为 128 GB,所以这两个磁盘都配置为 P10,每个磁盘最多提供 500 IOPS。

Azure CLI复制
az vm create \
--resource-group myResourceGroupDisk \
--name myVM \
--image UbuntuLTS \
--size Standard_DS2_v2 \
--data-disk-sizes-gb 128 128 \
--generate-ssh-keys

将磁盘附加到现有 VM

若要创建新磁盘并将其附加到现有虚拟机,请使用 az vm disk attach 命令。 以下示例创建大小为 128 GB 的高级磁盘,并将其附加到上一步创建的 VM 中。

Azure CLI复制
az vm disk attach --vm-name myVM --resource-group myResourceGroupDisk --disk myDataDisk --size-gb 128 --sku Premium_LRS --new

准备数据磁盘

将磁盘附加到虚拟机后,需要将操作系统配置为使用该磁盘。 以下示例演示如何手动配置磁盘。 还可使用 cloud-init 自动执行此过程,后面的教程对此进行了介绍。

手动配置

创建与虚拟机的 SSH 连接。 将示例 IP 地址替换为虚拟机的公共 IP 地址。

Azure CLI复制
ssh 52.174.34.95

使用 fdisk 对磁盘进行分区。

bash复制
(echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdc

使用 mkfs 命令将文件系统写入分区。

bash复制
sudo mkfs -t ext4 /dev/sdc1

装载新磁盘,使其在操作系统中可访问。

bash复制
sudo mkdir /datadrive && sudo mount /dev/sdc1 /datadrive

现在可以通过 datadrive 装入点访问磁盘,可运行 df -h 命令对此进行验证。

bash复制
df -h

输出显示新驱动器装载在 /datadrive 上。

bash复制
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1 30G 1.4G 28G 5% /
/dev/sdb1 6.8G 16M 6.4G 1% /mnt
/dev/sdc1 50G 52M 47G 1% /datadrive

若要确保在重启后重新装载驱动器,必须将其添加到 /etc/fstab 文件。 为此,请使用 blkid 实用工具获取磁盘的 UUID。

bash复制
sudo -i blkid

输出显示驱动器的 UUID,在本例中为 /dev/sdc1

bash复制
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="ext4"

在 /etc/fstab 文件中添加类似于以下内容的行。 另请注意,可使用 barrier=0 禁用写入屏障,此配置可提高磁盘性能。

bash复制
UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive  ext4    defaults,nofail,barrier=0   1  2

配置磁盘后,请关闭 SSH 会话。

bash复制
exit

调整 VM 磁盘大小

部署 VM 后,可增加操作系统磁盘或任何附加数据磁盘的大小。 需要更多存储空间或更高级别的性能(P10、P20、P30)时,增加磁盘大小很有用。 请注意,不能降低磁盘大小。

增加磁盘大小之前,需要磁盘 ID 或名称。 使用 az disk list 命令返回资源组中的所有磁盘。 记下要调整大小的磁盘名称。

Azure CLI复制
az disk list -g myResourceGroupDisk --query '[*].{Name:name,Gb:diskSizeGb,Tier:accountType}' --output table

此外,必须解除分配 VM。 使用 az vm deallocate 命令停止和解除分配 VM。

Azure CLI复制
az vm deallocate --resource-group myResourceGroupDisk --name myVM

使用 az disk update 命令调整磁盘大小。 本示例将名为“myDataDisk”的磁盘的大小调整为 1 TB。

Azure CLI复制
az disk update --name myDataDisk --resource-group myResourceGroupDisk --size-gb 1023

完成调整大小操作后,启动 VM。

Azure CLI复制
az vm start --resource-group myResourceGroupDisk --name myVM

如果已调整操作系统磁盘的大小,则会自动扩展分区。 如果已调整数据磁盘的大小,则需在 VM 操作系统中扩展任何当前分区。

拍摄 Azure 磁盘快照

拍摄磁盘快照可创建磁盘的只读时间点副本。 Azure VM 快照可用于快速保存配置更改前 VM 所处的状态。 如果已证实不需要更改配置,可使用此快照还原 VM 状态。 VM 具有多个磁盘时,则拍摄的每个磁盘快照都与其他磁盘快照无关。 为了获取应用程序一致的备份,请考虑在拍摄磁盘快照之前停止 VM。 或者使用 Azure 备份服务,以便在 VM 运行时执行自动备份。

创建快照

创建虚拟机磁盘快照前,需要磁盘 ID 或名称。 使用 az vm show 命令返回磁盘 ID。在此示例中,磁盘 ID 存储在变量中,因此能够在稍后的步骤中使用。

Azure CLI复制
osdiskid=$(az vm show -g myResourceGroupDisk -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)

获取虚拟机磁盘 ID 后,使用以下命令可创建磁盘快照。

azurcli复制
az snapshot create -g myResourceGroupDisk --source "$osdiskid" --name osDisk-backup

从快照创建磁盘

然后,可将此快照转换为可用于重新创建虚拟机的磁盘。

Azure CLI复制
az disk create --resource-group myResourceGroupDisk --name mySnapshotDisk --source osDisk-backup

从快照还原虚拟机

若要演示如何还原虚拟机,请删除现有虚拟机。

Azure CLI复制
az vm delete --resource-group myResourceGroupDisk --name myVM

从快照磁盘创建新虚拟机。

Azure CLI复制
az vm create --resource-group myResourceGroupDisk --name myVM --attach-os-disk mySnapshotDisk --os-type linux

重新附加数据磁盘

需要将所有数据磁盘重新附加到虚拟机。

先使用 az disk list 命令找到数据磁盘名称。 此示例将磁盘名称放在名为“datadisk”的变量中,将在下一步中使用该变量。

Azure CLI复制
datadisk=$(az disk list -g myResourceGroupDisk --query "[?contains(name,'myVM')].[name]" -o tsv)

使用 az vm disk attach命令附加磁盘。

Azure CLI复制
az vm disk attach -g myResourceGroupDisk --vm-name myVM --disk $datadisk

后续步骤

本教程中介绍了以下 VM 磁盘主题:

  • OS 磁盘和临时磁盘
  • 数据磁盘数
  • 标准磁盘和高级磁盘
  • 磁盘性能
  • 附加和准备数据磁盘
  • 调整磁盘大小
  • 磁盘快照

转到下一教程,了解如何自动配置 VM。

立即访问http://market.azure.cn

使用 Azure CLI 管理 Azure 磁盘的更多相关文章

  1. 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机

    Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络. 本教程中的示例假设 VM 将要托管包含数据库后端的 Web ...

  2. 使用 Azure CLI 在 Azure China Cloud 云平台上手动部署一套 Cloud Foundry

    这篇文章将介绍如何使用 Azure CLI 在 Azure China Cloud 云平台上手动部署一套 Cloud Foundry.本文的目的在于: 了解作为 PaaS 的 Cloud Foundr ...

  3. 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机

    Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程介绍了如何在虚拟网络中创建多个虚拟机 (VM),以及如何在虚拟机之间配置网络连接. 你将学习如何执行以下操作: 创建虚拟网络 创 ...

  4. Azure CLI下载Azure Storage Container内的所有文件

    在某些场景下,客户需要把Azure Storage的某一个container内的内容都下载到本地.当然采用PowerShell可以定时的进行下载的动作,但有时客户的环境是Linux或MacOS,这时需 ...

  5. Azure CLI的版本问题

    Azure支持多种管理方法.命令行方法有: PowerShell,PowerShell只能运行在Windows上 Azure CLI,而Azure CLI可以运行在Windows.MAC以及Linux ...

  6. 在Docker上部署使用Azure CLI镜像

    Docker是非常流行的容器技术,在Docker中安装部署多种工具非常快速和方便:而Azure CLI是微软提供的可以在Linux/Mac上运行的跨平台命令行管理工具,本文介绍如何在Azure上安装部 ...

  7. Azure RBAC管理ASM资源

    上一篇文章介绍了Azure基于ARM的RBAC,给不同的用户分配不同的权限. 但目前在国内使用的大部分用户还是以ASM的资源为主.比如:VM.Storage.Network.WebAPP.SQL Az ...

  8. 使用Azure CLI创建Linux虚拟机

    Azure提供了三种方式创建虚拟机,分别是Azure CLI.Azure PowerShell和Azure门户.本文介绍使用Azure CLI来创建Linux虚拟机. 使用Azure CLI创建Lin ...

  9. 使用 Azure CLI 创建和管理 Linux VM

    Azure 虚拟机提供完全可配置的灵活计算环境. 本教程介绍 Azure 虚拟机的基本部署项目,例如选择 VM 大小.选择 VM 映像和部署 VM. 你将学习如何执行以下操作: 创建并连接到 VM 选 ...

随机推荐

  1. 使用Second Copy同步ftp服务器的差异文件

    公司一直用自主开发的一个同步工具来进行数据库文件异机备份的,但无奈太不稳定,三天两头出现服务挂死的问题,特别是最近这1个月,几天就1次. 问题现象都是服务一直在运行,但没有复制文件到备份机上,而且备份 ...

  2. 【树】Count Complete Tree Nodes

    题目: 求完全二叉树节点数. 思路: 满二叉树的节点数是2^k-1,k是树的深度. 所以我们可以先判断该树是否为满二叉树,然后是的话直接返回结果,如果不是递归地求解子树. 这样不用遍历所有的节点.复杂 ...

  3. Flow中的Switch分析

    A switch statement can complete normally iff at least one of the following is true: (1)The switch bl ...

  4. CentOS7安装SaltStack的踩坑经历

    虚拟机镜像:centOS7 minion 版本 软件版本: salt-master-2017.7.2-1.el7.noarchsalt-minion-2017.7.2-1.el7.noarchsalt ...

  5. 判断产品Key的正则表达式(格式: ABCD1-ABCD2-ABCD3-ABCD4-ABCD5)

    正则表达式: ^[A-Za-z0-9]{5}-[A-Za-z0-9]{5}-[A-Za-z0-9]{5}-[A-Za-z0-9]{5}-[A-Za-z0-9]{5}$ 改进: ^([A-Za-z0-9 ...

  6. ubuntu新建用户不能使用ll等指令,显示出来的信息没有颜色区分的解决方案

    ubuntu利用  useradd -m test -g admin 指令,创建用户test及其工作目录.但是登陆后,会出现不能使用很多指令“比如:ll.显示的信息没有颜色”等等此时   查看该用户的 ...

  7. 在Java Web项目中,不用ActionContext类来获得tomcat部署项目的绝对路径

    例子:sendIosApns.class.getClassLoader().getResource("").getFile().replaceAll("%20" ...

  8. pmm 监控mysql、mongodb、系统

    Pmm监控 1.概述 Pmm是(percona management and monitoring)一款用于数据库(mysql.mongodb)的监控工具,是一种典型的C/S架构.本次部署采用的是do ...

  9. iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

    这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...

  10. 学习ThinkPHP笔记

    学习ThinkPHP笔记 TP的模块化设计 名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用. 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录. 控制器 ...