私は、Ubuntu(現在16.04)とWindows 7をデュアルブートするマシンを使用していて、UbuntuのGRUBをブートローダーとして使用しています。
公式のインストール手順に従って、Arch Linuxを3番目のOSとして追加しました。Ubuntuで制御されているものを使用したかったため、ArchからGRUBをインストールしませんでした。指示にはmkinitcpio -p linux
、おそらく説明したように実行したいくつかのブートファイルを生成するコマンドが含まれていました。
ここで、デフォルトのエントリを介してGRUBからUbuntuを起動しようとすると、次の不愉快なエラーが表示されます(画面の写真で申し訳ありません)。
の出力がuname -a
示すように、これはArchカーネルを起動しようとしています/dev/sda6
が、Ubuntuルートパーティションです。
UbuntuをロードできるようにするにAdvanced options for Ubuntu
は、いずれかのUbuntu, with Linux 4.4.0-*
エントリに移動して選択する必要がありますが、Archを正しくロードするエントリが見つかりませんでした。
sudo update-grub
Ubuntuから実行しても(「update-grub
実行grub-mkconfig -o /boot/grub/grub.cfg
してgrub2構成ファイルを生成するためのスタブです。」)、何も変更されません。grub-customizer
これまでのところ、このツールを修正しても役に立たなかった。
このGRUBの混乱の原因は何ですか?各Linuxバージョンが正しいカーネルと正しいパーティションから起動するように修正するにはどうすればよいですか?
Ubuntuの/ bootがマウントされた状態でArchを愚かにインストールしたようですが、おそらくそこにブートファイルが置かれています。
私は、Ubuntuのブートローダーを再びまっすぐにして、後でArchのクリーンインストールを行うために、Arch関連のすべてのものを消去することに問題はありません。
アップデート(Ask Ubuntuチャットでのサポートについて@terdonに感謝):
こちらが私/boot/grub/grub.cfg
です。
すべてのLinuxエントリは、Ubuntuのルートである/ dev / sda6パーティションをポイントしているようです。
$ grep ' linux /' /boot/grub/grub.cfg
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
UbuntuからGRUB構成を更新しようとしました:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done
UbuntuからMBRにGRUBを再インストールしようとしました:
$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
ちなみにこれらはインストールされているUbuntuカーネルパッケージです。私はdpkg-reconfigure
それらをすべて試しましたが、問題に影響はありませんでした。
$ dpkg -l linux-image* | grep ^ii
ii linux-image-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii linux-image-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
私はまた、Ubuntu initramfsを再生成しようとしました:
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic
私のパーティションレイアウト:
Ubuntuシステムから確認。ラベルは自分自身を説明する必要があります。
$ lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs win7-boot 90DCF3A5DCF3842E /win/boot
├─sda2 ntfs windows7 482C7A572C7A3FCC /win/c
├─sda3 ext4 grub-boot 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5 ext4 images 81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6 ext4 ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7 ext4 ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8 ext4 arch-root 8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec
├─sda9 ext4 arch-home 32522902-a53d-44c8-90f2-6bbf14c40f1f
└─sda10 swap linux-swap 8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]
私のGRUBメニュー構造:
私の/boot
ディレクトリ:
$ ls -la /boot
total 118480
drwxr-xr-x 4 root root 4096 Apr 24 20:50 .
drwxr-xr-x 28 root root 4096 Apr 24 19:44 ..
-rw-r--r-- 1 root root 1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r-- 1 root root 1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r-- 1 root root 184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r-- 1 root root 189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x 6 root root 4096 Apr 26 19:58 grub
-rw-r--r-- 1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r-- 1 root root 3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r-- 1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r-- 1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------ 2 root root 16384 Okt 28 17:43 lost+found
-rw-r--r-- 1 root root 182704 Jan 28 13:44 memtest86+.bin
-rw-r--r-- 1 root root 184380 Jan 28 13:44 memtest86+.elf
-rw-r--r-- 1 root root 184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw------- 1 root root 3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw------- 1 root root 3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw------- 1 root root 6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw------- 1 root root 7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r-- 1 root root 4435552 Apr 14 19:20 vmlinuz-linux
4.4.0と4.2.0カーネルはUbuntuで、Archは4.5.0カーネルである必要があります。しかし、名前にカーネルバージョンのないファイルが何に属しているかを調べるにはどうすればよいですか?
私のUbuntuルートディレクトリ(除外されたディレクトリ):
$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx 1 root root 32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx 1 root root 32 Apr 5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx 1 root root 29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx 1 root root 29 Apr 5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic
私のアーチのルートディレクトリには、任意のファイルやリンクが含まれていません。
Root device mounted successfully, but /sbin/init does not exists
。これを調査しましたか?されてinit
、本当に不足していますか?もしそうなら、あなたは間違いなくそれをインストールするべきです、代わりにそれが存在するなら、それがなぜ見つからないのかという考えがありますか?
os-prober
。インストールする必要があるかもしれません。その後、これらsudo mkinitcpio -p linux
をsudo grub-mkconfig -o /boot/grub/grub.cfg
最後に実行しますsudo grub-install /dev/sda