web-dev-qa-db-ja.com

ブートをinitramfsプロンプトに修正し、「mount:ca n't read '/ etc / fstab」:No such file or directory」および「No init found」を修正する方法

[〜#〜] gpt [〜#〜]単一のパーティション専用のパーティション分割ディスクを使用して新しいシステムをインストールするext4フォーマット済みextlinux (バージョン4.05)ブートローダーとして、Ubuntu Coreバージョン13.10 AMD64をrootfsとして、Ubuntu linux-image-3.11.0-18-genericをカーネルとして、extlinux-updateを使用してブートローダー構成を生成します。

再起動後の結果(まだKVMベースの仮想マシン内))は、(initramfs)プロンプトと次のメッセージです。

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBoxはv1.20.2です。

回帰:

  • ファイルシステムはfsck.ext4でチェックされています

ルートの存在を確認する

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

ルートブート引数

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

ロードされたモジュールを確認する

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ bootフォルダーの内容

$ Sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

このシステムを予想されるデフォルトのbashプロンプトで起動する方法は?

26
Pro Backup

root=/dev/sdaXオプションを設定して、カーネルブートパラメーターを変更します。 sdaX/またはrootパーティションになります。次回の起動時に、initramfs/etc/fstabにアクセスしてファイルシステムをマウントする前に、パーティションをマウントしようとしていることがわかります。

詳細については、質問「 initramfsは/ etc/fstabを使用していますか? 」を参照してください。

12
Alex

initramfsについて理解する必要があるのは、それがファイルシステムであることです。カーネル2.6以降、これは基本的に、マシン上で唯一のカーネルが課したファイルシステムです(VFSは残しますが、これは間違いなくファイルシステムでもあります)。あなたのinitramfs imageはディスクイメージです。

initramfs image内には、ルートディスクが見つかる前に必要なディストリビューションであることが決定されたファイルがあります。通常は、Busyboxと、ルートデバイスを見つけてマウントするために必要なカーネルモジュールです。これはあなたのために働いていません。

ここには本当の謎はありません。ターミナルプロンプトの周りに方法が見つかれば、initramfs.をナビゲートできますが、最初にそれをわかりやすく説明する必要があります。

何よりもまず、これはちょうど/.ですLinuxのルートタイプのことをしているLinuxのルートです。実際、それがカーネルとは別のファイルにある場合、それは実際にはすでに2番目のルートデバイスです。すべてのLinuxカーネルには基本的に/がすべて含まれていますinitramfs.を取り込む前に最初にマウントするものを所有します

さらに、initramfsrealルートです。これは、Linuxカーネルがinitを実行してユーザースペースを初期化し、その後発生する可能性のある問題に対する責任をすべて否認する場所です。あなたのinitは多くの場合Busyboxのようです。つまり、そのアクションの制御は、付随するシェルスクリプトを編集するのと同じくらい簡単でなければなりません。

次に、init?が見つからないというエラーの理由はほぼ間違いなく、init実際のinitは、シェルスクリプトを介して実行するように指示されています。

私にとって最も印象的なのは、カーネル疑似ファイルシステム-dev sys proc-がマウントされないことです。これは非常に厄介であるか、非常に良い手掛かりです。 KVM=と言って、カーネルの機能に疑問を投げかけますが、その暗くてわいせつな道を進む前に、まず別のことを試してみませんか?

cd /root || mkdir /root

エラーメッセージが繰り返し表示されていることに気付きました。

そのようなファイル、又はディレクトリはありません

initramfsイメージを再構築する必要があることに失敗しました。そのためにはライブディスクを起動し、ディストリビューションが提供するツールを実行してその目的を達成します。ああ、どうぞこのライブディスクが読み込まれていることを確認してください[〜#〜] efi [ 〜#〜]モード。

これがinitramfs - switchroot.についての真に異常な唯一のものです。

Linuxカーネルは、初期のユーザー空間と、initramfsからルートディスクデバイスへの移動を処理することを目的とした非常に特別なsyscallを提供します。最初にルートディスクをinitramfsのマウントポイントにマウントし、次にルートファイルシステムをピボットすることで機能します。 initramfs'sターゲットマウントポイントはrootに基づいていると思いますそれについてうめき続けている途中で。そこにあることを確認してみませんか?

さらなる調査のために、あなたは少しざらざらする必要があるでしょう。ブートローダーを調整して合格...

init=/bin/sh

...カーネルパラメータとして。

10
mikeserv

私も同じ問題を抱えていました。アレックスの言ったことは正しい。最初にfstabを調整しましたが、効果がありませんでした。そこで、GRUBを確認しました。 GRUBメニューにアクセスする可能性がある場合。

  • Linuxを選択します。起動したいものと問題のあるものを選択します。
  • 「e」を押して、「boot_image」または「boot ... root」を探します。
  • 'id'を確認してください。
  • 私の場合、それは間違っていました。 「initramfs」と入力してblkidに画像を作成し、Linuxがインストールされているパーティションのuuidを取得します。
  • 正しいuuidをblkidからgrub-> boot_imageに貼り付けます。

それで問題は解決しました。再起動後、Linuxはディスクのチェックを開始するのにより長い時間を要しました。しかし、今は再び機能します。

お役に立てれば幸いです。

よろしく

1
Abe Nudel