シンボリック リンクを使用して Linux VM にアタッチされているディスクにアクセスする


Linux OS を使用する仮想マシン(VM)にディスクをアタッチすると、Google Cloud によってディスクのシンボリック リンクが自動的に作成されます。Linux VM の Persistent Disk ボリュームまたはローカル SSD ディスクにアクセスするには、シンボリック リンクを使用します。これらのシンボリック リンクは予測可能で、再起動後も整合性が維持されます。Google Cloud は、VM にアタッチされているすべてのディスクのシンボリック リンクを /dev/disk/by-id 以下に作成します。

このドキュメントでは、VM にアタッチされているディスクの正しいシンボリック リンクを特定する方法について説明します。

制限事項

ローカル SSD ディスクを C3 または C3D VM にアタッチする場合、ローカル SSD ディスク用のシンボリック リンクを作成するために追加の手順が必要になる場合があります。これらの手順は、Google Cloud によって提供される次の公開イメージのいずれかを使用する場合にのみ必要です。

  • SLES 15 SP4 および SP5
  • SLES 12 SP4

これらの追加の手順は、ローカル SSD ディスクにのみ適用されます。Persistent Disk のボリュームに関して何もする必要はありません。

前のリストの公開イメージには、/dev/disk/by-id/google-local-nvme-ssd-N 形式のローカル SSD シンボリック リンクがありません。 これらのイメージには、デバイス情報を使用するシンボリック リンク(nvme-nvme.1ae0-6e766d655f636172642d7064-6e766d655f636172642d7064-00000001 など)のみが存在します。

これらの Linux イメージ向けにユーザー フレンドリーなシンボリック リンクを取得するには、udev ルールを更新し、インスタンスにスクリプトを追加する必要があります。

C3 と C3D でローカル SSD ディスクのシンボリック リンクをサポートするように udev ルールを更新する手順については、NVMe ディスクのトラブルシューティングをご覧ください。

シンボリック リンクを使用する代わりに、VM 上のローカル SSD ディスクにデバイス名(例: /dev/nvme0n1)を使用してアクセスできます。

シンボリック リンクは、VM の作成中または作成後にディスクが VM にアタッチされると /dev/disk/by-id に作成されます。シンボリック リンク名は次のように作成されます。

Persistent Disk と Google Cloud Hyperdisk

シンボリック リンクは次のルールを使用して作成されます。

  • ディスクの作成時にカスタム デバイス名を指定した場合: google-DEVICE_NAME
  • ディスクの作成時にカスタム デバイス名を指定しなかった場合:
    • ブートディスク: google-VM_NAME
    • 非ブートディスク: google-DISK_NAME

ディスクをフォーマットすると、名前の末尾に -partN がついたシンボリック リンクが追加されます。ここで、N はパーティション番号です(例: google-data-disk-part1)。

ローカル SSD ディスク

ローカル SSD のシンボリック リンクの形式は、ディスク インターフェースによって異なります。

  • SCSI: シンボリック リンクの名前は google-local-ssd-N のようになります。ここで、N は 0 から始まるローカル SSD ディスク番号です。
  • NVMe: シンボリック リンクの名前は google-local-nvme-ssd-N のようになります。ここで、N は 0 から始まる SSD 番号です。

ローカル SSD ディスクをフォーマットすると、シンボリック リンクが -partN とともに追加されます。ここで、N はパーティション番号です(例: google-local-nvme-ssd-0-part1)。

デバイスのシンボリック リンク

Compute Engine は、ディスクタイプとインターフェースに基づいて、ディレクトリに追加のシンボリック リンクを作成します(例: scsi-0Google_PersistentDisk_DEVICE_NAME)。これらのリンクは、前述のシンボリック リンクと同じ機能を実行します。

例 1: ローカル SSD がアタッチされた C3 VM

次のプロパティを持つ VM を作成したとします。

  • VM 名: instance-1
  • マシンシリーズ: C3
  • ディスク インターフェース タイプ: Persistent Disk とローカル SSD の両方の NVMe
  • 追加ディスク: なし
  • アタッチされたローカル SSD ディスク: 2
  • 使用されているカスタム デバイス名: なし

Compute Engine は、その VM に次のシンボリック リンクを作成します。

ls -l /dev/disk/by-id/google-*
google-instance-1 -> ../../nvme2n1
google-instance-1-part1 -> ../../nvme2n1p1
google-instance-1-part14 -> ../../nvme2n1p14
google-instance-1-part15 -> ../../nvme2n1p15
google-local-nvme-ssd-0 -> ../../nvme0n1
google-local-nvme-ssd-1 -> ../../nvme1n1

この例では、Persistent Disk のブートディスクのシンボリック リンクは google-instance-1 で、VM 名に基づいています。ブートディスクがフォーマットされ、オペレーティング システムがインストールされています。ブートディスクには、part1、part14、part 15 の 3 つのパーティションがあります。 アタッチされたローカル SSD ディスクはフォーマットされていないため、ローカル SSD ディスクごとに 1 つのシンボリック リンクのみが作成されました。

例 2: NVMe ローカル SSD と追加の Persistent Disk がアタッチされた N2 VM

次のプロパティを持つ VM を作成したとします。

  • VM 名: instance-2
  • マシンシリーズ: N2
  • ディスク インターフェース タイプ: Persistent Disk は SCSI、ローカル SSD は NVMe
  • 追加のディスク: extra-scsi-disk という名前の 1 つの Persistent Disk
  • アタッチされたローカル SSD ディスク: 2
  • 使用されているカスタム デバイス名: なし

その VM に次のシンボリック リンクが作成されます。

ls -l /dev/disk/by-id/google-*
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-0-part1 -> ../../nvme0n1p1
google-local-nvme-ssd-1 -> ../../nvme0n2

この例では、Persistent Disk のブートディスクのシンボリック リンクは google-instance-2 で、VM 名に基づいています。ブートディスクがフォーマットされ、OS イメージがインストールされています。ブートディスクには、part1、part14、part 15 の 3 つのパーティションがあります。 最初のローカル SSD ディスクも単一のパーティションでパーティション分割されているため、そのディスク パーティション用に作成されたシンボリック リンクがあります。 VM に追加された Persistent Disk には、ディスク名に基づくシンボリック リンク google-extra-scsi-disk があります。追加の Persistent Disk と 2 番目のローカル SSD ディスクはフォーマットされていないため、これらのディスクには 1 つのシンボリック リンクのみ表示されます。

次のステップ