练习 - 将数据磁盘添加到 VM

已完成

你的律师事务所案件量正在不断增加,而你的任务是创建新的 Linux Web 服务器,以存储各种来源(客户、其他律师事务所和执法部门)的重要文档。 借助 Web 服务器,你可以上传文档并将其存储在磁盘上。

提示

本练习以 Linux 为例,但创建 VM 和添加磁盘的基本过程与 Windows 相同。 主要区别在于分区和格式化磁盘。 在 Windows 上,可通过远程桌面连接到 VM,并使用内置的磁盘管理工具或部署 PowerShell 脚本,该脚本与此处使用的 Bash 脚本类似。

你的目标是创建一个 Linux VM,并附加一个名为 uploadDataDisk1 的新虚拟硬盘 (VHD) 来存储 /uploads 目录。

设置 Azure CLI 默认值

Azure CLI 可用于设置默认值,因此每次运行命令时无需重复设置这些值。

你将指定默认的 Azure 位置或区域。 此位置是放置 Azure VM 的位置。

理想情况下,此位置应靠近你的客户端。 在本例中,请从 Azure 沙盒的可用位置中选择离你最近的区域。

使用免费沙盒,可以在部分 Azure 全球区域中创建资源。 创建资源时,请从此列表中选择一个区域:

  • 美国西部2
  • 美国中南部
  • 美国中部
  • 美国东部
  • 欧洲西部
  • 亚洲东南部
  • 日本东部
  • 巴西南部
  • 澳大利亚东南部
  • centralindia
  1. 运行 az configure 以设置要使用的默认位置。 用上一步中选择的位置替换 eastus

    az configure --defaults location=eastus
    

    提示

    可以使用“复制”按钮将命令复制到剪贴板。 要粘贴,请右键单击 Cloud Shell 终端中的新行,然后选择“粘贴”,或使用 Shift+Insert 键盘快捷方式(在 macOS 上为 ⌘+V)。

  2. 将默认资源组名称设置为通过 Azure 沙盒创建的预配置资源组:[沙盒资源组]

    az configure --defaults group="<rgn>[sandbox Resource Group]</rgn>"
    

创建 Linux VM

此处,可创建一个 Linux VM 来托管你的 Web 服务器。

  1. 运行此 az vm create 命令来创建 Ubuntu Linux VM。

    az vm create \
      --name support-web-vm01 \
      --image Canonical:UbuntuServer:16.04-LTS:latest \
      --size Standard_DS1_v2 \
      --admin-username azureuser \
      --generate-ssh-keys
    
    • 该 VM 的名称是 support-web-vm01。
    • 其大小为 Standard_DS1_v2。
    • 管理员用户名是 azureuser。 实际上,此名称可为任意名称。
    • --generate-ssh-keys 参数会生成一个 SSH 密钥对,用于通过 SSH 连接到 VM。

    部署 VM 需要几分钟时间。 VM 就绪后,即可看到其 JSON 格式的相关信息。 下面是一个示例:

    {
      "fqdns": "",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/680469d8-edB7-42ec-b118-cd80d51741e7/providers/Microsoft.Compute/virtualMachines/support-web-vm01",
      "location": "eastus",
      "macAddress": "00-0D-3A-10-63-0A",
      "powerState": "VM running",
      "privateIpAddress": "10.0.0.4",
      "publicIpAddress": "104.211.38.211",
      "resourceGroup": "680469d8-edB7-42ec-b118-cd80d51741e7",
      "zones": ""
    }
    

    注意

    在本课程中,你将使用此 VM 来了解如何管理磁盘。 实际上,还可安装 Web 服务器和其他软件,然后运行 az vm open-port,让公司外的人员能够使用你所需要的端口。

将空数据磁盘添加到 VM

此处,可创建一个空数据磁盘,然后将其附加到 VM。 理想情况下,数据磁盘大小为 64 GB。 稍后,将此磁盘装载到 VM 上的 /uploads 目录。

提示

出于学习的目的,将单独创建 VM 和数据磁盘。 实际上,可指定 az vm create 命令的 --data-disk-sizes-gb 参数,在创建 VM 时添加数据磁盘。

  1. 运行以下 az vm disk attach 命令,将新的空磁盘添加到 VM 中。

    az vm disk attach \
      --vm-name support-web-vm01 \
      --name uploadDataDisk1 \
      --size-gb 64 \
      --sku Premium_LRS \
      --new
    

    此命令:

    • 将磁盘命名为 uploadDataDisk1。
    • 将其大小设置为 64 GB。
    • 指定使用具有本地冗余的高级存储。

若要使用此磁盘,需要对其进行分区和格式化。 现在让我们执行此操作。

初始化并格式化数据磁盘

空数据驱动器需要进行初始化和格式化。 执行此操作的过程与物理磁盘相同。

对于一次性任务,可通过 SSH 手动连接到 VM 并运行所需命令。 为了使此过程更具可重复性且更不容易出错,可以使用 Bash 脚本(或可用的) PowerShell 脚本来指定所需的命令。

