GRUBはUbuntuおよびArch Linuxインストールのカーネル/initramfsを混同します。

GRUBはUbuntuおよびArch Linuxインストールのカーネル/initramfsを混同します。

UbuntuのGRUBをブートローダとして使用してUbuntu(現在16.04)とWindows 7をデュアルブートするシステムがあります。

これで、公式のインストール手順に従い、Arch Linuxを3番目のオペレーティングシステムとして追加しました。 UbuntuコントロールGRUBを使いたかったので、ArchからGRUBをインストールしませんでした。指示には、mkinitcpio -p linux説明されているように実行されたいくつかの起動ファイルを生成するためのコマンドが含まれています。

デフォルトのエントリでGRUBからUbuntuを起動しようとすると、次のような不快なエラーが発生します(画面の写真が残念です)。

エラーメッセージ

出力に示すようにuname -aArchカーネルを起動しようとしていますが、/dev/sda6Ubuntuのルートパーティションです。

Advanced options for UbuntuUbuntuをロードするには、いずれかのアイテムに移動して選択する必要がありますが、Ubuntu, with Linux 4.4.0-*Archを正しくロードするアイテムが見つかりません。

sudo update-grubUbuntuで実行(「生成されたgrub2設定ファイルを実行するためのスタブupdate-grubです。」grub-mkconfig -o /boot/grub/grub.cfg)何も変わりません。これまで、このgrub-customizerツールはこの問題を解決するのに役に立ちませんでした。

GRUBがこんなに混乱しているのはなぜですか?すべてのLinuxバージョンが正しいカーネルを使用し、正しいパーティションから起動するように変更するにはどうすればよいですか?

私は愚かなことにArchをインストールし、Ubuntuの/ bootをインストールしたようで、ブートファイルをそこに入れたかもしれません。

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メニュー構造:

GRUBホームページ

Ubuntuの高度なオプション:
Ubuntu用GRUBの詳細オプション

Archの高度なオプション:
Arch用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

私のものアーチルートディレクトリファイルやリンクが含まれていません。

答え1

私は最終的に軌道のUbuntuディレクトリ/bootからArchパーティションとそのブートファイルを削除して問題を解決しました。 Ubuntuは再び正常に戻り、残りのGRUBエントリもすべて正常に戻りました。

私がしたことのリストは次のとおりです。

  • Archinitramfsファイルの削除:

    sudo rm /boot/initramfs-linux*
    
  • Archvmlinuzファイルの削除:

    sudo rm vmlinuz-linux
    
  • /dev/sda8GPartedを使用したArchパーティションフォーマット()

  • GRUB構成の更新:

    sudo update-grub
    
  • 再起動してお楽しみください!

答え2

grub.cfgを手動で回復します(推奨されていません)

あなたを見ているgrub.cfg

Ubuntuエントリが破損しています(および以下のエントリの一部)。

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-eee18451-b607-4875-8a88-c9cb6c6544c8' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    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-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    else
      search --no-floppy --fs-uuid --set=root 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    fi
    linux   /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro  
    initrd  /initramfs-linux.img
}

最後の2行は、カーネルとinitrdをロードするためにgrubが実行したコマンドで、現在ARCHカーネルとinitiramfsを探しています。また、予想されるUbuntuファイルをホストすることも、ホストしていない可能性がある/パーティションでそのファイルを探します。uuid=eee18451-b607-4875-8a88-c9cb6c6544c8

次の方法でこの問題を解決できます。

sudo blkid

Ubuntuのルートパーティションのuuidを取得します。

次に、最後の2行を最新のカーネルイメージとinitrdイメージのsimlinkに置き換えます(これがUbuntuで予想される方法だからです)。

linux   /vmlinuz root=UUID=<correct-uuid-ubuntu-partition> ro  
initrd  /initrd.img

これで問題がすぐに解決されない場合は、別の修正が必要になることがあります。テストされ動作する項目の1つを「コピー」して見つけることができます。最も単純なエントリを使用することをお勧めします(たとえば、upstartやnomodesetの転送などの他のカーネルパラメータはありません)。

