重新安装 GRUB(grub-install:警告:此系统不支持 EFI 变量。)

重新安装 GRUB(grub-install:警告:此系统不支持 EFI 变量。)

由于某种原因,硬盘 WDC WD40EJRX-89A 上的 GRUB 消失了。也许原因是我物理上更改了 SATA 驱动器/电缆,并且不确定是否将 SATA 电缆插入相同的插槽中。

我尝试使用 live cd 重新安装 GRUB 但它没有安装

    root@debian:~# fdisk -l
Disk /dev/sdc: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: Samsung SSD 850 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt


Device         Start       End   Sectors   Size Type
/dev/sdc1       2048   1085439   1083392   529M Windows recovery environment
/dev/sdc2    1085440   1290239    204800   100M EFI System
/dev/sdc3    1290240   1323007     32768    16M Microsoft reserved
/dev/sdc4    1323008 185296895 183973888  87.7G Microsoft basic data
/dev/sdc5  185296896 488394751 303097856 144.5G Microsoft basic data


Disk /dev/sdb: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: WDC WD40EJRX-89A
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt


Device          Start        End    Sectors   Size Type
/dev/sdb1        2048    1050623    1048576   512M EFI System
/dev/sdb2     1050624    4956159    3905536   1.9G Linux filesystem
/dev/sdb3     4956160 5669019647 5664063488   2.6T Linux filesystem
/dev/sdb4  5669019648 5669224447     204800   100M EFI System
/dev/sdb5  5669224448 5669257215      32768    16M Microsoft reserved
/dev/sdb6  5669257216 5882199868  212942653 101.5G Microsoft basic data
/dev/sdb7  5882200064 5883518975    1318912   644M Windows recovery environment
/dev/sdb8  5883521024 5883725823     204800   100M EFI System
/dev/sdb9  5883725824 5883930623     204800   100M EFI System


Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: ST1000VX000-1ES1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos

Device     Boot     Start        End    Sectors   Size Id Type
/dev/sda1  *         2048    6053887    6051840   2.9G 83 Linux
/dev/sda2       336230400 1953521663 1617291264 771.2G  7 HPFS/NTFS/exFAT
/dev/sda3         6055934  336230399  330174466 157.4G  5 Extended
/dev/sda5         6055936  336230399  330174464 157.4G 83 Linux

Partition 3 does not start on physical sector boundary.
Partition table entries are not in disk order.


Disk /dev/sdd: 7.5 GiB, 8056209408 bytes, 15734784 sectors
Disk model: Transcend 8GB   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos

Device     Boot Start     End Sectors  Size Id Type
/dev/sdd1  *        0 4938303 4938304  2.4G  0 Empty
/dev/sdd2        1496    6721    5226  2.6M ef EFI (FAT-12/16/32)


Disk /dev/loop0: 2.08 GiB, 2237280256 bytes, 4369688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

root@debian:~# cryptsetup luksOpen /dev/sdb3 home_sdb3
Enter passphrase for /dev/sdb3: 
root@debian:~# vgchange -ay
  2 logical volume(s) in volume group "User-PC-vg" now active
root@debian:~# vgscan
  Found volume group "User-PC-vg" using metadata type lvm2
root@debian:~# vgscan -ay 
vgscan: invalid option -- 'a'
  Error during parsing of command line.
root@debian:~# vgchange -ay
  2 logical volume(s) in volume group "User-PC-vg" now active
root@debian:~# lvscan
  ACTIVE            '/dev/User-PC-vg/root' [<55.88 GiB] inherit
  ACTIVE            '/dev/User-PC-vg/home' [2.58 TiB] inherit
root@debian:~# mount /dev/User-PC-vg/root /mnt
root@debian:~# modprobe efivars
modprobe: FATAL: Module efivars not found in directory /lib/modules/5.10.0-10-amd64
root@debian:~# mount /dev/sdb1 /mnt/boot/efi
mount: /mnt/boot/efi: mount point does not exist.
root@debian:~# mount /dev/User-PC-vg/root /mnt
mount: /mnt: /dev/mapper/User--PC--vg-root already mounted on /mnt.
root@debian:~# mount /dev/sdb1 /mnt/boot/efi^C
root@debian:~# umount /mnt
root@debian:~# mkdir /media/linux
root@debian:~# mount /dev/User-PC-vg/root /media/linux/
root@debian:~# modprobe efivars
modprobe: FATAL: Module efivars not found in directory /lib/modules/5.10.0-10-amd64
root@debian:~# mount /dev/sdb1 /media/linux/boot/efi
mount: /media/linux/boot/efi: mount point does not exist.
root@debian:~# mount --bind /dev /media/linux/dev/
root@debian:~# mount --bind /dev/pts /media/linux/dev/pts
root@debian:~# mount --bind /proc /media/linux/proc
root@debian:~# mount --bind /sys /media/linux/sys
root@debian:~# chroot /media/linux
root@debian:/# mount /dev/sdb1 /boot/efi
mount: /boot/efi: mount point does not exist.
root@debian:/# mount /dev/sdb2 /boot


root@debian:~# chroot /media/linux
root@debian:/# mount /dev/sdb1 /boot/efi
root@debian:/# mount /dev/sdb2 /boot
mount: /boot: /dev/sdb2 already mounted on /boot.

