永続ディスクを VM に追加する

このページの手順に沿って、非ブートディスクを作成して仮想マシン(VM)にアタッチします。

始める前に

gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

kubeconfig ファイルのパスを取得する

Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

  1. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  2. これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して MANAGEMENT_API_SERVER を置き換えます。

権限とアクセス権をリクエストする

このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者ロールが必要です。VM が存在するプロジェクトの名前空間にプロジェクト VirtualMachine 管理者(project-vm-admin)ロールがあることを確認する手順に沿って操作します。

GDC コンソールまたは gdcloud CLI を使用する VM オペレーションの場合は、プロジェクト IAM 管理者に、プロジェクトの VirtualMachine 管理者ロールとプロジェクト閲覧者(project-viewer)ロールの両方を割り当てるよう依頼します。

ディスクを VM にアタッチする

非ブートディスクを作成して VM にアタッチします。追加するディスクごとに、カスタム イメージまたは空のディスクを指定できます。複数のディスクを一度に VM に追加できます。

コンソール

  1. ナビゲーション メニューで、[仮想マシン] > [インスタンス] をクリックします。

  2. VM のリストで、VM 名をクリックして詳細を表示します。

  3. [新しいディスクを追加] をクリックします。

  4. 確認ダイアログで [停止] をクリックして VM を停止します。

  5. VM が停止するまで数分待ちます。

  6. [更新] をクリックします。

  7. VM が停止状態になったら、[新しいディスクを追加] をもう一度クリックします。

  8. [ディスクの追加] ダイアログで、新しいディスクまたは既存のディスクを選択します。

    • 新しいディスクをプロビジョニングするには、[新しいディスク] タブをクリックします。

      1. [ディスク名] フィールドに、プロジェクトに固有の新しいディスク名を入力します。
      2. [サイズ] フィールドに、10 ~ 65, 536 GiB の範囲でディスクサイズを入力します。たとえば、10 GiB などです。
      3. [削除ルール] セクションで、[ディスクを維持] または [ディスクを削除] をクリックします。
    • 既存のディスクを選択するには、[既存のディスク] タブをクリックします。

      1. [ディスク] リストで、ディスクを選択します。
      2. [削除ルール] セクションで、[ディスクを維持] または [ディスクを削除] をクリックします。
  9. [保存] をクリックします。ディスクが VM のディスクのリストに表示されます。

  10. VM を再起動します

API

  1. VirtualMachineDisk を作成します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: NON_BOOT_BLANK_DISK
    spec:
      size: NON_BOOT_BLANK_DISK_SIZE
    EOF
    
  2. VM を停止します

  3. 既存の VirtualMachine spec.disksVirtualMachineDisk を追加します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
    

    テキスト エディタで次の内容を編集します。

    ...
    disks:
    - virtualMachineDiskRef:
        name: VM_BOOT_DISK_NAME
        boot: true
    - virtualMachineDiskRef:
        name: NON_BOOT_BLANK_DISK
        autoDelete: false
    ...
    

    次の定義を使用して、変数を置き換えます。

    変数定義
    MANAGEMENT_API_SERVER Management API サーバーの kubeconfig ファイル。
    PROJECT VM を作成する Google Distributed Cloud エアギャップ(GDC)プロジェクト。
    VM_NAME新しい VM の名前。
    VM_BOOT_DISK_NAME新しい VM ブートディスクの名前。
    NON_BOOT_BLANK_DISK追加ディスクの名前。
    NON_BOOT_BLANK_DISK_SIZE追加ディスクのサイズ(20G など)。
  4. VM を起動します

非ブートディスクをフォーマットしてマウントする

ディスクを VM にアタッチしたら、VM 内でアクセスできるようにするために必要な次の手順を行います。

VM に接続する

VM に SSH 接続します

ディスクをフォーマットする

  1. シリアル番号でインスタンスにアタッチされているディスクを一覧表示し、フォーマットしてマウントするディスクを見つけます。

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

    この出力例では、ディスク名がシリアル番号として表示されています。

       total 0
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
    

    各行の矢印(->)の後に続く情報は、ディスク デバイス名を示します。たとえば、scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb では、シリアル番号は scsi-SQEMU_QEMU_HARDDISK_vm-disk-dataデバイス名は sdb です。

  2. このリストからディスクのシリアル番号を確認します。

    シリアル番号リストに影響する可能性のある重要な状況に応じた機能の動作:

    • virtualMachineDiskRef.name 値が 20 文字より長い場合、最初の 20 文字のみがシリアル番号として使用されます。
    • 最初の 20 文字が同じディスクが 2 つある場合、最初のディスクだけにシリアル番号が割り当てられます。
  3. ディスクをフォーマットします。

   sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
  • DISK_ID は、フォーマットするディスクのシリアル番号に置き換えます。
  • この例では、scsi-SQEMU_QEMU_HARDDISK_vm-disk-data を指定し、パーティション テーブルを作成せずにディスク全体をフォーマットします。

