我在扩展分区中安装了 Windows 8.1 和 Kali Linux。出于某种原因,我只格式化了安装和重新安装 Windows 的分区。现在它只启动到 Windows 并且不显示 grub。
我正在使用实时 USB 并尝试重新安装 grub:
grub-install --boot-directory=/mnt/boot /dev/sda
Run Code Online (Sandbox Code Playgroud)
并得到错误:
grub-install :command not found
Run Code Online (Sandbox Code Playgroud)
要添加到用户提供的答案@kirill-a
并使其更加充实:
这是我最近在 Windows 8 和 Debian 8 双引导机器上恢复 GRUB 引导加载程序的操作,在重新安装 Windows 8 后从磁盘开头清除了以前的 GRUB 引导加载程序条目。
修复 GRUB2:Linux 上的 Live USB/CD 'chroot' 方法:
这些说明通常适用于基于 Debian 的发行版上的未加密、非 LVM 磁盘,在基于 RHEL/SUSE 和可能基于 Arch 的发行版下使用的目录名称和实用程序需要进行微小更改。
从您选择的发行版的可启动 Live USB 或 CD 开始。
lsblk
以确定内核名称描述符(即/dev/xxyN
该块设备)与丢失或损坏的GRUB引导装载程序。以下所有操作都必须以 root 身份完成(使用su
或sudo
)。
为已安装的 Linux 创建一个临时挂载点:
mkdir -p /mnt/linux
Run Code Online (Sandbox Code Playgroud)
(如果-p
父目录/mnt
尚不存在,则该选项会创建父目录)
使用/dev/xxyN
上一个lsblk
命令:
mount /dev/xxyN /mnt/linux
Run Code Online (Sandbox Code Playgroud)仅当您有单独的/boot
分区时才需要以下命令;/dev/xxyN
这里代表您的/boot
分区的内核名称描述符。
mount /dev/xxyN /mnt/linux/boot
Run Code Online (Sandbox Code Playgroud)然后:
mount -t proc none /mnt/linux/proc
mount -t sysfs sys /mnt/linux/sys
mount -o bind /dev /mnt/linux/dev
mount -t devpts pts /mnt/linux/dev/pts
chroot /mnt/linux /bin/bash
grep -v rootfs /proc/mounts > /etc/mtab
grub-install /dev/xxy
Run Code Online (Sandbox Code Playgroud)
(此处,dev/xxy
= 安装 GRUB 引导加载程序的设备名称和编号,例如/dev/sda
,不包括根分区编号,如/dev/sda1
)
如果您想对 GRUB 进行任何其他更改/自定义,现在是编辑/etc/default/grub
文件并保存的时候了。
grub-mkconfig -o /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)重新启动并验证。
注意:如果您的 GRUB2 引导加载程序驻留在具有 LVM LV 根和/或加密根卷的 linux 系统上,则此过程还有几个额外的步骤。随时在这里给我发消息,我已经写下这些附加说明,并已成功将它们多次应用于 ssd 上的 LVM LV,其中包含使用内核 dm-crypt 模块加密的根卷。
您需要chroot
到已安装的系统并从那里重新安装 grub:
mount /dev/sda(number of partition with kali) /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt bash
grub-install --boot-directory=/mnt/boot /dev/sda
update-grub
exit
reboot
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
90061 次 |
最近记录: |