win10 + Ubuntu 双系统,重装后的引导修复,时间调整和启动项调整

时间:2023-03-09 22:03:30
win10 + Ubuntu 双系统,重装后的引导修复,时间调整和启动项调整

▶ 原先为 win10 + Ubuntu 双系统,使用 grub2 作引导,在重装了 win10 (升到了1803)后系统重写了引导,启动项里找不到 Ubuntu,需要修复。

● 参考【https://blog.csdn.net/piaocoder/article/details/50589667】

● 装一个 Ubuntu 的安装 U 盘,从U盘启动,Try Ubuntu without installing,进入以后设法联网

● 安装 boot-repair

$sudo su
——输入密码 #add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
——各种确定 #apt-get install -y boot-repair && boot-repair
——各种确定

● 看到窗口如下,点击 Recommended repair,或者在终端中输入 #recommended repair  开始修复。中间根据软件提示,可能需要在终端输入命令,删除和重装某些软件。

  win10 + Ubuntu 双系统,重装后的引导修复,时间调整和启动项调整

● 修复完成,重启以后就能以 grub2 的界面选择启动项目了。

▶ 时间同步,大意是 windows 将 bios 时间看做当地(Local)时间,而 Linux 将起看做 UTC 时间(然后再加地区偏移),在参考答案中有在 windows 中修正的,也有在 Ubuntu 中修正的,我使用了后一种。

● 参考【https://www.zhihu.com/question/46525639?sort=created】(多个方法),【https://zhuanlan.zhihu.com/p/24762788】(总结了 Ubuntu16 以前改 rcS 的方法和 Ubuntu16 以后的如下方法)

$sudo su
——输入密码 #apt-get install ntpdate
#ntpdate time.windows.com
#hwclock --localtime --systohc

▶ 引导项调整(顺序,默认项,等待时间)

● 参考【https://blog.csdn.net/lu_embedded/article/details/44353499】(详细的 grub 参数含义),【https://www.ssdax.com/2347.html】(正儿八经的修改参考)

● 文件 boot/grub/grub.cfg 是由文件 文件 /etc/default/grub 和 目录下 /etc/grub.d/ 的文件自动生成的,一旦 update-grub 就会刷新,改了没用

● 主要涉及调整文件 /etc/default/grub 和文件 /etc/grub.d/25_custom

● /etc/default/grub 的主要部分改成了:

GRUB_DEFAULT=                  # 默认启动项编号,从  开始,我的第  项是 windows
#GRUB_HIDDEN_TIMEOUT= # 单系统时隐藏倒计时,注释掉的话就不使用
GRUB_HIDDEN_TIMEOUT_QUIET=true # 仍倒计时但不显示?
GRUB_TIMEOUT= # 倒计时,小于零则无限等待,等于零则会被强改回等待10秒,在 /boot/grub/grub.cfg 中有一句 if [ "${timeout}" = 0 ]; then set timeout=10 fi
GRUB_DISTRIBUTOR=`lsb_release -i -s > /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="acpi_backlight=vendor"

● /etc/grub.d/25_custom 中把各个启动模块全部注释掉(最重要的 Ubuntu,Ubuntu Advanced 和 Windows Boot Manager 都不是在这里定义的)

#!/bin/sh
exec tail -n + $ #menuentry "Windows UEFI bootmgfw.efi" {
#search --fs-uuid --no-floppy --set=root 36E1-3F21
#chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
#} #menuentry "Windows Boot UEFI loader" {
#search --fs-uuid --no-floppy --set=root 36E1-3F21
#chainloader (${root})/EFI/Boot/bkpbootx64.efi
#} #menuentry "EFI/ubuntu/MokManager.efi" {
#search --fs-uuid --no-floppy --set=root 36E1-3F21
#chainloader (${root})/EFI/ubuntu/MokManager.efi
#} #menuentry "efi/EFI/Boot/bkpbootx64.efi" {
#search --fs-uuid --no-floppy --set=root ae416b9e-c4d4--82ee-673b949938db
#chainloader (${root})/efi/EFI/Boot/bkpbootx64.efi
#} #menuentry "efi/EFI/ubuntu/MokManager.efi" {
#search --fs-uuid --no-floppy --set=root ae416b9e-c4d4--82ee-673b949938db
#chainloader (${root})/efi/EFI/ubuntu/MokManager.efi
#}

● 之后记得在终端里 update-grub。update-grub2命令实际上是指向 update-grub 的,所以输入两者等效。

---2020年3月3日---

● NV 显卡驱动对 Linux 内核版本有上下限制,过高或过低都不能安装和运行,参考【https://wangcong.net/article/LinuxNvidiaCUDATensorFlowVersion.html】

在某次更新后我的内核变成了 5.3.0(uname -r 获取信息),nvidia-smi 都没了,安装显卡驱动或 CUDA 时报错 “The driver installation is unable to locate the kernel source”

查到 CUDA10.0 要求的 Ubuntu 内核版本是 5.0.0,去看 /usr/src 目录,发现既有原来的 5.0.0-40 内核又有新的 5.3.0内核。重启时进入 Adanvce mode,选择原来的低版本内核进入系统,就能正常安装和运行了。

安装和删除内核的办法: sudo apt-get --purge remove linux-headers-5.3.* , sudo apt-get install linux-headers-5.0.- linux-headers-5.0.--generic

Grub 默认使用最高版本的内核来启动系统,换成低版本内核后要删除残留的高版本。