web-dev-qa-db-ja.com

再起動の間にAWSEC2インスタンスのドライブデバイスパスを保持する方法

m5d.xlargeを使用してUbuntu16.04.5 LTS(xenial)を実行しているshutdown -rEC2インスタンスを再起動しました。

再起動時に、/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で別の永続的な識別子を使用できるようにする永続的な修正はありますか?これは再起動間で一貫して持続しますか?

2
Alex Reynolds

AWSには、/ etc/fstab内のEBSボリュームデバイス名をUUID値に変換するツールがあります: c5_m5_checks_script.sh

スクリプトは、NVMeモジュールがOSイメージにロードされていることも確認しますが、それが存在しない場合、新しいインスタンスタイプは起動されませんでした。

4
Brad Patterson

LABEL=UUID=または/etc/fstabを使用しないのはなぜですか?

blkidを使用して、対応するラベルとUUIDを見つけることができます。もちろん、man fstabのさらに詳しい情報:

PARTUUID =およびPARTLABEL =を使用することもできます。これらのパーティション識別子は、たとえばGUIDパーティションテーブル(GPT)でサポートされています。

デバイス識別子の詳細については、mount(8)、blkid(8)、またはlsblk(8)を参照してください。

Mount(8)はUUIDを文字列として使用することに注意してください。 UUIDの文字列表現は、小文字に基づいている必要があります。

1
poige