创建和挂接磁盘


您可以创建空白的永久性磁盘,也可以从数据源创建磁盘。您可以将永久性磁盘用作虚拟机实例的启动磁盘,也可以用作挂接到虚拟机的数据磁盘。本文档介绍如何完成以下任务:

  • 创建空白的非启动可用区永久性磁盘,并将其挂接到虚拟机实例。
  • 格式化并装载磁盘,因为它最初没有任何数据或文件系统。

如需大致了解永久性磁盘以及可用磁盘类型,请参阅永久性磁盘概览

准备工作

限制

  • 在创建实例期间,您最多可以挂接 127 个辅助非启动可用区永久性磁盘。
  • 每个实例可以挂接的总容量为 257 TB。如需了解如何在使用大容量卷时确保最高性能,请参阅逻辑卷大小

将非启动磁盘添加到虚拟机

使用 Google Cloud Consolegcloud 命令行工具Compute Engine API 创建和挂接非启动可用区磁盘。

如果您在 Cloud Console 中创建磁盘,则默认磁盘类型pd-balanced。如果您使用 gcloud 工具或 Compute Engine API 创建磁盘,则默认磁盘类型为 pd-standard

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选中相应复选框,然后点击您要添加磁盘的实例的名称。

  3. 虚拟机实例详情页面上,点击修改

  4. 额外磁盘下方,点击添加新磁盘

  5. 指定磁盘名称,配置磁盘属性,然后选择空白作为来源类型

  6. 点击完成以完成磁盘的配置。

  7. 点击保存以将更改应用于实例并添加新磁盘。

gcloud

  1. 使用 gcloud compute disks create 命令创建可用区永久性磁盘。

    gcloud compute disks create DISK_NAME \
      --size DISK_SIZE \
      --type DISK_TYPE
    

    请替换以下内容:

    • DISK_NAME:新磁盘的名称。
    • DISK_SIZE:新磁盘的大小(以 GB 为单位)。可接受的大小范围介于 10 GB 到 65536 GB(含边界值)之间并以 1 GB 为增量。
    • DISK_TYPE:永久性磁盘类型的完整或部分网址。例如 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd
  2. 创建磁盘后,将其挂接到任何正在运行或已停止的实例。 使用 gcloud compute instances attach-disk 命令

    gcloud compute instances attach-disk INSTANCE_NAME \
      --disk DISK_NAME
    

    请替换以下内容:

    • INSTANCE_NAME:要向其中添加新地区永久性磁盘的实例的名称
    • DISK_NAME:您要挂接到实例的新磁盘的名称。
  3. 使用 gcloud compute disks describe 命令查看磁盘的说明。

API

  1. 在 API 中,构建一个 POST 请求以使用 disks.insert 方法创建可用区永久性磁盘。请添加 namesizeGbtype 属性。如果想要创建一个空白且未格式化的非启动磁盘,请不要为此磁盘指定来源映像或来源快照。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    
    {
     "name": "DISK_NAME",
     "sizeGb": "DISK_SIZE",
     "type": "DISK_TYPE"
    }
    

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • ZONE:您的实例和新磁盘所在的区域。
    • DISK_NAME:新磁盘的名称。
    • DISK_SIZE:新磁盘的大小(以 GB 为单位)。可接受的大小范围介于 10 GB 到 65536 GB(含边界值)之间并以 1 GB 为增量。
    • DISK_TYPE:永久性磁盘类型的完整或部分网址。例如 https://www.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE/diskTypes/pd-ssd
  2. 构建一个向 compute.instances.attachDisk 方法发出的 POST 请求,并在其中添加您刚创建的地区永久性磁盘的网址:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk
    
    {
     "source": "/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME"
    }
    

    替换以下内容:

    • PROJECT_ID:您的项目 ID
    • ZONE:您的实例和新磁盘所在的地区
    • INSTANCE_NAME:您要向其中添加新永久性磁盘的实例的名称
    • DISK_NAME:新磁盘的名称

创建新磁盘并将其挂接到虚拟机后,必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

在 Linux 虚拟机上格式化和装载非启动磁盘

连接到虚拟机

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击挂接了新磁盘的实例旁的 SSH 按钮。浏览器会建立连到该虚拟机的终端连接。

格式化磁盘

  1. 在终端中,使用 lsblk 命令列出挂接到您的实例的磁盘,并找到您要格式化和挂接的磁盘。

      $ sudo lsblk
      
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda      8:0    0   10G  0 disk
      └─sda1   8:1    0   10G  0 part /
      sdb      8:16   0  250G  0 disk
      

    在本示例中,sdb 是新的空白永久性磁盘的设备名称。

  2. 使用 mkfs 工具格式化磁盘。此命令会删除指定磁盘中的所有数据,因此请确保正确指定磁盘设备。

    您可以使用任何想要的文件格式,但我们建议您使用单个 ext4 文件系统,而不使用分区表。您可以在稍后增加磁盘大小,而无需修改磁盘分区。

    为了最大限度地提高磁盘性能,请在 -E 标志中使用推荐的格式化选项。无需在此辅助磁盘上为根卷保留空间,因此请指定 -m 0 以使用所有可用的磁盘空间。

     $ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/DEVICE_NAME
     

    DEVICE_NAME 替换为要格式化的磁盘的设备名称。对于本示例,请指定 sdb 以格式化整个磁盘而不创建分区表。

