web-dev-qa-db-ja.com

切り替えられたディストリビューション。グラブを壊した

私のHDDはGPTを使用しています。ブートモードをUEFIのみに設定しました。私のパーティションは次のとおりです。

/dev/sda

/dev/sda1 Grub 300MiB FAT32
/dev/sda2 Linux 97.66GiB ext4
/dev/sda3 Windows 97.66GiB NTFS
/dev/sda4 Microsoft_Reserved 16MiB unknown
/dev/sda5 Data 726.13GiB NTFS 
/dev/sda6 Swap 9.76GiB linux-swap 

/boot/efiにSparkylinuxをインストールしているときに、/dev/sda1/dev/sda2にgrubを設定しました。すべてが正常に機能しており、起動優先順位の最初に設定すると、grubメニューからLinux、そのリカバリ、Windows 10、BIOSのいずれかを選択できました。

SparkyLinuxをSolusLinuxに置き換えました。しかし、問題は、grubが機能しなくなったことです。 grubパーティションから起動すると、次のエラーが発生します。

error: file `/boot/grub/x64_86-efi/normal.mod` not found.
Entering rescue mode
grub rescue>

Linuxを起動し、Sudo update-grubを実行すると、次のことがわかりました。

$ Sudo update-grub
Generating grub configuration file ...
Found background: /usr/share/backgrounds/splash.tga
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Found Windows Boot Manager on /dev/sda1@/EFI/Microsoft/Boot/bootmgfw.efi
done

しかし、それはそれを修正するようには見えませんでした。私のHDDには現在、Linux、Windows、grubの3つのブートローダーがあります。少なくとも、BIOSのブート優先メニューに表示されているものです。

編集:grubを再インストールしようとしましたが、2つのgrubブートローダーがあります。どちらも機能しません。

lsblkの出力:

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0   300M  0 part 
├─sda2   8:2    0  97.7G  0 part /
├─sda3   8:3    0  97.7G  0 part 
├─sda5   8:5    0    16M  0 part 
├─sda6   8:6    0 726.1G  0 part 
└─sda7   8:7    0   9.8G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom  

私はそれを修正するために何をすべきかについて途方に暮れています。起動時にOSを選択するオプションが欲しいだけです。

2
Spikatrix

このlinux.comリンク は、grub-rescueを介​​して壊れたgrubから回復する方法を説明します。

基本的にあなたはする必要があります

ls (hd0,1)/
ls (hd0,2)/

/ boot/grubディレクトリと、vmlinuzファイルおよびinitrd.imgファイルが見つかるまで続けます。リンクはこれらのファイルが/boot/vmlinuz-x.y.z.blahにあることを想定していますが、おそらく現在のカーネルとinitrdを指す/のリンクとして表示されます。そうでない場合は、/ boot /を調べて、それに応じて以下を修正してください。

Lsblk/boot/grubから判断すると、(hd0,1)がオンになっていて、Linux OSの残りの部分が(hd0,2)になっている可能性があります。

OSでパーティションを見つけたら、次のコマンドでこれを確認できます。

cat (hd0,2)/etc/fstab

これらの仮定が正しければ、

set prefix=(hd0,1)/boot/grub  #tells grub where it can find insmod etc
set root=(hd0,2)              #tells grub where to find / 
insmod normal                 #loads normal module
normal                        #executes normal
insmod linux                  #loads the linux module
linux /vmlinuz root=/dev/sda2 #executes linux, loads the kernel and tells it where to find /
initrd /initrd.img            #loads the initrd
boot

Root =/dev/sdxコマンドに注意してください。これを省略したり、間違ったパーティションを指定したりすると、カーネルパニックが発生します。もしそうなら、 [〜#〜] reisub [〜#〜] そしてやり直してください。

上記が機能しない場合は、最初の行をに変更してみてください

set prefix=(hd0,2)/boot/grub

入ったら、grubを再インストールできます。

Grubを修正するときにgrub-customizerを使用するのが好きです。これは、Linuxを使用しているときにgrubで起動オプションとセットアップを確認し、再起動する前に問題を修正できるからです。

1
bu5hman

次の手順を実行すると、GRUB)を再インストールできるはずです。

  1. ライブUSB/CDを使用してLinuxを起動します
  2. linuxルートパーティションへのchroot(/ dev/sda2を想定)
  3. / boot/efiに/ dev/sda1をマウントします

  4. sudogrub-installを実行します

それを試してみるとどうなりますか?

(注:重要なデータを最初にバックアップすることをお勧めします)

0
Time4Tea