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

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

/dev/sda1私は(/)と/dev/sda2(extended、/dev/sda5yes、yes swap)/homeにDebianシステムを持っています/dev/sda6。私はGentooを並列にインストールしたかったので、sda2を最小限に抑え、/dev/sda3その中にGentooをインストールし、次に/dev/sda4Gentooとしてインストールしました/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.

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

カーネルパニックメッセージイメージ

システムテーブルDebian の場合システムテーブルGentoo用。 DebianのようなUUIDを使用するためにGentooのfstabを編集しようとしましたが、成功しませんでした。また、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"なところ、どういう意味なのかわかりませんが、パニックメッセージに関連しているようです。それでは、ここで何が起こっているのか、どうすればよいですか?/dev/sdaUSB経由で接続された外付けハードドライブ(内蔵ハードドライブが破損している)から起動したことは言及する価値があります。エラー/警告なしにGentooがインストールされました。カーネルに何もコンパイルするのを忘れたようではありませんが、可能だと思います... ext4、SCSI、およびUSBサポートが含まれていると確信しています(モジュールではありません)。

答え1

SATAドライバをGentooカーネル(またはモジュール)にコンパイルしていないようです。私が懸念している部分は、添付のスクリーンショットの途中で次のように書かれています。

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

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

答え2

David Kingが言ったように、犯人は行方不明のカーネルドライバである可能性が高いです。 以下は、USB大容量記憶装置が正常に動作するために必要なカーネルオプションのリストです。 gentoo livecd chrootでGentooシステムに入ります。(Gentooのマニュアルにこれについて詳しく説明していることがわかります)。ここでカーネルを再構成して再コンパイルできます。(Gentooマニュアルにもよく説明されています)。 initramfsを作成した場合は、再生成することを忘れないでください。そうしないと、新しくコンパイルされたカーネルとドライバを起動するために使用できなくなります。

答え3

カーネル構成を見ると、initrdなしで最新のシステムを起動するために必要なすべての機能が有効になっているように見えますが、出力にはlshwISAブリッジとPentium M 1.4 CPUがあります。

私の考えでは、CONFIG_PATA_MPIIX、ATA_GENERIC、PATA_LEGACYなどのPATAオプションが欠落しているようですが、推測ゲームをせずに次のようにします。

USBドライブを挿入してDebianシステムを起動します。
lsmod
実行のためにカーネル構成(= y)に追加する必要がある他の項目を確認したり、出力を公開したりすると、いくつかのヒントが表示されます。

または、このホームページを利用するか、http://kmuto.jp/debian/hcl/をクリックして結果を貼り付けます。
lspci -n

Gentooで一般的にカーネルを設定する方法は次のとおりです。

  1. ArchLinux USBおよびlsmodの起動
  2. Slackwareから最新のカーネル設定をコピーします(例:http://mirrors4.kernel.org/slackware/slackware64-current/source/k/config-x86_64/config-generic-4.1.15.x64)

    SlackwareはGentooに似ていますしかし、両方ではありません。 systemd(Gentooはデフォルトでは使用されていません)を使用して長期リリースのカーネルバージョンを使用し、設定に満足しています。一般的なものは必要だと思うすべてを=yで構築し、オプションは=mで構築することであり、巨大なものはすべてを=yで構築することです(これはほぼ動作が保証されますがコアが非常に大きくなるでしょう)。
  3. 以前の構成の作成
  4. EXT4=y およびその他のファイルシステムモジュールを設定します(何らかの理由で Slackware が必ずアクティブになるわけではありません)。
  5. Gentooカーネル設定ガイドでモジュールが= yに設定されていることを確認してください。
  6. lsmod = yを使用して、ALSAおよびWifiモジュールを除くすべてのモジュールを設定します。
  7. プロセッサの種類と機能 - >プロセッサフ​​ァミリで正しいプロセッサタイプを選択します。
  8. インストールを終了します。

それでも動作しない場合、ドライブはDebianでは/dev/sdaを持っていますが、Gentooでは他のもの(おそらく/dev/sdb)を持っているようです。この問題を解決する最も簡単な方法は、/ etc / fstabでUUID =を使用し、カーネルに渡されたブートローダパラメータでPARTUUID =を使用することです。 blkid出力でPARTUUIDを見つけることができます。

答え4

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

grub 構成が initramfs ロードを指定していないようです。

Gentooの詳細についてアドバイスすることはできませんが、私のDebianシステムはあなたが正しい答えを見つけるのに役立つのと同じくらい似ていることを願っています。 Debianでは、initramfsスクリプトは必要なブロックデバイスがマウントされるまで起動プロセスを停止します。

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

Gentooにも同様のシステムがあるようですが?

関連情報