このドキュメントでは、Linux VM で永続的なデバイス命名規則を使用する方法について説明します。
Linux オペレーティング システムを使用する VM の場合、次のような手順を行うとデバイス名(/dev/sda
など)が変更される場合があります。
- VM の起動と停止
- ディスクの切断と再アタッチ
- マシンタイプの変更
VM の起動時またはデバイスのアタッチ時に使用可能な範囲からデバイス名が割り当てられるため、このデバイス名の変更が起こります。デバイスのアタッチを解除するか、VM を停止すると、デバイス名が解放されます。デバイスが再アタッチされるか、VM が再起動されると、使用可能な範囲から新しいデバイス名が割り当てられます。Linux カーネルでは、再起動ごとのデバイスの順序が保証されません。
デバイス名の変更によって、元のデバイス名に依存するアプリケーションやスクリプトが正常に動作しなくなる場合や、再起動後に VM が起動しない場合があります。
この問題を回避するため、Linux VM 上のディスクやパーティションを参照する場合は、永続的なデバイス命名規則を使用することをおすすめします。シンボリック リンクを使用することもできます。
始める前に
- Linux オペレーティング システムのデバイス管理について、次の点を確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。
gcloud init
- デフォルトのリージョンとゾーンを設定します。
-
永続的なデバイス命名規則を使用する
永続デバイス名を構成するには、fstab
ファイルでディスク デバイスのマウント ポイント名を割り当てます。永続デバイス名を構成するには、次の 3 つの方法があります。
- ラベルを使用する。このオプションを使用するには、ファイル システムがラベルをサポートしていること、またディスク パーティションにラベルを追加することが必要です。
- パーティションまたはディスクの UUID を使用する。UUID は、パーティション テーブルを使用してディスクが作成されるときに生成され、その UUID はパーティションごとに一意です。
- Persistent Disk または Google Cloud Hyperdisk の永続ディスク ID(
/dev/disk/by-id
)、またはディスクのリソース名に基づくシンボリック リンクを使用する。
Linux VM には、パーティション UUID またはシンボリック リンクを使用することをおすすめします。
パーティション UUID
ディスクの UUID を確認するには、次の操作を行います。
- 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
永続ディスク ID
永続ディスク ID またはシンボリック リンクを使用してディスク デバイス名を確認するには、次の手順を完了します。
- 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