このドキュメントでは、Linux VM で永続的なデバイス命名規則を使用する方法について説明します。
Linux オペレーティング システムを使用する VM の場合、次のような手順を行うとデバイス名(/dev/sda
など)が変更される場合があります。
- VM の起動と停止
- ディスクの切断と再アタッチ
- マシンタイプの変更
VM の起動時またはデバイスのアタッチ時に使用可能な範囲からデバイス名が割り当てられるため、このデバイス名の変更が起こります。デバイスのアタッチを解除するか、VM を停止すると、デバイス名が解放されます。デバイスが再アタッチされるか、VM が再起動されると、使用可能な範囲から新しいデバイス名が割り当てられます。Linux カーネルでは、再起動ごとのデバイスの順序が保証されません。
デバイス名の変更によって、元のデバイス名に依存するアプリケーションやスクリプトが正常に動作しなくなる場合や、再起動後に VM が起動しない場合があります。
この問題を回避するため、Linux VM 上のディスクやパーティションを参照する場合は、永続的なデバイス命名規則を使用することをおすすめします。シンボリック リンクを使用することもできます。
始める前に
- Linux オペレーティング システムのデバイス管理について、次の点を確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
nvme0n1
- Persistent Disknvme0n1p1
nvme0n1p2
nvme0n2
- Hyperdisknvme0n2p1
nvme0n2p2
nvme1n1
- 最初のローカル SSDnvme2n1
- 2 番目のローカル SSD- ラベルを使用する。このオプションを使用するには、ファイル システムがラベルをサポートしていること、またディスク パーティションにラベルを追加することが必要です。
- パーティションまたはディスクの UUID を使用する。UUID は、パーティション テーブルを使用してディスクが作成されるときに生成され、その UUID はパーティションごとに一意です。
- Persistent Disk または Google Cloud Hyperdisk の永続ディスク ID(
/dev/disk/by-id
)、またはディスクのリソース名に基づくシンボリック リンクを使用する。 - VM に接続します。
ディスクのデバイス名がわからない場合は、シンボリック リンクを使用してディスク デバイス名を確認できます。
ls -l /dev/disk/by-id/google-*
出力は次のようになります。
lrwxrwxrwx 1 root root 9 Oct 23 15:58 /dev/disk/by-id/google-my-vm -> ../../sda lrwxrwxrwx 1 root root 10 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Oct 23 15:58 /dev/disk/by-id/google-my-vm-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Oct 23 15:58 /dev/disk/by-id/google-my-vm-app-data -> ../../nvme0n1
次のいずれかのコマンドを実行して、ディスクのパーティションの UUID を取得します。
blkid
sudo blkid -s UUID
出力は次のようになります。
/dev/sda1: UUID="4f570f2d-fffe-4c7d-8d8f-af347af7612a" /dev/sda15: UUID="E0B2-DFAF" /dev/nvme0n1: UUID="9e617251-6a92-45ff-ba40-700a9bdeb03e"
ls -l
sudo ls -l /dev/disk/by-uuid/
出力は次のようになります。
lrwxrwxrwx 1 root root 10 Sep 22 18:12 4f570f2d-fffe-4c7d-8d8f-af347af7612a -> ../../sda1 lrwxrwxrwx 1 root root 13 Sep 22 18:15 9e617251-6a92-45ff-ba40-700a9bdeb03e -> ../../nvme0n1 lrwxrwxrwx 1 root root 11 Sep 22 18:12 E0B2-DFAF -> ../../sda15
/etc/fstab
ファイルにデバイスの UUID のエントリを追加します。UUID=9e617251-6a92-45ff-ba40-700a9bdeb03e /data ext4 defaults 0 0
この例では、
/data
はマウント ポイント、ext4
はファイル システムの種類です。mount -av
を実行して、デバイスが正しくマウントされていることを確認します。sudo mount -av
デバイスが正常にマウントされていると、出力は次のようになります。
/ : ignored /boot/efi : already mounted mount: /data does not contain SELinux labels. You just mounted an file system that supports labels which does not contain labels, onto an SELinux box. It is likely that confine applications will generate AVC messages and not be allowed access to this filesystem. For more details see restorecon(8) and mount(8). /data : successfully mounted
- VM に接続します。
次のコマンドを実行して、ディスクの ID を取得します。
sudo ls -lh /dev/disk/by-id/google-*
出力は次のようになります。
lrwxrwxrwx. 1 root root 9 May 16 17:34 google-disk-2 -> ../../sdb lrwxrwxrwx. 1 root root 9 May 16 09:09 google-persistent-disk-0 -> ../../sda lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part1 -> ../../sda1 lrwxrwxrwx. 1 root root 10 May 16 09:09 google-persistent-disk-0-part2 -> ../../sda2
NVME
ディスクの場合、出力は次のようになります。lrwxrwxrwx 1 root root 13 Jun 1 10:27 google-disk-3 -> ../../nvme0n2 lrwxrwxrwx 1 root root 13 Jun 1 10:25 google-t2a -> ../../nvme0n1 lrwxrwxrwx 1 root root 15 Jun 1 10:25 google-t2a-part1 -> ../../nvme0n1p1 lrwxrwxrwx 1 root root 16 Jun 1 10:25 google-t2a-part15 -> ../../nvme0n1p15
/etc/fstab
ファイルにシンボリック リンクを追加します。/dev/disk/by-id/google-disk-2 /data ext4 defaults 0 0
mount -av
を実行して、デバイスが正しくマウントされていることを確認します。sudo mount -av
デバイスが正常にマウントされていると、出力は次のようになります。
/ : ignored /boot/efi : already mounted mount: /data does not contain SELinux labels. You just mounted an file system that supports labels which does not contain labels, onto an SELinux box. It is likely that confine applications will generate AVC messages and not be allowed access to this file system. For more details see restorecon(8) and mount(8). /data : successfully mounted
Linux VM でのデバイスの命名
VM にアタッチされているディスクの Linux デバイス名は、ディスクの作成時に選択したインターフェースによって異なります。
lsblk
オペレーティング システム コマンドを使用してディスク デバイスを表示すると、NVMe インターフェースにアタッチされているディスクの接頭辞nvme
と、SCSI インターフェースにアタッチされているディスクの接頭辞sd
が表示されます。ディスク番号や NVMe コントローラの順序は、VM を再起動しても予測不可能であり、整合性がありません。初回起動時に永続ディスクは
nvme0n1
(SCSI の場合はsda
)になります。2 回目の起動時、同じ永続ディスクのデバイス名はnvme2n1
またはnvme0n3
(SCSI の場合はsdc
)になります。アタッチされているディスクにアクセスする際は、代わりに
/dev/disk/by-id/
で作成したシンボリック リンクを使用する必要があります。これらの名前は再起動後も維持されます。シンボリック リンクの詳細については、VM にアタッチされているディスクのシンボリック リンクをご覧ください。SCSI デバイス名
SCSI ディスクがアタッチされたデバイスの形式は、最初にアタッチされたディスクでは
sda
となります。ディスク パーティションはsda1
と表示されます。追加するディスクごとに、sdb
やsdc
などの連続した文字が使用されます。sdz
に達すると、次に追加されるディスクの名前は、sdaa
、sdab
、sdac
のようになり、最大sddx
まで続きます。NVMe デバイス名
Linux オペレーティング システムで NVMe ディスクがアタッチされたデバイスの形式は、
nvmenumbernnamespace
となります。number
は、NVMe ディスク コントローラ番号を表します。namespace は、NVMe ディスク コントローラによって割り当てられた NVMe 名前空間 ID です。パーティションの場合、p n がデバイス名に追加されます。n は、n 番目のパーティションを示す 1 から始まる数字です。コントローラ番号は
0
から始まります。コンピューティング インスタンスにアタッチされた単一の NVMe ディスクのデバイス名はnvme0n1
です。ほとんどのマシンタイプでは、単一の NVMe ディスク コントローラが使用されます。NVMe デバイス名はnvme0n1
、nvme0n2
、nvme0n3
のようになります。第 3 世代のマシンシリーズ以降のインスタンスにアタッチされたローカル SSD ディスクには、ディスクごとに個別の NVMe コントローラがあります。これらの VM では、ローカル SSD NVMe 接続デバイス名は
nvme0n1
、nvme1n1
、nvme2n1
のようになります。アタッチされるローカル SSD ディスクの数は、VM のマシンタイプによって異なります。第 3 世代以降のマシンシリーズに基づく Compute インスタンスは、Persistent Disk と Google Cloud Hyperdisk の両方とローカル SSD ディスクに NVMe を使用します。各 VM には、Persistent Disk と Hyperdisk 用に 1 つの NVMe コントローラと、各ローカル SSD ディスク用に 1 つの NVMe コントローラがあります。Persistent Disk と Hyperdisk NVMe コントローラは、アタッチされているすべてのディスクに対して単一の NVMe 名前空間を持ちます。そのため、1 つの Persistent Disk、1 つの Hyperdisk(それぞれ 2 つのパーティション)、2 つの未フォーマットのローカル SSD ディスクを備えた第 3 世代のマシンシリーズ インスタンスでは、次のデバイス名を使用します。
永続的なデバイス命名規則を使用する
永続デバイス名を構成するには、
fstab
ファイルでディスク デバイスのマウント ポイント名を割り当てます。永続デバイス名を構成するには、次の 3 つの方法があります。Linux VM には、パーティション UUID またはシンボリック リンクを使用することをおすすめします。
パーティション UUID
ディスクの UUID を確認するには、次の操作を行います。
永続ディスク ID
永続ディスク ID またはシンボリック リンクを使用してディスク デバイス名を確認するには、次の手順を完了します。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-11-21 UTC。
-