私はユーザーの介入なしに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
。これらのパラメータの解釈は、カーネルまたは後で実行される最終パラメータではなくinit
initramfsです。root=...
init
(最後はおそらく他のものをよく説明しますが)。このパラメータを受け入れて、次の場所にインストールします。/new_root
(または以前にインストールの準備に使用された名前switchroot
)。udev
initramfsに含まれている場合、initramfsルール・セットはターゲット・ディスク項目の名前の指定/dev/...
方法を決定しますが、これは変更される可能性があります。initramfsがデバイスを
init
正常に見つけてマウントすると、通常/new_root
その中にあるものが見つかります。したがって、そのプログラムは何でもpid 1になります。通常、以下を実行する提供されたプログラムを使用してこれを行います。しばらくインストールしている間exec
/new_root/bin/init
switch_root
busybox
exec
/new_root
超過/
。プロセスは次のトピックで説明されています。したがって、カーネル文書:
しかし initramfsはいrootfs:
pivot_root
rootfs を使用することも、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
アナコンダインストールシステムと同じディスク用のノードを作成できます。
答え2
ホストコンピュータのBIOSに入り、ハードドライブとリムーバブルドライブの順序を並べ替えます。これにより、Linuxカーネルの表示順序が調整されます。
答え3
光沢のある新しいが古い45ドルのHP G60ノートブックにも同じ問題があります。起動順序で新しいSSDを最初に配置し、USBをからに移動しました/dev/sda
。/dev/sdb
次に、起動時にBIOSに入るのと同じように、preBIOSメニューのESCキーを押します。そのため、F10を押してBIOSに入るのではなく、F9を押して起動オプションに入りました。その後、BIOSに設定されている起動順序に関係なく、USBから起動するように手動で選択できます。明らかにUSBを選択し、SSDをインストールしたときに表示されました/dev/sda
。
長い間検索してみると、多くの人が同様の問題に直面していましたが、誰もこの提案を出すことができませんでした。私が見つけた他の方法よりはるかに簡単です。私はこれを直感的に見つけました。
答え4
RHEL6以降、インストールメディアにラベルを使用すると、一貫性のないカーネルsdX命名ではなく、一意の名前でドライブ/ HDにアクセスできます。
USBドライブにファイルシステムを作成するときは、e2labelまたは他の方法を使用してファイルシステムにラベルを付ける必要があります。
ラベルが付けられたら、その名前でUSBにアクセスできます。例: ks=hd:LABEL=yourname:/path/to/fs.ks
また、このタイプの命名は他の場所でも使用できることに注意してください。インストールメディア、リポジトリなど