使用脚本自动执行此进程还有一个额外的好处:脚本可以用作查看此过程执行方式的文档。 其他人可阅读你的脚本以了解系统的配置方式。 如果需要更改此过程,只需修改脚本并在临时暂存 VM 上对其进行测试,然后再将更改部署到生产环境中即可。

若要自动执行本课程中的过程,需要使用自定义脚本扩展。 自定义脚本扩展是一种可以在 Azure VM 上下载并运行脚本的简单方法。 它只是在 VM 启动并运行后可用来配置系统的多种方法之一。

可以将脚本存储在 Azure 存储中,也可以将其存储在某个公共位置中,例如 GitHub。 可以手动运行脚本,也可以将其作为自动化程度较高的部署的一部分运行。 在此,你将运行 Azure CLI 命令从 GitHub 下载一个预制的 Bash 脚本并在 VM 上执行此脚本。

为便于学习,还将在 VM 上运行一些命令,以便验证 VM 是否是按预期配置的。

  1. 运行 az vm show 以获取 VM 的公共 IP 地址,并将 IP 地址另存为 Bash 变量。

    ipaddress=$(az vm show \
      --name support-web-vm01 \
      --show-details \
      --query [publicIps] \
      --output tsv)
    
  2. 运行以下 ssh 命令来使用在上一步中刚刚创建的 ipaddress 变量数据通过 SSH 连接在 VM 上运行 lsblk 命令。 回想一下,azureuser 是创建 VM 时使用的管理员用户名。 如果选择了不同的名称,请使用该名称。 出现提示时输入“”。

    ssh azureuser@$ipaddress lsblk
    

    该命令的输出应如下所示。

    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb       8:16   0    7G  0 disk 
    └─sdb1    8:17   0    7G  0 part /mnt
    sr0      11:0    1  628K  0 rom  
    sdc       8:32   0   64G  0 disk 
    sda       8:0    0   30G  0 disk 
    ├─sda14   8:14   0    4M  0 part 
    ├─sda15   8:15   0  106M  0 part /boot/efi
    └─sda1    8:1    0 29.9G  0 part /
    

    请注意,你创建的 64 GB 驱动器 sdc 未装载。 该驱动器以这种方式列出,是因为它尚未初始化。

  3. 运行以下 az vm extension set 命令以在 VM 上运行预制的 Bash 脚本。

    警告

    该脚本修改 /etc/fstab/etc/fstab 文件修改有误可能会导致系统无法启动。 部署到生产环境之前,务必在临时暂存系统上测试配置更改。 请参阅分发的文档,了解如何正确修改此文件。 在生产中,我们还建议创建此文件的备份,以便在需要时还原配置。

    az vm extension set \
      --vm-name support-web-vm01 \
      --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings '{"fileUris":["https://raw.githubusercontent.com/MicrosoftDocs/mslearn-add-and-size-disks-in-azure-virtual-machines/master/add-data-disk.sh"]}' \
      --protected-settings '{"commandToExecute": "./add-data-disk.sh"}'
    

    当命令运行时,如果愿意,可以在单独的浏览器标签页中检查 Bash 脚本

    概括而言,该脚本:

    • 对驱动器 /dev/sdc 进行分区。
    • 在驱动器上创建 ext4 文件系统。
    • 创建 /uploads 目录,将其用作装入点。
    • 将磁盘附加到装载点。
    • 更新 /etc/fstab,以便在系统重新启动后自动装载驱动器。
  4. 若要验证配置,请运行与先前相同的 ssh 命令,以通过 SSH 连接在 VM 上运行 lsblk 命令。

    ssh azureuser@$ipaddress lsblk
    

    你会看到 sdc/sdc1 已按预期分区并装载到 /uploads 目录。

    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb       8:16   0    7G  0 disk 
    └─sdb1    8:17   0    7G  0 part /mnt
    sr0      11:0    1  628K  0 rom  
    sdc       8:32   0   64G  0 disk 
    └─sdc1    8:33   0   64G  0 part /uploads
    sda       8:0    0   30G  0 disk 
    ├─sda14   8:14   0    4M  0 part 
    ├─sda15   8:15   0  106M  0 part /boot/efi
    └─sda1    8:1    0 29.9G  0 part /
    

提示

某些 Linux 内核支持 TRIM 放弃磁盘上未使用的块。 此功能在 Azure 磁盘上可用;如果创建大型文件再将其删除,则可节约成本。 在 Azure 文档中了解如何启用此功能

摘要

此处,创建了一个数据磁盘并将其附加到 VM 中。 你使用自定义脚本扩展在 VM 上运行了预制的 Bash 脚本,使该进程更具可重复性。 Bash 脚本对磁盘进行分区、格式化和装载,以便Web 服务器在其中写入内容。

你已在 VM 上准备好数据磁盘了,接下来我们将深入了解可以创建的各种磁盘类型。 所面临的主要抉择在于选择标准存储还是高级存储。