非同期:VFS:未知のブロック(0,0)にルートファイルシステムをマウントできません。

非同期:VFS:未知のブロック(0,0)にルートファイルシステムをマウントできません。

ラップトップにWindows 10とManjaroがインストールされており、すべてがうまく動作します。昨日、別のパーティションにKali Linuxをインストールしました。正しくインストールされ、正常に動作します。しかし、問題はManjaroを起動しようとしているときです。グラップメニューからManjaroを選択しましたが、表示される画面がこんな感じです。

wn-block(0,0)
[    0.667378] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.9.47-1-MANJARO #1
[    0.667435] Hardware name: Acer Aspire E5-575G/Ironman_SK  , BIOS V1.04 04/26/2016
[    0.667493]  ffffc90000c8bde0 ffffffff813151d2 ffff880276a77000 ffffffff8190b950
[    0.667717]  ffffc90000c8be68 ffffffff8117ecd4 ffffffff00000010 ffffc90000c8be78
[    0.667940]  ffffc90000c8be10 327c3b64ed88e616 327c3b64ed88e616 ffffc90000c8be80
[    0.668162] Call Trace:
[    0.668213]  [<ffffffff813151d2>] dump_stack+0x63/0x81
[    0.668267]  [<ffffffff8117ecd4>] panic+0xe4/0x22d
[    0.668321]  [<ffffffff81v2a590>] mount_block_root+0x27c/0x2c7
[    0.668377]  [<ffffffff81b298be>] ? set_debug_rodata+0x12/0x12
[    0.668432]  [<ffffffff81b2a640>] mount_root+0x65/0x68
[    0.668486]  [<ffffffff81b2a772>] prepare_namespace+0x12f/0x167
[    0.668542]  [<ffffffff81b2a1ca>] kernel_init_freeable+0x1ec/0x205
[    0.668598]  [<ffffffff81610b30>] ? rest_init+0x90/0x90
[    0.668652]  [<ffffffff81610b3e>] kernel_init+0xe/0x100
[    0.668706]  [<ffffffff8161dfd5>] ret_from_fork+0x25/0x30
[    0.668786] Kernel Offset: disabled
[    0.668893] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
_

この問題をどのように解決できますか?

答え1

VFS: unable to mount root fs on unknown-block(0 0)カーネルがルートファイルシステムをマウントできないことを意味します。これには2つの一般的な理由があります。

  1. カーネルがデバイスのファイルシステムをサポートしていません。自分のカーネルをコンパイルした場合、これは通常、ファイルシステムドライバをカーネルの基本部分ではなくモジュールとして構築する必要があることを指定したためです。ディストリビューションカーネルを使用した場合、これは通常A固有の形式を選択したためです。どちらの場合も、これを行わないでください。

  2. カーネルに渡されたルートデバイス名が正しくありません。この問題は解決するのが難しい場合があります。私が見つけた最良の方法は、ブートローダでカーネルコマンドラインを修正して、動作するエントリが見つかるroot=までパラメータがどのように見えるかを訓練された推測をすることです。

答え2

カーネルメッセージに基づく完全な診断プロセス

これを使ってQEMUエミュレーション設定問題をデバッグするのに役立つ可能性のあるエラータイプごとに最小限の例を提供しようとします。

この簡単な設定では、QEMUは次のようにシステムをエミュレートします。

  • 物理ハードウェアのハードドライブまたはSDDを表す単一のvirtioディスク
  • virtio ディスクには、未分割の生の ext4 イメージが含まれています。通常の操作では、デバイスは下に表示されます/dev/vdavはvirtioの指定文字で、パーティションが分割されている場合はパーティションはです/dev/vda1/dev/vda2など)。

