このページの手順に沿って、非ブートディスクを作成して仮想マシン(VM)にアタッチします。
始める前に
gdcloud
コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud
CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud
または kubectl
CLI を使用し、オペレーティング システム(OS)環境が必要です。
kubeconfig ファイルのパスを取得する
Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。
Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して
MANAGEMENT_API_SERVER
を置き換えます。
権限とアクセス権をリクエストする
このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者ロールが必要です。VM が存在するプロジェクトの名前空間にプロジェクト VirtualMachine 管理者(project-vm-admin
)ロールがあることを確認する手順に沿って操作します。
GDC コンソールまたは gdcloud CLI を使用する VM オペレーションの場合は、プロジェクト IAM 管理者に、プロジェクトの VirtualMachine 管理者ロールとプロジェクト閲覧者(project-viewer
)ロールの両方を割り当てるよう依頼します。
ディスクを VM にアタッチする
非ブートディスクを作成して VM にアタッチします。追加するディスクごとに、カスタム イメージまたは空のディスクを指定できます。複数のディスクを一度に VM に追加できます。
コンソール
ナビゲーション メニューで、[仮想マシン] > [インスタンス] をクリックします。
VM のリストで、VM 名をクリックして詳細を表示します。
[新しいディスクを追加] をクリックします。
確認ダイアログで [停止] をクリックして VM を停止します。
VM が停止するまで数分待ちます。
[更新] をクリックします。
VM が停止状態になったら、[新しいディスクを追加] をもう一度クリックします。
[ディスクの追加] ダイアログで、新しいディスクまたは既存のディスクを選択します。
新しいディスクをプロビジョニングするには、[新しいディスク] タブをクリックします。
- [ディスク名] フィールドに、プロジェクトに固有の新しいディスク名を入力します。
- [サイズ] フィールドに、10 ~ 65, 536 GiB の範囲でディスクサイズを入力します。たとえば、10 GiB などです。
- [削除ルール] セクションで、[ディスクを維持] または [ディスクを削除] をクリックします。
既存のディスクを選択するには、[既存のディスク] タブをクリックします。
- [ディスク] リストで、ディスクを選択します。
- [削除ルール] セクションで、[ディスクを維持] または [ディスクを削除] をクリックします。
[保存] をクリックします。ディスクが VM のディスクのリストに表示されます。
API
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
既存の
VirtualMachine
spec.disks
にVirtualMachineDisk
を追加します。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
など)。
非ブートディスクをフォーマットしてマウントする
ディスクを VM にアタッチしたら、VM 内でアクセスできるようにするために必要な次の手順を行います。
VM に接続する
ディスクをフォーマットする
シリアル番号でインスタンスにアタッチされているディスクを一覧表示し、フォーマットしてマウントするディスクを見つけます。
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
です。このリストからディスクのシリアル番号を確認します。
シリアル番号リストに影響する可能性のある重要な状況に応じた機能の動作:
virtualMachineDiskRef.name
値が 20 文字より長い場合、最初の 20 文字のみがシリアル番号として使用されます。- 最初の 20 文字が同じディスクが 2 つある場合、最初のディスクだけにシリアル番号が割り当てられます。
ディスクをフォーマットします。
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
を指定して、使用可能なディスク容量をすべて使用します。
ディスクをマウントする
新しいディスクのマウント ポイントにするディレクトリを作成します。任意のディレクトリを使用できます。次の例では、
/mnt/disks/
にディレクトリを作成します。sudo mkdir -p /mnt/disks/MOUNT_DIR
MOUNT_DIR
は、ディスクをマウントするディレクトリに置き換えます。ディスクをインスタンスにマウントし、discard オプションを有効にします。
sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
次のように置き換えます。
DISK_ID
は、マウントするディスクのシリアル番号に置き換えます。MOUNT_DIR
は、ディスクをマウントするディレクトリに置き換えます。
省略可: ディスクに読み取り権限と書き込み権限を構成します。次のコマンドは、すべてのユーザーにディスクへの書き込みアクセス権
a+w
を付与します。sudo chmod a+w /mnt/disks/MOUNT_DIR
省略可: VM 再起動時に自動マウントを構成する - 汎用一意識別子(UUID)または起動スクリプトを使用します。
VM 再起動時に自動マウントを構成する - ディスク UUID
ディスクを /etc/fstab
ファイルに追加して、VM の再起動時にディスクが自動的にマウントされるようにします。オペレーティング システム(OS)では、再起動するたびにデバイス名が変わりますが、ディスクをシステム間で移動してもデバイス UUID は常に同じボリュームを指します。そのため、VM の再起動時に自動マウントを構成する場合は、常にデバイスの UUID を使用してください。
現在の
/etc/fstab
ファイルのバックアップを作成します。sudo cp /etc/fstab /etc/fstab.backup
ディスクの 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_NAME
はsdb1
になります。テキスト エディタで
/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 の動作を指定します)。
/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_OPTION
が nofail
または nobootwait
に設定されている場合でも、VM にアタッチされているデバイスとの /etc/fstab
ファイルの同期を維持してください。ブートディスクのスナップショットを作成する前、またはディスクを切断する前に、これらのエントリを削除します。
VM の再起動時に自動マウントを構成する - VM 起動スクリプト
ディスクのマウントのコマンドを起動スクリプトに追加して、起動スクリプトを使用して再起動ごとにディスクをマウントすることもできます。ディスクをマウントするスクリプトを追加する前に、ディスクをフォーマットするのコマンドを使用してディスクをフォーマットします。
起動スクリプトのシークレットを作成します。
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
起動スクリプトを 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
起動スクリプトの構成の詳細については、こちらをご覧ください。