ディスクのパフォーマンスを最大限に引き出すには、-E フラグで推奨フォーマット オプションを使用します。セカンダリ ディスクでルート ボリューム用に領域を確保する必要がないため、-m 0 を指定して、使用可能なディスク容量をすべて使用します。

ディスクをマウントする

  1. 新しいディスクのマウント ポイントにするディレクトリを作成します。任意のディレクトリを使用できます。次の例では、/mnt/disks/ にディレクトリを作成します。

    sudo mkdir -p /mnt/disks/MOUNT_DIR
    

    MOUNT_DIR は、ディスクをマウントするディレクトリに置き換えます。

  2. ディスクをインスタンスにマウントし、discard オプションを有効にします。

    sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    

    次のように置き換えます。

    • DISK_ID は、マウントするディスクのシリアル番号に置き換えます。
    • MOUNT_DIR は、ディスクをマウントするディレクトリに置き換えます。
  3. 省略可: ディスクに読み取り権限と書き込み権限を構成します。次のコマンドは、すべてのユーザーにディスクへの書き込みアクセス権 a+w を付与します。

    sudo chmod a+w /mnt/disks/MOUNT_DIR
    
  4. 省略可: VM 再起動時に自動マウントを構成する - 汎用一意識別子(UUID)または起動スクリプトを使用します。

VM 再起動時に自動マウントを構成する - ディスク UUID

ディスクを /etc/fstab ファイルに追加して、VM の再起動時にディスクが自動的にマウントされるようにします。オペレーティング システム(OS)では、再起動するたびにデバイス名が変わりますが、ディスクをシステム間で移動してもデバイス UUID は常に同じボリュームを指します。そのため、VM の再起動時に自動マウントを構成する場合は、常にデバイスの UUID を使用してください。

  1. 現在の /etc/fstab ファイルのバックアップを作成します。

      sudo cp /etc/fstab /etc/fstab.backup
    
  2. ディスクの UUID を一覧表示します。

      sudo blkid /dev/DEVICE_NAME
    

    出力例は、ディスクの accc19c5-d0d6-4157-9672-37d4e1d48eb5 の UUID を示しています。

      /dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"
    

    DEVICE_NAME は、自動マウントするディスクのデバイス名です。ディスクにパーティション テーブルを作成した場合は、デバイス名の接尾辞としてマウントするパーティションを指定します。たとえば、sdb がディスク デバイス名で、パーティション 1 をマウントする場合は、DEVICE_NAMEsdb1 になります。

  3. テキスト エディタで /etc/fstab ファイルを開き、UUID を含むエントリを作成します。

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

    次のように置き換えます。

    • UUID_VALUE(ディスク UUID)。UUID を一覧表示するコマンドの出力として表示されます。
    • MOUNT_DIR は、ディスクをマウントしたディレクトリに置き換えます。
    • MOUNT_OPTION(OS の MOUNT_OPTION 値を指定します。ブート時にディスクをマウントできない場合の OS の動作を指定します)。
  4. /etc/fstab エントリが正しいことを確認します。

      cat /etc/fstab
    

    出力例を次に示します。

      LABEL=cloudimg-rootfs /    ext4   defaults    0 1
      LABEL=UEFI    /boot/efi   vfat    umask=0077  0 1
      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

このディスクを切断する場合、またはこの VM のブートディスクからスナップショットを作成する場合は、/etc/fstab ファイルを編集して、このディスクのエントリを削除します。MOUNT_OPTIONnofail または nobootwait に設定されている場合でも、VM にアタッチされているデバイスとの /etc/fstab ファイルの同期を維持してください。ブートディスクのスナップショットを作成する前、またはディスクを切断する前に、これらのエントリを削除します。

VM の再起動時に自動マウントを構成する - VM 起動スクリプト

ディスクのマウントのコマンドを起動スクリプトに追加して、起動スクリプトを使用して再起動ごとにディスクをマウントすることもできます。ディスクをマウントするスクリプトを追加する前に、ディスクをフォーマットするのコマンドを使用してディスクをフォーマットします。

  1. 起動スクリプトのシークレットを作成します。

    cat <<EOF >>mount-disk-script
    #!/bin/bash
    mkdir -p /mnt/disks/MOUNT_DIR
    mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    EOF
    
    kubectl create secret -n PROJECT generic VM_NAME-mount-script --from-file=script=mount-disk-script
    
    rm mount-disk-script
    
  2. 起動スクリプトを VM に追加します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
    

    spec.startupScripts を編集して、シークレット名を含めます。

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachine
    metadata:
    name: VM_NAME
    namespace: PROJECT
    spec:
    …
    startupScripts:
    - name: mount-script
      scriptSecretRef:
        name: VM_NAME-mount-script
    

起動スクリプトの構成の詳細については、こちらをご覧ください。