発生する可能性のあるエラーは次のとおりです。

  1. Linuxはディスクからバイトを読み取ることができません。

    これは、ディスクが破損しているか、またはそのタイプのハードウェアを読み取るようにLinuxを構成していないためです。

    私のQEMUでは、カーネルがvirtioディスクを読み取ることができるキーオプションを削除してそれを再現できました。

    CONFIG_VIRTIO_BLK=y
    CONFIG_VIRTIO_PCI=y
    

    結果のエラーメッセージは次のとおりです。

    <4>[    0.541708] VFS: Cannot open root device "vda" or unknown-block(0,0): error -6
    <4>[    0.542035] Please append a correct "root=" boot option; here are the available partitions:
    <0>[    0.542562] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
    

    したがって、Linuxはvdaでまったく読めないと言いますVFS: Cannot open root device "vda" or unknown-block(0,0): error -6

    その後、Please append a correct "root=" boot option; here are the available partitions:読み取り可能なパーティションのリストを提供します。

    しかし、私たちの場合、次の行はまったく関係がないので、リストは空です。

  2. Linuxはディスクからバイトを読み取ることができますが、ディスクからファイルを読み取るファイルシステムを理解していません。

    これは、通常、そのファイルシステムタイプを読み取るようにカーネルを設定していないためです。

    ext4ファイルシステムを読み取るカーネルの機能を削除することで、この状況を解決できました。

    CONFIG_EXT4_FS=y
    

    削除後のエラーメッセージは次のとおりです。

    <4>[    0.585296] List of all partitions:
    <4>[    0.585913] fe00          524288 vda
    <4>[    0.586123]  driver: virtio_blk
    <4>[    0.586471] No filesystem could mount root, tried:
    <4>[    0.586497]  squashfs
    <4>[    0.586724]
    <0>[    0.587360] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(254,0)
    

    vdaしたがって、Linuxはデバイスを使用してディスクを読み取り、パーティションが正常に見つかったことを知らせますvirtio_blk

    しかし、その後、パーティションを読み取ることができません。試してみたsquashfs、これは私たちがアクティブにする唯一のファイルシステムですが、ext4パーティションがあるため動作しません。

  3. root=無効なカーネルコマンドラインオプションを渡しました。

    この質問はとても簡単です。正しく答えてください!カーネルは知っている内容のリストも提供します!

    たとえば、エラーを渡す場合:

    root=/dev/vda2
    

    存在せず、カーネルは次の種類のエラーを提供します。

    <4>[    0.608475] Please append a correct "root=" boot option; here are the available partitions:
    <4>[    0.609563] fe00          524288 vda
    <4>[    0.609723]  driver: virtio_blk
    <0>[    0.610433] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(254,2)
    

    vda2Cleanupは「こんにちは:いいえ、しかしありますvda!」と言います。

    この例(0,0)では、以前のケース(254,0)の意味と意味もよく示しています(254,2)

    • (0,0): 最初の数字 0 は、ディスクからまったく読み取れないことを意味します。
    • (254,2):254は、ディスクに割り当てられた一部のIDです。2に示すように、そのIDを持つパーティション/dev/vda2。パーティションは、0図のようにパーティション化されていない元のパーティションを表します/dev/vda

Linux 5.4.3でテストされました。

答え3

VFS:未知のブロックにルートファイルシステムをマウントできません(0 0)_ _ _

  1. 電源ボタンを押し続けてノートパソコンの電源を切ります。
  2. 「詳細」オプションを選択してください。
  3. 共通最小バージョン選択(「回復モード」)
  4. 「クリーン」をクリックし、「空き容量を確保してみてください」をクリックしてください。
  5. その後、「復旧」「正常開始再開」

答え4

@HasanQは正解に最も近いですが、まだ不完全です。

Archベースのディストリビューションに関連して、カーネルからintel-ucodeとamd-ucodeをロードする代わりに別々に実行します。これは、「e」を押して編集し、確認すると、Grubメニューの対応する項目に簡単に表示されます。開始パラメータ - 結論を参照してください。

これはDebianベースのディストリビューション(Mint、Ubuntuなど)、RPMベースのディストリビューション(Fedora、Mageiaなど)、Gentooベースのディストリビューション(CalulateとSabayon)で発生します。まだSlackwareでは試していません。 Archベースのブートローダを使用する必要はありません。

ファイルを作成し、通常はcustom.cfgどこにでも配置できます。 Grubを更新せずに再起動し、メニューの下部にある項目を選択するだけです。grub.cfg/boot/grub

これについては、以下で読むことができます。Linuxポイント組織または努力フォーラム

他の場所では、Manjaroまたは他のArchと他のディストリビューションをインストールし、カーネルパニック、私は次のように書きました:

コンピュータでManjaro(または他のArchベースのディストリビューション)のみを実行するか、Windowsでデュアルブートしてから、Archベース以外のディストリビューションをインストールすることを選択した場合は、この資料が適切です。

Arch ベースでない Linux でもデュアルブートまたはマルチブートを実行すると、カーネルパニックが発生する可能性があります。

これは、Arch以外のディストリビューションでアップデートとアップグレードを実行した後に発生します。これは、ディストリビューションがGrubメニューの上部にあるプライマリパーティションの場所を占めるのに十分です。

この記事はGRUBにのみ適用されますが、rEFIndユーザーや他のブートローダーユーザーのコメントを聞きたいです。

