问题:由于Windows更新导致Linux引导丢失
- 工具:kali系统U盘一个
制作kali系统盘
- 工具:
Win32 Disk Imager
unetbootin
kali-iso文件
U盘-8G以上
- 步骤:
- 打开win32,选择U盘,选择iso文件,勾选MD5,然后写入U盘
- unetbootin:点击iso,选择刚才使用的kali-iso文件,U盘是win32处理过的在保留文件空间的选项一般写入4096MB选择发行版本自己看着选(我没选)
开始修复
- 我的系统的情况是:手动分了五个分区,分别是/, /usr, /home, /var, /boot
- 通过USB启动系统盘,进入live模式(启动界面的第一个选项)
- 获取root最高权限:
sudo -i
- 查看kali系统装载在哪些盘里:
fdisk -l
- 挂载分区:
- 分清况:
i.当系统没有分区安装,只有一个根目录时只需要挂载根目录盘符就好了
mount /dev/sda# /mnt
然后再挂载:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
再chroot到硬盘上的linux系统
chroot /mnt
安装&更新Grub
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
修复成功后,卸载设备,退出chroot环境,重启
exit #退出chroot环境
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt
reboot
注:我的系统是手动分区,上面方法不适用,只是记录下来
ii.对于手动分区的系统:
- 我的系统分区:/ /home /usr /var /boot 这五个分区,所以需要全部挂载上去,除此之外还要挂载EFI分区才可以正常执行grub更新过程
mount /dev/sda# /mnt #挂载root分区
mount /dev/sda# /mnt/boot #挂载boot分区,如果boot没有单独分区,默认在根目录下,不用在单独挂载
mkdir -p /mnt/boot/efi #创建EFI分区的挂载点
mount /dev/sda# /mnt/boot/efi #挂载EFI分区
mount /dev/sda# /mnt/usr #挂载usr分区
mount /dev/sda# /mnt/var #挂载var
- 上面的/dev/sda#,根据fdisk -l 列出的盘符数字,找到对应各个分区替换成对应的数字
- /home分区我当时没有挂载也没有报错,所以可以不用挂载
继续挂载
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
进入chroot环境:
chroot /mnt
开始安装grub:
apt-get install grub-efi-amd64
grub-install --recheck --no-floppy --force #把grub的boot loader安装在EFI分区上
echo "configfile (hd0,gpt#)/boot/grub.cfg" > /boot/efi/EFI/grub.cfg
#让grub从/boot加载grub.cfg
#我记得当时是这个文件夹,就是在/boot下查找grub.cfg这个文件,找到之后把路径记下来就好了
#关于(hd0,gpt#) 和boot在的/dev/sda 是一个数字标志符
update-grub #创建grub menu list
退出chroot环境
exit
开始卸载每一个挂载的盘,如果显示不能卸载,使用umount -l /mnt/...,强制卸载
重启:
reboot
重启后进入linux,出现了见不到windows引导的情况
进入系统执行
apt-get update
apt-get upgrade
apt-get dist-upgrade
再重启就有了
参考:
https://m.jb51.net/LINUXjishu/243616.html
https://blog.csdn.net/flyoutsan/article/details/51971236