web-dev-qa-db-ja.com

新しいArchLinuxインストールで "ルートデバイスが見つかりません"

私は最新版のArchLinux(2014.06.01)をMacBook Pro 8,1(ハードウェアに関しては15インチ)にOSXでデュアルブートしてインストールしました 公式のインストールガイド しかし、新しくインストールしたシステムを再起動しようとすると、回復シェルに入ります。

ERROR: device 'UUID=<snip>' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=<snip>'.
You are being dropped to a recovery Shell
    Type 'exit' to try and continue booting
sh: can't access tty: job control turned off
[rootfs /]# 

(タイプしたくなかったのでUUIDを削除しましたが、それはArchLinuxがインストールされているパーティションに対して(インストールディスクから)blkidによって私に与えられたものと同じです)

その他オンラインソース これは、古くなったpacmanudevfilesystem、またはlinuxパッケージが原因であることを示唆しています。しかし、彼らはこの問題については、新しいシステムではなく、動作しているシステムからカーネルを更新した後にのみ説明しています。インストールディスクから起動している間、これらのパッケージをArch-chroot環境から強制的に再インストールしましたが、状況は変わりませんでした。

代わりに、私のgrub.cfgのちょっとした実験では、rootコマンドのlinuxパラメータに、使用するvmlinuzファイルの選択に関する不満があることを示しています。実際、root=UUID=<snip>root=LABEL=ArchLinuxまたはroot=/dev/sda8(どちらもArchLinuxがインストールされている場所で、以前に別のディストリビューションで2番目のバージョンを使用したことがあることを説明する)に変更すると、それぞれUnable to find root device 'LABEL=ArchLinux'およびUnable to find root device '/dev/sda8'になります。さらに、GRUBはUUIDでパーティションを見つけることができるようですが、最初のRAMディスクが正しくロードされているため、Linuxカーネルだけがパーティションを見つけられないと訴えます(つまり、これはGRUBエラーではありません)。説明された ここ しかし、むしろLinuxエラー)。

補足として、リカバリシェルは非常に制限されており、標準出力は正しく機能していないようです。それにもかかわらず、lsは機能し、ファイルの一覧表示は基本的な(一時的な)ファイルシステムを示していますが、すべてのディスクデバイスが/devにないようです。しかし、これがエラーの一部かどうかはわかりません。

これは似ていますが、 Linuxは起動時にルートファイルシステムを見つけられません と同じではありません。パーティションはext4だったからです。最初から。まったく同じではありませんが、おそらく関連性があります MacBook Pro 7.1でArchLinuxを起動できません - 回復シェルにドロップします しかし、そこにはramfsシェルの代わりにrootfsシェルにドロップし、エラーメッセージが表示されます。異なる。

36
hlt

通常のイメージで起動するのではなく、代替バージョンを使用してシステムを起動しました。結局のところ、Linuxはデフォルトのイメージからblockmkinitcpioフック(ブロックデバイスを担当)がないためにドライブを検出できませんでした。これは/etc/mkinitcpio.confautodetectの後に配置されているためです。これを修正するには、そのファイルのHOOKS=...行を、blockautodetectの前にくるように変更する必要があります。

修正前:

HOOKS="base udev autodetect block modconf filesystems keyboard fsck"

修正後:

HOOKS="base udev block autodetect modconf filesystems keyboard fsck"

initramfstheを再生成するためにmkinitcpio -p linuxを実行すると、問題が恒久的に修正されました。

33
hlt

私は似たような問題に遭遇しましたが、セットアップが異なります。私は仮想マシンでArchLinuxを使っています、そして私のブートローダはsyslinuxです。私はカーネルフックの順番を切り替えるのにあなたのトリックを使いました、しかし私はまだrootfsシェルに終わりました。

私にとっての問題を修正したのは、私のsyslinux.cfgAPPEND行を

APPEND root=UUID=<snip>

APPEND root=PARTUUID=<snip>

ルートパーティションがsyslinux.cfgであると仮定すると、blkid | grep sda1 | awk '{ print $7 }' >> /boot/syslinux/syslinux.cfgのようなコマンドを使用することによって、PARTUUID/dev/sda1に簡単に追加することができます。

その後、好きなテキストエディタを使って行を適切なスペースに移動することができます。

編集:私は小さなawkスクリプトの列番号が変わるかもしれないことをちょうど認識したので、syslinux.cfgにそれをパイプする前に出力を見ることをお勧めします

1
IlikePepsi