昨夜升级nvidia一个什么东西 进不了图形界面 现在连grub都毁了

太感谢您了!
按照你说的方法,在执行grub-install /dev/sda7 这一步的时候出问题了。


错误信息是
grub2-install: error: cannot find a device for /boot/grub2 (is /dev mounted?)
这不是首先就mount了么?

先退出chroot
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
下面一条换成grub2-install --target=x86_64-efi /dev/sda7

在rescue下 我依次执行了这些命令

vgscan
vgchange -a y system
mount /dev/mapper/system-root /mnt
mount --bind /dev /mnt/dev
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount /dev/sda7 /mnt/boot/efi
chroot /mnt
最后执行这一句
grub2-install --target=x86_64-efi /dev/sda7
出错了
%E5%9B%BE%E7%89%87

错误信息是 /usr/lib/grub2/x86_64/modinfo.sh不存在,照片里满屏的字 是我用ls /usr/lib查看了一下

这我也不是很明白咋回事了。你chroot之后,联网(用网线会简单一点),然后

zypper in -f grub2-x86_64-efi shim

重装一下这两个包,看看会不会好一点。

1赞

非常感谢你的帮助,但还是出错了,错误信息如下


但我可以运行那个半图形界面的yast,就在里面像设置一下boot loader但也还是出错

楼主 大过年的 休息一下吧 你的问题可能就是出在你的分区是LVM的方式上 我不是很懂这个东西
这里给你我自己曾经修复的记录吧 这个博客刚付款了 三个月之后还不知道能不能访问 希望能有所帮助http://tianwaifeixian.leanote.com/post/5d79f6d36de7
論壇裏面的鏈接:https://forum.suse.org.cn/t/grub2/398/5

1赞

+1,过年了歇歇吧,这样我也不是很明白了。碰到特别棘手的问题我还是会重装,因为有时候查不到资料浪费时间太严重。

1赞

还是出错,grub2-install /dev/sda 出错
错误信息如下
如果是grub2-install /dev/sda7也不行 错误信息完全一致。
另外加—target=x86_64-efi也不行

@swiatoslaw 过了一遍帖子,我感觉是你没 mount 你原来系统的 /usr,所以你运行 grub2 install 的时候才会提示那个 modinfo.sh 找不到。

我想看看你的 vgscan 和 vgchange -a 的结果。

另外别忘了把那些日子拷贝出来让我看看。

1赞

现在是拷贝不出来呀 马上上结果!

前一个图,需要复制 /etc/resolv.conf。后一个图,bind mount /run 试试。

1赞

@lilydjwg

openSUSE 的 TTY,要是之前用 NetworkManager 联网的话, 需要用 nmcli 联网。所以他才出现无法解析那些东西,不是 chroot 没网,宿主都没网。

不懂 是说我现在连不上网?

在 rescue 下,先 ping baidu.com 看看能不能连上网。不能上网就先运行 yast,网络设置,把网络弄上。另外你最早 grub2 install 的时候,用的不是 “—target=x86_64-efi”,而是 “—taget”,没有那个选项的 :joy:

1赞

把网络弄上又能干嘛呢?全是命令行

弄上你就能 zypper install grub2 那些东西了啊…之前你不是装不上么

1赞

我错了 我错了 我错了

查看无线网卡的设备名:

ip a

我的是 wlp0s20f0u9:

3: wlp0s20f0u9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 38:83:45:18:b9:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.25/24 brd 192.168.31.255 scope global wlp0s20f0u9
       valid_lft forever preferred_lft forever

顺便说下我的有线网卡是 enp3s0。

下面切换到 root:

su

然后查看可用的 NetworkManager 连接:

nmcli con show
名称                UUID                                  类型             设备 
D7-3-101            3ca45359-5d19-4574-b5b0-3d8251a82039  802-11-wireless  --   
Wired connection 1  bd119e48-f955-3a4a-9e5c-327b4199a75c  802-3-ethernet   --   

