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


如果您将新的空白磁盘挂接到虚拟机,则必须先格式化并装载磁盘,然后才能使用磁盘。如果挂接的磁盘已包含数据,则必须先装载该磁盘,然后才能使用它。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

连接到虚拟机

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

    转到“虚拟机实例”页面

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

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

  1. 在终端中,使用为挂接磁盘创建的符号链接来确定要格式化的设备。

     ls -l /dev/disk/by-id/google-*
    

    未格式化的磁盘在名称中没有包含 -partN 的额外符号链接。

     google-extra-scsi-disk -> ../../sdb
     google-instance-2 -> ../../sda
     google-instance-2-part1 -> ../../sda1
     google-instance-2-part14 -> ../../sda14
     google-instance-2-part15 -> ../../sda15
     google-local-nvme-ssd-0 -> ../../nvme0n1
     google-local-nvme-ssd-1 -> ../../nvme0n2
    

    在此示例中,创建了名为 extra-scsi-disk 的新 Persistent 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
    
    /dev/DEVICE_NAME: UUID="a9e1c14b-f06a-47eb-adb7-622226fee060" BLOCK_SIZE="4096"
    TYPE="ext4" PARTUUID="593b3b75-108f-bd41-823d-b7e87d2a04d1"
    

    请替换以下内容:

    • 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
    
    UUID=6B33-A686 /boot/efi vfat defaults 0 0
    UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    
    

始终确保 /etc/fstab 文件与挂接到虚拟机的设备保持同步。如果要分离磁盘或从虚拟机的启动磁盘创建快照,请修改 /etc/fstab 文件并移除磁盘的条目。即使您将 MOUNT_OPTION 设置为 nofailnobootwait,也需要先创建条目才能创建启动磁盘快照或分离磁盘。

后续步骤