Skip to main content

使用Azure Cli创建和管理Azure磁盘

分类:  Azure虚拟机 标签:  #虚拟机 #Linux #Azure #基础 发布于: 2023-05-27 20:56:32

虚拟机使用磁盘来存储数据,因此在创建虚拟机时选择磁盘的大小和可以承受的工作负载非常重要,我们在本教程里学习如下的内容:

  • 操作系统磁盘和临时数据磁盘

  • 数据磁盘

  • 标准磁盘和高级磁盘

  • 磁盘的性能

  • 添加和初始化数据磁盘

  • 磁盘快照

Azure虚拟机默认磁盘

当创建AzureLinux虚拟机时,默认会在虚拟机里附加两块磁盘,这两块磁盘根据功能不同分为操作系统磁盘和临时数据磁盘:

  • 操作系统磁盘:在Linux虚拟机中这个磁盘的大小最大可以达到2TB, 主要用于安装操作系统,在Linux上由设备/dev/sda来标识该磁盘。该磁盘的缓存配置主要针对操作系统来优化的,因此该磁盘不适合用于运行应用和保存数据,这两个需求建议使用数据磁盘。

  • 临时数据磁盘:顾名思义该磁盘主要是为了临时数据存取的,因此该磁盘的性能很不错,主要的场景是用于临时数据处理的情况,但是需要注意的如果虚拟机重启,该磁盘的数据就会丢失,因此不适合存放持久性数据,在Linux上该磁盘由设备/dev/sdb来标识,同时在系统启动后,挂载在目录/mnt 下。

Azure数据磁盘

为了安装应用和存储数据,建议使用额外的数据磁盘,而不是默认使用Azure Linux虚拟机创建时自动创建的操作系统磁盘和临时数据磁盘。用户选择创建的虚拟机的大小决定了虚拟机能够附加的磁盘的个数。

Azure磁盘的类型

Azure磁盘的类型主要有两种:标准型和高级型,这两种的区别在于标准型背后的硬件使用HDD, 但是高级型的磁盘背后使用的硬件SSD。
关于这两种磁盘类型能够选择的磁盘的大小和IOPS, 吞吐量等等技术参数,可以参考文档:https://docs.microsoft.com/en-us/azure/virtual-machines/disks-types

高级磁盘不同于标准磁盘类型,选择高级磁盘类型,Azure是保证磁盘容量,IOPS, 吞吐量等各种指标的,微软提供高达"99.9%"的SLA保证。
另外需要注意的是虚拟机的IOPS这个指标是可以叠加的,可以通过在虚拟机上叠加多个磁盘达到IOPS指标叠加的目的。

Step By Step 教程

下面我们来开始一步一步的教程,向大家展示如何创建和管理基于Linux系统的托管磁盘管理。

创建和添加磁盘

建议您使用powershell 而非cmd, 如果是在windows系统下,如果是Linux下,那么默认就是bash

我们先和之前一样,使用az 选择您订阅所在的云环境,然后登录到该云环境,然后选择您默认的订阅,关于这部分的操作,您可以随时查看之前的文章来回顾,做好这几步之后,我们开始创建一个资源组

az group create --name myResourceGroupDisk --location chinaeast2

创建好资源组之后,我们再来创建一个虚拟机,同时需要注意的是,我们在创建虚拟机时指定了磁盘,两个128G的磁盘:

az vm create \
--resource-group myResourceGroupDisk \
--name myVM \
--image UbuntuLTS \
--size Standard_DS2_v2 \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 128 128

上述是在创建虚拟机时添加磁盘,您也可以向已经创建好的虚拟机添加磁盘,可以使用如下的命令:

az vm disk attach \
--resource-group myResourceGroupDisk \
--vm-name myVM \
--name myDataDisk \
--size-gb 128 \
--sku Premium_LRS \
--new

准备数据磁盘

一旦数据磁盘被创建或者被添加到虚拟机了,在Linux上,我们需要对该磁盘进行初始化,以便用于日常的使用。
我们首先使用SSH登录到该Linux虚拟机上,然后使用如下的命令对该磁盘进行分区:

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%

当分区之后,我们需要对该磁盘进行文件系统的格式化:

sudo mkfs.xfs /dev/sdc1
sudo partprobe /dev/sdc1

最后我们需要将磁盘挂载到系统中便于使用,当然您可以每次都手动挂载,但是这很不方便,我们需要Linux系统能够在启动的时候自动挂载该磁盘。

手动挂载:

sudo mkdir /datadrive && sudo mount /dev/sdc1 /datadrive

开始进行配置自动挂载:

df -h | grep -i "sd"

可以看到已经挂载成功了:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1 29G 2.0G 27G 7% /
/dev/sda15 105M 3.6M 101M 4% /boot/efi
/dev/sdb1 14G 41M 13G 1% /mnt
/dev/sdc1 50G 52M 47G 1% /datadrive

为了能够自动挂载,我们需要找到系统分配给该磁盘的UUID

sudo -i blkid

输出如下图所示:

/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs"

编辑/etc/fstab, 添加如下的内容:

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive  xfs    defaults,nofail   1  2

退出保存之后,该磁盘即实现了每次开机自动挂载

磁盘快照

当制作一个磁盘快照时,Azure创建一个只读的,当前时间点的磁盘拷贝,这个快照对于保存虚拟机当前的状态非常适合。一般情况下为了保证应用数据的一致性,建议停止虚拟机创建快照,如果不能接受这个场景,可以考虑使用Azure 备份服务。

创建快照

使用如下的命令创建快照:

首先我们需要找到VM DISK的ID, 然后根据该ID来给磁盘的DISk创建一个快照。

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

az snapshot create \
--resource-group myResourceGroupDisk \
--source "$osdiskid" \
--name osDisk-backup

创建好快照之后,我们可以从快照来创建一个磁盘:

az disk create \
--resource-group myResourceGroupDisk \
--name mySnapshotDisk \
--source osDisk-backup

也可以从快照来恢复一个虚拟机:

az vm delete \
--resource-group myResourceGroupDisk \
--name myVM

az vm create \
--resource-group myResourceGroupDisk \
--name myVM \
--attach-os-disk mySnapshotDisk \
--os-type linux

从快照上来重新添加磁盘:

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

az vm disk attach \
–g myResourceGroupDisk \
--vm-name myVM \
--name $datadisk