要是这里面有你之前的连接,连网的命令就是:

nmcli con up uuid 3ca45359-5d19-4574-b5b0-3d8251a82039

这里我连接的是无线,有线就用另一个 uuid 即可。

要是没有连接,新建无线连接用这个命令:

nmcli dev wifi connect <SSID> password <password>

新建有线连接用这个命令:

nmcli con add type ethernet con-name <SSID> ifname enp3s0

要是静态连接,在上面的命令后面添加:

ip4 192.168.1.50/24 gw4 192.168.1.1

连接创建好后,假如要修改 dns:

nmcli con mod <SSID> ipv4.dns “8.8.8.8 8.8.4.4”

然后 nmcli con down <SSID> 再重新 up 一下就可以。

2赞

@swiatoslaw

请按照以下内容给我提供信息好帮你修复 grub2:

第负二步:

BIOS 里确定你开了 UEFI,SecureBoot 开关都无所谓。FastBoot 关上(不然进完 Windows 10 回来 openSUSE 启动不了,因为 Windows 10 依然占用硬盘)。

第负一步:

准备 chroot(假设你的 root 是 sda8, efi 装在 sda7,因为我看到你 sda2 也是个 efi 分区,你自己确定就好):

vgchange -a y system
mount /dev/mapper/system-root /mnt
mountt /dev/sda7 /mnt/boot
mount -B /dev /mnt/dev
mount -B /dev/pts /mnt/dev/pts
mount -B /proc /mnt/proc
mount -B /sys /mnt/sys
mount -B /run /mnt/run
chroot /mnt

退出 chroot 就输入 exit 就可以。下面你要分好几步检查,所以你可能要弄好多次这个 chroot。

第零步:

验证 SecureBoot 是否关闭:

od -An -t u1 /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data

要是 0 的话,就是关闭着,或者根本没有 SecureBoot。要是这个命令失败了,你就不是 UEFI mode 引导的。

第一步:

查找一下 grubx64.efi:

find . -name 'grubx64.efi'

如果找到了:

cat /path/to/grubx64.efi

让我看一下内容。

然后同样方法查找一下 grub.cfg,让我看一下内容。

第二步:

要是内容都没问题的话:

zypper se -v grub2

看看 grub2 装没装。

zypper up grub2

升级 grub2(在搞定了网络的情况下)。

然后查找一下这些值,让我看看:

 cat /etc/default/grub | grep "GRUB_USE_LINUXEFI"
 cat /etc/default/grub | grep "GRUB_DISABLE_OS_PROBER"
 cat /etc/default/grub | grep "GRUB_CMDLINE_LINUX_DEFAULT"
 cat /etc/default/grub | grep "GRUB_CMDLINE_LINUX"

第一个 USE_LINUXEFI 应该是 true,第二个是 false,剩下的要是有 resume=/dev/disk/by-uuid/XXX 之类的,用

 blkid

确认下那个 uuid 是不是 sda8.

然后检查 /etc/fstab:

cat /etc/fstab | grep boot

给我看下结果。里面的 UUID 也要是 sda8 的 UUID。

第三步:

efibootmgr -v

的结果我也要看一下。如果里面没有 opensuse 的项的话,加上:

 gdisk -l /dev/sda7
 efibootmgr --create --disk /dev/sda7 --part N --label "opensuse" --load \\EFI\\opensuse\\grubx64.efi

那个 part 的 N 是由 gdisk -l /dev/sda7 得到的。

假如说你的 openSUSE 在 efibootmgr -v 里显示的是 Boot0004 的话,把它的启动顺序变成第一个:

efibootmgr -b 0004 -B

第四步:

要是以上都不行,就重装 grub2

grub2-install --target=x86_64-efi /dev/sda7
grub2-mkconfig -o /boot/grub2/grub.cfg
3赞

你真好!!我非常非常感激你。
我一定尽快用你的办法尝试并且把结果报上来。
这几天在windows下面做一些东西,我一定马上!我保证