m5d.xlarge
を使用してUbuntu16.04.5 LTS(xenial)を実行しているshutdown -r
EC2インスタンスを再起動しました。
再起動時に、/etc/fstab
で定義されたさまざまなドライブマウントが、最初に割り当てられたデバイスの割り当てと一致しませんでした。
これにより、さまざまなサービスが失敗しました。これらのサービスは、割り当てられた名前のドライブマウントに依存し、その名前に関連付けられた特定のデータが含まれています。
この場合、/data
には、通常/data
にあると予想されるものが含まれている必要があり、/foo
または/bar
または/whatever-else
などの他のドライブマウントは含まれていません。 。
lsblk
を実行すると、/etc/fstab
ファイルを手動で再定義して、新しいデバイスの割り当てを反映し、サービスをオンラインに戻すことができました。
問題:再起動するとデバイスラベルがドライブマウントにランダムに再割り当てされるので、サーバーの再起動が必要になったときにこの問題が再び発生する可能性があります。
質問:手動の(再)介入を必要とせずに、ドライブマウントとそれぞれのデバイスパスが再起動間で保持されるようにするにはどうすればよいですか?
編集:以下の回答で参照されているc5_m5_checks_script.sh
スクリプトは、次の情報を返します。
# ./c5_m5_checks_script.sh
------------------------------------------------
OK NVMe Module is installed and available on your instance
ERROR NVMe Module is not loaded in the initramfs image.
- Please run the following command on your instance to recreate initramfs:
# Sudo update-initramfs -c -k all
OK ENA Module with version 2.0.3K is installed and available on your instance
OK fstab file looks fine and does not contain any device names.
------------------------------------------------
OK
ファイルにデバイス名が含まれているため、最後のfstab
ステートメントがわかりません。または、Amazonが「デバイス名」という用語を使用しているということは、fstab
ファイルのデバイス名とは異なる意味を持っているのではないでしょうか。
問題の性質の具体的かつ具体的な例を示すために、次のような/etc/fstab
があります。
...
/dev/nvme2n1 /staging ext4 defaults,nofail 0 0
/dev/nvme3n1 /data ext4 defaults,nofail 0 0
...
ただし、lsblk
は、これら2つのボリュームが互いのデバイスIDにマウントされていることを示しています。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
nvme2n1 259:0 0 1T 0 disk /staging
nvme3n1 259:3 0 512G 0 disk /data
実際には、nvme2n1
は1Tボリューム/data
であり、nvme3n1
は512Gボリューム/staging
です。
再起動の間に不明なことが発生し、基になるドライブが使用可能なデバイスIDの順列に再割り当てされます。
これを修正する唯一の方法は、これら2つのボリュームを手動でumount
し、/etc/fstab
を編集して、もう一度mount
することです。
報奨金の質問:/etc/fstab
で別の永続的な識別子を使用できるようにする永続的な修正はありますか?これは再起動間で一貫して持続しますか?
AWSには、/ etc/fstab内のEBSボリュームデバイス名をUUID値に変換するツールがあります: c5_m5_checks_script.sh
スクリプトは、NVMeモジュールがOSイメージにロードされていることも確認しますが、それが存在しない場合、新しいインスタンスタイプは起動されませんでした。
LABEL=
でUUID=
または/etc/fstab
を使用しないのはなぜですか?
blkid
を使用して、対応するラベルとUUIDを見つけることができます。もちろん、man fstab
のさらに詳しい情報:
PARTUUID =およびPARTLABEL =を使用することもできます。これらのパーティション識別子は、たとえばGUIDパーティションテーブル(GPT)でサポートされています。
デバイス識別子の詳細については、mount(8)、blkid(8)、またはlsblk(8)を参照してください。
Mount(8)はUUIDを文字列として使用することに注意してください。 UUIDの文字列表現は、小文字に基づいている必要があります。