これは良い候補でなければなりません。

menuentry 'Ubuntu, with Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-eee18451-b607-4875-8a88-c9cb6c6544c8'

UbuntuのルートパーティションでArch initramfsとカーネルを見つけることができるので、Archエントリも破損しています。デフォルトの場所は/ bootです。場所を変更し、ルートパーティションuuidにArchルートが含まれていることを確認して、Archエントリの最後の2行を調整します。

複数の警告ワード:

通常、Ubuntuユーザーには手動操作をお勧めしませんgrub.cfg。必ずコピーして注意深く編集してください。システムの起動に失敗した場合に備えてください(ただし、前回の回答で説明した起動プロセスを使用して回復できます)。

また、今回は問題を解決することができますが、次にgrubメニューを再入力する必要があるときに再び表示されることがあります。何らかの理由でUbuntuでは、grubのオペレーティングシステムの検出は/ bootの下にArchカーネルがあるため混乱します。起動リカバリなどのユーティリティを使用すると、すべてのディストリビューションを起動可能にすることができるようですが、覚えておくと機能しません。

永続的な変更には、デフォルトの/boot以外のディレクトリにアーチカーネルとイメージをインストールすることが含まれます。これは面倒な作業なので、これを正しく実行する方法については、Arch wikiのgrubエントリを参照する必要があります。

以前の回答(長期的にArchに切り替えたい場合はお勧め) これが私がすることです。とにかくそれは数ヶ月前に行われました。

移動アーチウィキグラブページパーティションテーブルの関連部分を読んでください(おそらくUEFIであるので、ESPなどを読んでください)。

手動でArchから起動

それは非常に強力な経験であり、試してみることをお勧めします。 Arch Linuxカーネルがディスクのどこかにあると仮定し、cgrubプロンプトでlsを押して入力すると、以下のようにデバイスとパーティションのリストが表示されます(hd0,msdos1),(hd1,gpt1),...。コンテンツを個別に表示するには、lsを使用できます。

次の3つを理解する必要があります。

  • /Archルートパーティションはどこにありますか?
  • あなたのアーチカーネルはどこにありますか?vmlinuz
  • あなたのアーチはどこにありますか?intiramfs-linux.img

この 3 つがある場合は、 grub> で 3 つのコマンドを実行して同様のメッセージを表示します。

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /intiramfs-linux.img
grub> boot

grubは以下を見つけることができます。

grub> find /sbin/init

(grubは自動的に見つかりません。カーネルパニックが発生します。)

私はこれをすべて学んだここ、私は強くお勧めするソースです。できれば、グラップを修正するのに飛び込んでください!それ以外の場合...

ライブキーでArchを実行してください! ライブArch環境を確保し、chroot最初と同じ方法でWikiをArchにインストールします。

グラブを修正する

Arch内で特に他のシステムを検出できるように、関連するos-probergrubパッケージをインストールしてください。grub-installインストールガイドに注意深く従うと(少なくとも)、grubメニューからアーチとUbuntuを起動できます。インストールコマンドは次のように表示されます。

**警告**このコマンドを実行しないでください。これは単なる例であり、システムに適したものが何であるかを理解する必要があります。

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg

**他のすべての方法が失敗した場合**

残念ながら、これは情報量が限られており、SEは実際にはこの種の問題に関するフォーラムではないため、「一般的な」回答は有用なリソースを参照しています。

わからない場合は、Archフォーラムを確認してください。最善を尽くし、事前に文書を読んだら、助けを見つけることができます。

アーチを通してこのすべてをすることは私にとって基本的な学習経験でした。

答え3

私の解決策はもっと簡単です。端末を使用して、次の操作を行います。

sudo rm /boot/grub/grub.cfg
sudo update-grub

追加の質問がある場合は使用してくださいboot-repair。無料でダウンロードでき、CDディスクに焼くのに十分小さいです。

関連情報