web-dev-qa-db-ja.com

Gentooインストール後のカーネルパニック-ルートデバイスを開くことができません

/dev/sda1/)と/dev/sda2(拡張、/dev/sda5/home/dev/sda6はスワップ)にDebianシステムがあります。 Gentooを並行してインストールしたいので、sda2を縮小して、Gentooをインストールした/dev/sda3と、Gentooの/dev/sda4として機能する/homeを作成しました。

Disk /dev/sda: 931.5 GiB, 1000204885504 bytes, 1953525167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeb362e8f

Device     Boot      Start        End    Sectors   Size Id Type
/dev/sda1  *          2048   29296639   29294592    14G 83 Linux
/dev/sda2         29298686 1673951231 1644652546 784.2G  5 Extended
/dev/sda3       1673951232 1735391231   61440000  29.3G 83 Linux
/dev/sda4       1735391232 1953523711  218132480   104G 83 Linux
/dev/sda5         29298688   35547135    6248448     3G 82 Linux swap / Solaris
/dev/sda6         35549184 1673949183 1638400000 781.3G 83 Linux

Partition table entries are not in disk order.

/dev/sda1で現在のgrub2インストールを使用したかったので、Gentooのハンドブックの「ブートローダー」セクションをスキップしました。インストールが完了した後、Debianを起動してupdate-grubを実行すると、Gentooがメニューに正常に追加されました。 。ただし、起動すると、カーネルパニックが発生し、ルートデバイスを開くことができないというメッセージが表示されます。

picture of the kernel panic message

fstab Debianの場合、 fstab Gentooの場合。 Gentooのfstabを編集してDebianのようなUUIDを使用しようとしましたが、役に立ちませんでした。また、grubでGentooのブートオプションを編集してみました。元の:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Gentoo Base System release 2.2 (on /dev/sda3)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-1c46e4aa-e486-48ba-8f61-1484ed899e1e' {
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos3'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//sas/disk@0,msdos3' --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  1c46e4aa-e486-48ba-8f61-1484ed899e1e
        else
          search --no-floppy --fs-uuid --set=root 1c46e4aa-e486-48ba-8f61-1484ed899e1e
        fi
        linux /boot/vmlinuz-4.1.12-gentoo root=/dev/sda3
}
submenu 'Advanced options for Gentoo Base System release 2.2 (on /dev/sda3)' $menuentry_id_option 'osprober-gnulinux-advanced-1c46e4aa-e486-48ba-8f61-1484ed899e1e' {
        menuentry 'Gentoo Base System release 2.2 (on /dev/sda3)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.1.12-gentoo--1c46e4aa-e486-48ba-8f61-1484ed899e1e' {
                insmod part_msdos
                insmod ext2
                set root='hd0,msdos3'
                if [ x$feature_platform_search_hint = xy ]; then
                  search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//sas/disk@0,msdos3' --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  1c46e4aa-e486-48ba-8f61-1484ed899e1e
                else
                  search --no-floppy --fs-uuid --set=root 1c46e4aa-e486-48ba-8f61-1484ed899e1e
                fi
                linux /boot/vmlinuz-4.1.12-gentoo root=/dev/sda3
        }
}

### END /etc/grub.d/30_os-prober ###

set root="/dev/sda3"set root="sda3"を使ってみましたが、正直なところ、それが何を意味するのかわかりません。パニックメッセージに関連しているようです。では、ここで何が起こっているのでしょうか。 USB経由で接続された外付けハードドライブ(/dev/sda)から起動していることは言及する価値があります(私の内部のものは失敗しました)。 Gentooのインストールはエラー/警告なしで完了しました。カーネルに何かをコンパイルするのを忘れたとは思いませんが、可能だと思います... ext4、SCSI、USBのサポート(モジュールとしてではなく)含まれていると確信しています。

1
Alex

カーネル構成を見ると、最新のシステムがinitrdなしで起動するために必要なすべてのものを有効にしたようですが、古いコンピューターを使用しています。 lshwの出力で、ISAブリッジとPentiumM 1.4CPUがあることに気づきました。

私の推測では、CONFIG_PATA_MPIIX、ATA_GENERIC、PATA_LEGACYなどのPATAオプションがありませんが、推測ゲームをプレイする代わりに、次のようにします。

