非決定的なハードドライブ割り当てをどのように処理しますか?

非決定的なハードドライブ割り当てをどのように処理しますか?

最近、Arch Linux コンピュータに別のハードドライブをインストールしました。最初の起動ではすべて正常に動作しました。しかし、次にコンピュータを再起動したときにエラーが発生しました/dev/sda2 not found

基本的に、私のブート ハードドライブはsda、 の場合もあれば の場合もありますsdb。完全にランダムなようで、BIOS でランダムでないようにするオプションが見つかりません。どうすれば修正できますか?

答え1

2 つのハードディスクが異なるインターフェイス上にあり、異なるドライバーによって制御されている場合、Linux はドライバーが初期化される順序で名前を付けます。初期化が並行して行われると、デバイス名の割り当てが変化する可能性があります。

デバイス名は、ユーデブあなたの問題は Arch wiki に記載されていますが、解決策はそこにはないようです。

私は Arch に詳しくないので、Ubuntu でこの問題がどのように解決されるかを説明します。基盤となる機能は Linux カーネルによって提供されており、同じですが、Arch ではこれらの機能が異なって動作するようにする構成設定がある可能性があります。

ブートローダで/dev/sda2ルートデバイス () 設定として使用する代わりに、次の構文を使用して UUID またはラベルを使用できます。root=

… /boot/vmlinuz root=UUID=01234567-89ab-cdef-0123-456789abcdef ro …
… /boot/vmlinuz root=LABEL=mylabel ro …

UUID はファイルシステムを一意に識別するため、 にあるファイルシステムの UUID が必要です/dev/sda2。Ubuntu では、/dev/disk/by-uuid/01234567-89ab-cdef-0123-456789abcdefは へのシンボリック リンクです/dev/sda2。ファイルシステムにラベルがある場合 (手動で設定し、一意性を強制するかどうかはユーザー次第です)、 の下にシンボリック リンクがあります/dev/disk/by-label。ラベルと UUID リンクは、次の udev ルールによって生成されます。

ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"

答え2

を見てみましょう永続的なブロックデバイスの命名

個人的には、ラベルは UUID の一意性を提供しながら人間が読めるため、最適だと思います。

最終的に次のような fstab が作成されます。

LABEL=boot /boot ext2 defaults 0 1
LABEL=swap swap swap defaults 0 0
LABEL=root / ext4 defaults 0 1

関連情報