root@debian:/etc/apt/sources.list.d# apt-get install --reinstall grub-efi-amd64
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 39.8 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main amd64 grub-efi-amd64 amd64 2.04-20 [39.8 kB]
Fetched 39.8 kB in 0s (271 kB/s)          
Preconfiguring packages ...
(Reading database ... 169682 files and directories currently installed.)
Preparing to unpack .../grub-efi-amd64_2.04-20_amd64.deb ...
Unpacking grub-efi-amd64 (2.04-20) over (2.04-20) ...
Setting up grub-efi-amd64 (2.04-20) ...
Installing for x86_64-efi platform.
grub-install: warning: EFI variables are not supported on this system..
Installation finished. No error reported.
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.10.0-11-amd64
Found initrd image: /boot/initrd.img-5.10.0-11-amd64
Found linux image: /boot/vmlinuz-5.10.0-10-amd64
Found initrd image: /boot/initrd.img-5.10.0-10-amd64
grub-probe: error: cannot find a GRUB drive for /dev/sdd1.  Check your device.map.
done
Processing triggers for shim-signed:amd64 (1.38+15.4-7) ...
root@debian:/etc/apt/sources.list.d#     apt-get install --reinstall grub-efi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  grub-efi
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,536 B of archives.
After this operation, 16.4 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main amd64 grub-efi amd64 2.04-20 [2,536 B]
Fetched 2,536 B in 0s (13.6 kB/s)    
Selecting previously unselected package grub-efi.
(Reading database ... 169682 files and directories currently installed.)
Preparing to unpack .../grub-efi_2.04-20_amd64.deb ...
Unpacking grub-efi (2.04-20) ...
Setting up grub-efi (2.04-20) ...
root@debian:/etc/apt/sources.list.d# update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.10.0-11-amd64
Found initrd image: /boot/initrd.img-5.10.0-11-amd64
Found linux image: /boot/vmlinuz-5.10.0-10-amd64
Found initrd image: /boot/initrd.img-5.10.0-10-amd64
grub-probe: error: cannot find a GRUB drive for /dev/sdd1.  Check your device.map.
done
root@debian:/etc/apt/sources.list.d# cat /boot/grub/device.map 
cat: /boot/grub/device.map: No such file or directory
root@debian:/etc/apt/sources.list.d# grub-mkdevicemap
root@debian:/etc/apt/sources.list.d# lsblk
NAME                    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                     7:0    0   2.1G  1 loop  
sda                       8:0    0 931.5G  0 disk  
├─sda1                    8:1    0   2.9G  0 part  
├─sda2                    8:2    0 771.2G  0 part  
├─sda3                    8:3    0     1K  0 part  
└─sda5                    8:5    0 157.4G  0 part  
sdb                       8:16   0   3.6T  0 disk  
├─sdb1                    8:17   0   512M  0 part  /boot/efi
├─sdb2                    8:18   0   1.9G  0 part  /boot
├─sdb3                    8:19   0   2.6T  0 part  
│ └─home_sdb3           253:0    0   2.6T  0 crypt 
│   ├─User--PC--vg-root 253:1    0  55.9G  0 lvm   /
│   └─User--PC--vg-home 253:2    0   2.6T  0 lvm   
├─sdb4                    8:20   0   100M  0 part  
├─sdb5                    8:21   0    16M  0 part  
├─sdb6                    8:22   0 101.5G  0 part  
├─sdb7                    8:23   0   644M  0 part  
├─sdb8                    8:24   0   100M  0 part  
└─sdb9                    8:25   0   100M  0 part  
sdc                       8:32   0 232.9G  0 disk  
├─sdc1                    8:33   0   529M  0 part  
├─sdc2                    8:34   0   100M  0 part  
├─sdc3                    8:35   0    16M  0 part  
├─sdc4                    8:36   0  87.7G  0 part  
└─sdc5                    8:37   0 144.5G  0 part  
sdd                       8:48   1   7.5G  0 disk  
├─sdd1                    8:49   1   2.4G  0 part  
└─sdd2                    8:50   1   2.6M  0 part  
root@debian:/etc/apt/sources.list.d# grub-install /dev/sdb
Installing for x86_64-efi platform.
grub-install: warning: EFI variables are not supported on this system..
Installation finished. No error reported.
root@debian:/etc/apt/sources.list.d# cat  /boot/grub/device.map 
(hd0)   /dev/disk/by-id/lvm-pv-uuid-kgnDO4-VKw7-Vw8c-71N3-ez6U-GoGj-T9lueq
(hd1)   /dev/disk/by-id/ata-ST1000VX000-1ES162_Z4YE5K37
(hd2)   /dev/disk/by-id/ata-WDC_WD40EJRX-89AKWY0_WD-WX32D21CZ08S
(hd3)   /dev/disk/by-id/ata-Samsung_SSD_850_EVO_250GB_S2R6NB0H926126V
(hd4)   /dev/disk/by-id/usb-JetFlash_Transcend_8GB_64E2V0LU-0:0

答案1

当绑定安装/syschroot 时,使用--rbind代替--bind,即

mount --rbind /sys /media/linux/sys

或者,在 chroot 后手动挂载efivarfs虚拟文件系统:/sys/firmware/efi/efivars

mount -t efivarfs none /sys/firmware/efi/efivars

grub-install将需要该文件系统来操作 EFI 启动变量。mount --rbind包括原始的任何子安装座,而常规则--bind忽略它们。

如果efivarfs文件系统似乎不可用,请确保您已启动实时媒体在 UEFI 模式下。如果您不小心在旧版 BIOS 模式下启动了实时媒体,则用于操作 EFI 启动变量的固件 API(由efivarfs)将不可用。

答案2

对我来说,我创建另一个带有标志 boot 和 efi 的 fat32 512MB 分区并再次安装 linux

相关内容