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

@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下面做一些东西,我一定马上!我保证

我用了你说的办法,首先在bios里面检查了你说的那些项目

另外你说的:

这里我不能用 /sda7 /sda8 必须用那个mapper的方法

network那个办法 我在yast里面尝试了 但是始终打不开。自从我装上这个opensuse以来 只要我打开network manager就上不了网,索性不管他,就能上网。

nmcli con show 返回图中所示的结果。
我又在yast里面尝试设置bootloader 结果两次都失败
现在windows也进不去了

%E5%9B%BE%E7%89%87

%E5%9B%BE%E7%89%87

%E5%9B%BE%E7%89%87

%E5%9B%BE%E7%89%87

%E5%9B%BE%E7%89%87

bootloader从grub2-efi改成grub2,失败,再改回来,仍然失败

![%E5%9B%BE%E7%89%87|666x500]
(upload://bOsHiialHGBvVUl3qYLYiFZU2cy.jpeg)

以下这些步骤都做了是secureboot是关闭着的
找不到grub2

“验证 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
让我看一下内容。”

  1. mapper 那个方法没问题。就用那个就行。
  2. 我说的所有东西,除了在 TTY 下联网这些跟 rescue 系统本身有关的,和检查 UEFI/SecureBoot/FastBoot 这些硬件有关的,剩下的都是要在 chroot 里面针对你损坏了的系统做的。好比你 find grubx64.efi,在 rescue 系统里面找这个毫无意义。你不会是连要修哪个系统都还不清楚吧?rescue 是个好系统根本不需要修。在它之下的所有准备都是为了在有网络的情况下访问损坏了的那个系统。
  3. 楼主你有点想当然,既然搞不定网络为什么还要往下做?既然看不懂回显为什么不先问?现在的境地已经是你乱操作造成的了,为什么还没有意识到不是机器而是人的问题?(你第一张装 grub 的图,我不明白为什么是 i386,但出那个错误是必须的,因为你是 lvm,你要有独立的 /boot,你根本没挂载,甚至你重装 grub 都不一定是在 chroot 里面进行的。)要管住手啊!
  4. 你找 SecureBoot 的方法也不对,/sys/firmware/efi/SecureBoot 肯定不会存在的。因为我发的后面带一串字母,你需要输完 SecureBoot 这几个字后按一下 tab 键去补全那个文件夹。

对 我忘了说了 找secureboot 需要把后面一串数字输进去 我用的是手机浏览 后兰发现了 也照做了。

之后我搜了半天 命令行打开 network manager 也没有搜到有用的信息

@swiatoslaw

su
cd /sys/firmware/efi/vars
ls -l | grep SecureBoot 

然后能看到你的 SecureBoot 文件夹全名。

然后再去运行 od 那个命令。

你的 YaST 网络设置里面是 Network Services Disabled,所以你肯定没有网的。

nmcli 不存在,那你应该用 wicked 去联网。你的是无线还是有线?

我的是一个无线网卡,之前发过一个帖子就是求助无线网卡联网的。

我执行了这些命令 这次是在退出chroot以后执行的。结果是零 确实没有开这个secureboot

退出chroot以后 执行
find -name ‘grubx64.efi’ 得到如下结果
./boot/efi/EFI/opensuse/grubx64.efi
但是执行cat /path/to/grubx64.efi就得到
No such file or directory
执行cat /path/to/grub.cfg也是一样结果。

于是我尝试执行
cat ./boot/efi/EFI/opensuse/grubx64.efi得到各种乱码 现在得重启

@swiatoslaw 下面进入 chroot,然后执行 find grubx64.efi 那个命令,看看那个文件的内容和 grub.cfg 的内容

不是不能在chroot下执行find那个命令么?我是在退出chroot以后执行的 找到一个东西,请看我前一条回复

@swiatoslaw

那个一定要在 chroot 里面 find 的,不然你找到的就是 rescue 系统的 grubx64.efi 而不是你坏了的那个系统的。

另外 path/to/grubx64.efi 表示到 grubx64.efi 的路径,不是固定的,那个 find 命令就是找这个路径的

明白了!那么这次我就是先chroot /mnt之后的用find -name ‘grubx64.efi’
没有返回任何东西 也没有说no such file or directory

@swiatoslaw 因为你没挂载 /dev/sda7 到 /mnt/boot 呀

那个 system-root 的 lvm 是你的 “/” 分区,其实在 sda8,你的 boot 分区在 sda7,你在 root 分区找是找不到的

1赞

哎呀 我丢人了。
我首先exit 之后补上了 mount /dev/sda7 /mnt/boot 之后再chroot /mnt 这个时候执行
find -name ‘grubx64.efi’ 这个时候找到的 是
./boot/EFI/opensuse/grubx64.efi,再执行
cat /path/to/grubx64.efi 还是说no such file or difectory
现在我就执行 cat ./boot/EFI/opensuse/grubx64.efi
结果又跟上次一样 满屏的乱码,连提示符都是乱码

又成这样了:

图片总是错,是这样的

@swiatoslaw 乱码无所谓,主要是想看看它是不是空的。然后你再用同样方法查找和看一下 grub.cfg。

再把最早我那个帖子的第二步里查 /etc/default/grub 和 /etc/fstab 的命令都运行一遍我看看。

好了 现在也可以找到你要的那个grub.cfg 但是有两个 另外 你列出的四个
cat /etc/default/grub | grep…的命令我都执行了 都在照片里。

cat /etc/fstab我也执行了 你最好用pc来看这个照片 我用blkid的结果也在照片里 uuid是很长一串,但不是sda8

这次我装的opensuse LEAP42.3 用到了三个分区 sda7是swap sda8是/
sda6是安装程序给我分出来的 可能是用来引导的。

cat /etc/fstab返回结果有三行 头两行内容从uuid来看是我的liveCD(我烧在U盘里了),第三行是sda6

grub.cfg找出来两个