uSBドライブを接続した状態でDebianシステムを起動します。
lsmod
カーネル構成(= y)を実行するために追加する必要があるものを確認するか、出力を投稿してください。ヒントを提供できるかもしれません。

または、このサイト http://kmuto.jp/debian/hcl/ を使用して、次の結果を貼り付けます。
lspci -n

Gentooで通常カーネルを構成する方法は次のとおりです。

  1. archLinuxUSBとlsmodを起動します
  2. http://mirrors4.kernel.org/slackware/slackware64-current/source/k/config-x86_64/config-generic-4.1.15.x64などの最新のカーネル構成をSlackwareからコピーします

    SlackwareはGentooに似ており、どちらもsystemdを使用せず(Gentooはデフォルトでは使用しません)、長期リリースのカーネルバージョンを使用し、構成に幸運をもたらしました。 Genericは、必要と思われるものすべてを= yとしてビルドし、オプションのものを= mとしてビルドし、hugeはすべてを= yとしてビルドします(これはほぼ確実に機能しますが、カーネルが非常に肥大化します)。
  3. oldconfigを作成します
  4. EXT4 = yおよびその他のファイルシステムモジュールを設定します(何らかの理由で、Slackwareが常に有効にするとは限りません)。
  5. Gentooカーネル構成ガイドでモジュールが= yに設定されていることを確認します
  6. ALSAおよびWifiモジュールを除くすべてのモジュールをlsmod = yから設定します。
  7. [プロセッサタイプと機能]-> [プロセッサフ​​ァミリ]で正しいプロセッサタイプを選択します
  8. インストールを終了します。

それでも機能しない場合は、ドライブがDebianでは/ dev/sdaを取得していますが、Gentooでは他の何か(/ dev/sdbかもしれません)を取得していると思います。これを修正する最も簡単な方法は、/ etc/fstabのUUID =と、カーネルに渡すブートローダー引数のPARTUUID =を使用することです。 partUUIDはblkidの出力から見つけることができます。

1
vik

USBデバイスの検出は、ここ数年非同期プロセスです。すべてのドライバーがコンパイルされていて、スクリーンショットにUSBストレージデバイスが列挙されていることが示されている場合でも、USB大容量ストレージドライバーの初期化が完了する前に、カーネルがルートファイルシステムをマウントしようとしていると思われます。

Grubconfigがinitramfsのロードを指定していないようです。

Gentooの詳細についてアドバイスすることはできませんが、私が使用しているDebianシステムが、正しい答えを見つけるのに役立つほど類似していることを願っています。 Debianでは、initramfsスクリプトは、必要なブロックデバイスをマウントできるようになるまでブートプロセスを停止します。

私の知る限り、コアinitramfsスクリプトの1つであるDebianでは、/ scripts/localには、udevを起動し、ルートデバイスが列挙されるのを待つために必要なロジックがあります。具体的には、local_device_setup()関数を意味します。 ここ を参照してください。

Gentooには類似のシステムがあると思いますか?

1
etherfish

David Kingが示唆しているように、原因はおそらくカーネルドライバが欠落していることです。 SB大容量ストレージを機能させるために必要なカーネルオプションのリストです。 gentoo livecdからgentooシステムにchrootしてみてください (おそらくこれはGentooで詳細に説明されています)ハンドブック) 。そこで、カーネルを再構成して再コンパイルすることができます (Gentooハンドブックで非常によく説明されています) 。 initramfsを作成した場合は、再作成することを忘れないでください。そうしないと、新しくコンパイルされたカーネルとドライバーが起動時に使用できなくなります。

1
Thawn

SATAドライバーがGentooカーネルにコンパイルされていない(またはモジュールとしてコンパイルされていない)ようです。私に関係する行は、添付したスクリーンショットの約半分のところにあります。

正しい「root =」オプションを追加してください。使用可能なパーティションは次のとおりです。

ただし、使用可能なパーティションはリストされていません。私にとって、Gentooが物理ディスクとまったく通信できないという悲鳴があります。 Debianでlshwを実行すると、どのようなSATAコントローラーが見つかるかわからない場合。これにより、カードが何であるかだけでなく、使用しているカーネルドライバー(SATAセクションの下の「configuration:driver =」行を探してください)もわかるので、Gentooカーネルに追加できます。

1
David King