装载磁盘

  1. 创建用作虚拟机上新磁盘装载点的目录。您可以使用任何目录。以下示例在 /mnt/disks/ 下创建了一个目录。

    $ sudo mkdir -p /mnt/disks/MOUNT_DIR
    

    MOUNT_DIR 替换为要装载磁盘的目录。

  2. 使用 mount 工具将磁盘装载到实例,并启用 discard 选项:

    $ sudo mount -o discard,defaults /dev/DEVICE_NAME /mnt/disks/MOUNT_DIR
    

    请替换以下内容:

    • DEVICE_NAME:要装载的磁盘的设备名称。
    • MOUNT_DIR:要装载磁盘的目录。
  3. 配置对磁盘的读写权限。对于本示例,请为所有用户授予对磁盘的写入权限。

    $ sudo chmod a+w /mnt/disks/MOUNT_DIR
    

    MOUNT_DIR 替换为装载磁盘的目录。

配置虚拟机重启时的自动装载

请将磁盘添加到 /etc/fstab 文件中,以使该磁盘在虚拟机重启时自动重新装载。在 Linux 操作系统上,设备名称在每次重启时可能会发生变化,但设备 UUID 始终指向同一个卷,即使您在系统间移动磁盘也是如此。因此,我们建议您使用设备 UUID(而不是设备名称)来配置虚拟机重启时的自动装载。

  1. 创建当前 /etc/fstab 文件的备份。

    $ sudo cp /etc/fstab /etc/fstab.backup
    
  2. 使用 blkid 命令列出磁盘的 UUID。

    $ sudo blkid /dev/DEVICE_NAME
    

    请替换以下内容:

    • DEVICE_NAME:您要自动装载的磁盘的设备名称。如果您在磁盘上创建了分区表,请通过添加附加到设备名称的后缀来指定您要装载的分区。例如,如果 sdb 是磁盘的设备名称,sdb1 可能是分区的名称。
  3. 在文本编辑器中打开 /etc/fstab 文件,并创建一个包含 UUID 的条目。例如:

    UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

    请替换以下内容:

    • UUID_VALUE:在上一步的输出中列出的磁盘 UUID
    • MOUNT_DIR:装载了磁盘的目录
    • MOUNT_OPTION:指定操作系统在启动时无法装载地区永久性磁盘的情况下要执行的操作。如需了解有效值,请参阅 Linux fstab 文档中的第四个字段。如需让系统在磁盘不可用时也能启动,请使用 nofail 装载选项。
  4. 使用 cat 命令验证您的 /etc/fstab 条目内容正确:

    $ cat /etc/fstab
    
    LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
    UUID=d761bdc5-7e2a-4529-a393-b9aefdb623b6 /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    
    

如果您分离了此磁盘或从此虚拟机的启动磁盘创建快照,请修改 /etc/fstab 文件并移除此磁盘所对应的条目。即使将 MOUNT_OPTION 设置为 nofailnobootwait,您也应该使 /etc/fstab 文件与挂接到实例的设备保持同步,并在创建启动磁盘快照或分离磁盘前移除这些条目。

在 Windows 虚拟机上格式化和装载非启动磁盘

使用 Windows 磁盘管理在 Windows 虚拟机上格式化和装载新磁盘。

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击挂接了新空白虚拟机的虚拟机旁边的 RDP 按钮。浏览器会建立连到该实例的 RDP 连接。

  3. 右键点击 Windows“开始”按钮并选择磁盘管理

    右键点击 Windows“开始”按钮并选择“磁盘管理”。

  4. 磁盘管理会提示您为新磁盘选择分区方案。选择 GPT,然后点击确定

    在磁盘初始化窗口中选择分区方案。

  5. 磁盘初始化后,右键点击未分配的磁盘空间,然后选择新建简单卷

    从所挂接的磁盘创建新的简单卷。

  6. 按照新建简单卷向导中的说明配置新卷。您可以使用任何想要的分区格式,但对于本示例,请选择 NTFS。另外,请勾选执行快速格式化以加快格式化过程。 可以选择在分配单元大小字段中设置集群大小。集群大小会限制分区的大小上限。如果您稍后尝试调整地区永久性磁盘和此分区的大小,请牢记这一点。

    在“新建简单卷”向导中选择分区格式类型。

  7. 完成向导步骤并且完成卷格式化后,请检查所挂接磁盘列表中的 Status 列,确保新磁盘的状态为 Healthy

    检查磁盘是否处于联机状态且运行状况良好。

您现在可以将文件写入磁盘。

后续步骤