更新およびアップグレードされたパッケージは、次のいくつかの組み合わせを含むがこれらに限定されないこれらの変更を順次生成します。

  • あなたの中核
  • Grub、grub-efi、grub-pc、grub-signedなど
  • ガスケット、ガスケット署名
  • いくつかの主要なファームウェアアップデート
  • その他(あなたはそれらを見つけるでしょう、そうでなければ彼らはあなたを見つけるでしょう!)

コンピュータを再起動すると、他のディストリビューションが一番上にあり、正常に動作します。次に、キーを押してManjaroを選択します。

カーネルパニック

カーネルパニックが発生すると、次のような出力を持つ白黒(ttyスタイル)画面が表示されます。

Kernel Panic – not syncing : VFS: unable to mount root fs on unknown-block(0,0)

以下はCPUリファレンス、ハードウェア名、コールトレース、カーネルオフセットで、次に終了します。

---[ end Kernel Panic – not syncing : VFS: unable to mount root fs on unknown-block(0,0) ]---

今回は、Manjaroを選択せず​​に電源を切って再起動する以外は、終了したり応答を受けることはできません。

おそらくこれを防ぐ唯一の方法は、Manjaro(または他のアーチベース)Grubを制御することです。

しかし、実際にはそうではありません。

というファイルを作成して()フォルダ(一部の展開シリーズにある可能性があります)custom.cfgに保存すると、再起動するとGrubメニューの最後にそのエントリが表示されます。 Grubを更新する必要はありません。ただします。/boot/grub/boot/grub2

ここでこれを行う方法を紹介します。

この機能が必要なユーザーがいることがわかっているので、できるだけ短い方法で要約し、一般的に興味のある方のために詳細を入力します。したがって、分割スレッドにすることができます。

準備する

  1. Timeshift、BackInTime、Snapperなどのシステム回復ツールを使用している場合は、まず実行しているオペレーティングシステムのスナップショット/イメージを撮って保護します。

  2. Endeavourまたは他のArchベースのディストリビューションのルートパーティションのUUIDを取得し、準備して入力する必要があります。これは、以下を含むがこれらに限定されない様々な方法によって達成することができる。

    1. Gpartedでルートパーティションを右クリックし、[情報]をクリックします。
    2. 端末で使用blkid | grep -i <label of distro if labelled>
    3. 確認する/etc/fstab
    4. 他の方法
  3. 小さなテキストファイルを生成するために使用するテキストエディタ(CLIまたはGUI)を決定し、結果ファイルを()または具体的にファイルが保存されている/boot/grubフォルダに配置する必要があることに注意してください。grub.cfg

    これを行うには、sudoなどのroot権限が必要であるか、rootと見なす必要があります。 EndeavourやArchベースではないディストリビューション(Linux Mintで起動するなど)の場合、ディストリビューションはGrubメニューのメイン(トップ)セクションにあります。

  4. Grubメニューのメインセクション(上部)にあるEndeavourまたはArchベースではなくディストリビューション(Linux Mintで起動するなど)から起動します。

スピード

一般的なEXT4 UUIDは32個の数字とアルファベット文字形式で、次のように構成されています(8、4、4、4、12、ダッシュで区切られています)。

7b52a802-aa6d-4aa2-aab5-5dffbe6833c6 

この演習では、以下を使用します。

nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn 

次に、準備ステップ2.1.-4で得られた結果をコピー/貼り付けてこの値を置き換えます。以上。

  1. 次のようにファイルを作成し、好みのtouchテキストcustom.cfgエディタを使用するか、nano次のように使用します。

  2. sudo nano custom.cfg

    ここで、n 文字列は Endeavour またはその他の Arch ベースのディストリビューションのルートパーティション UUID です。

    menuentry "Manjaro - configfile" { 
    insmod part_gpt 
    part part_msdos 
    insmod ext2 
    search --no-floppy --fs-uuid --set=root nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn
    configfile /boot/grub/grub.cfg
    }
    

    最初の行の引用符の部分はあなたの選択です。必要に応じて「My dear Manjaro」と呼ぶことができます。

    それに加えて、2つの中かっこを含む構文が正確に一致していることを確認してください。

  3. ファイルを保存、終了、または終了し、ファイルを保存して(/boot/grub)またはgrub.cfgファイルがある場所に配置します。

  4. 再起動(grubを更新する必要はありません)

上記の手順を正しく行った場合は、GRUB メニューを表示すると、最後の行に最初の行の内容を説明する追加項目が表示されます。これは、Manjaroまたは選択したArchベースのディストリビューションの新しいエントリポイントです。

注文したGRUBメニューのリストにはManjaroに関する別の項目がありますが、それを選択するとカーネルパニックが発生するため、最後の項目の選択を練習してください。

関連情報