USBが/dev/sdbの代わりに/dev/sdaに設定されました。

USBが/dev/sdbの代わりに/dev/sdaに設定されました。

私はユーザーの介入なしにkickstartファイルを使用してRed Hatインストーラ(RHEL6.5)を起動しようとしました。キックスタートファイルを正しく検索します/dev/sdb/fs.cfgが、USBがキックスタートファイルとして認識されるため、/dev/sda実際にはそこにあります/dev/sda/fs.cfg。インストーラはこのターゲットを手動で指定できますが、キックスタートファイルの残りの部分はプライマリハードドライブに依存しますsda。スタートアップファイルを編集せずにこれをやりたいのですが、必ず必要な作業なので、喜んで行います。

sdbカーネルがUSBをHDとして認識するように強制する方法はありますかsda? (カーネルが難読化に責任があると仮定していますが、わかりません。)外部ドライブ(USB)を選択し、内部ドライブ(HD)を強制するのはsda奇妙です。sdb.

注:私の質問は次のようによく似ています。これ、私の起動ファイルがHDに絶対に依存していることを除いて、sda

この問題は、RHEL5.XインストーラではなくRHEL6.5インストーラでのみ発生します(以前のバージョンのRHEL6.Xを使用したことはありません)。私が本当に知りたいのは、バージョンごとに変わる理由です。

ベストアンサー1

いいですね。起動プロセスは次のとおりです。

  • ファームウェア>ブートローダおそらく>カーネル${parameters}> initramfs>ユーザースペースおそらく

Redhat インストールディスクデラクールスクリプトシステムは、initramfsとそのシステムで構築および構成されています。Pythonインストールシステムはエンドユーザースペースを構成します。

デバイス設定処理を担当しますudev。たとえば、でデバイス名を指定します/dev。しかし、これはほとんどいつも起こります二重init- initramfsに一度、内部的にターゲットルートデバイスを見つけてインストールする準備ができたらもう一度devfs

仕組みは次のとおりです。

  • ブートローダー(またはファームウェア)オプションのパラメーターセットとオプションのinitramfsイメージを使用してカーネルを呼び出します。パラメータセットが保存さ/proc/cmdlineれ、カーネルは理解できないパラメータを無視します。

  • initramfsは動作するLinuxユーザー空間です。呼び出し時に渡されたイメージからコンテンツを/抽出したか、コンパイルしたかは関係ありません。カーネル 2.6 以降は、常に Linux カーネルがインストールした最初の動作ルートファイルシステムです。この時点から、Linuxカーネルはすべてをユーザースペースに渡します。

    • 通常(redhatのdracutも同様です)initramfsには、ルートデバイスを見つけて独自にマウントするために必要なものだけが含まれています。通常含まれるのは、ターゲットbusyboxルートデバイスをインストールするために必要なカーネルモジュールだけです。

    • おそらくudevこれを行う必要があるため、通常はudev含まれており、独自の小さなルールセットがあります。

    • 前述したように、initramfsはそれ自体が小さく、完全なLinuxルートファイルシステムです。完全なものは次のとおりです/bin /etc /dev /new_root /proc /sys init。通常、これらのディレクトリの内容には特別な点はありません。ほとんど常にa/bin/shとanがあります/etc/fstab

    • ほとんどは解釈可能なカーネルパラメータをinit解析します。/proc/cmdline非常に一般的なものはroot=/dev/somediskまたはroot=UUID=somediskUUIDまたはですroot=LABEL=somedisklabel。これらのパラメータの解釈は、カーネルまたは後で実行される最終パラメータではなくinitinitramfsです。root=...init(最後はおそらく他のものをよく説明しますが)。このパラメータを受け入れて、次の場所にインストールします。/new_root (または以前にインストールの準備に使用された名前switchrootudevinitramfsに含まれている場合、initramfsルール・セットはターゲット・ディスク項目の名前の指定/dev/...方法を決定しますが、これは変更される可能性があります。

    • initramfsがデバイスをinit正常に見つけてマウントすると、通常/new_rootその中にあるものが見つかります。したがって、そのプログラムは何でもpid 1になります。通常、以下を実行する提供されたプログラムを使用してこれを行います。しばらくインストールしている間exec/new_root/bin/initswitch_rootbusyboxexec/new_root 超過 /。プロセスは次のトピックで説明されています。したがって、カーネル文書:

    しかし initramfsはいrootfs: pivot_rootrootfs を使用することも、umount使用することもできません。代わりに、rootfsのすべてのエントリを削除してスペースを解放してください。( find -xdev / -exec rm '{}' ';')、新しいルートでrootfsを上書き( cd /newmount; mount --move . /; chroot .)stdin/stdout/stderr新規/dev/consoleおよびexec新規に添付されますinit

  • 今実行したルートデバイスは、init独自のルートファイルシステムを入力する必要があります。udev独自のルールセットに基づいて独自のルールセットを呼び出してインストールし、残りのタスクをすべて実行します。完了したら、コンピュータを使用できます。devfs/dev

とても詳しく説明して申し訳ありませんが、次の文がなぜ真実なのか説明したいと思います。

  • ブートローダから送信されるすべてのカーネルパラメータ(例:root=/dev/sda いいえinitramfsが完了した後も/dev/sda同じ内容にアクセスします。/dev/sda/init

それで、私はこれを行う1つの方法がudevあなたのためのものだと思います。Pythondisk(実際にはsquashfsアーカイブかもしれません)は、すべてのUSBディスクを他の場所に設定するように指示します。一つあるここに良い例があります:

KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="USB 2.0 Storage Device", SYMLINK+="usbhd%n"

そのリンクの残りの部分も読んでみると本当に良いようです。 USBディスクデバイスがinitramfsで使用されるようにこれを実行できる必要があります。/dev/sdaしたがって、ブートローダの設定を変更する必要はありませんが、後で/dev/usbaアナコンダインストールシステムと同じディスク用のノードを作成できます。

おすすめ記事