Ubuntu 16.10无法在MSI GP72笔记本电脑中启动
我基本上需要帮助弄清楚如何让Ubuntu 16.10 AMD64(Linux 4.8.0-22通用内核)成功启动系统,以便我可以回去实际使用它。 引导至16.04 LTS也是可接受的解决方案。
下面你会找到有关系统,我尝试过的东西以及我得到的结果的其他信息的部分。 提前感谢您提供的任何帮助。 前面的细节:哦!
摘要
我在今年7月份购买了这台MSI笔记本电脑,经过大量的故障排除后,我能够在其上安装Ubuntu 16.04 LTS AMD64并在过去几个月内使用它而没有问题。 (我将它作为双启动系统,另一侧使用Windows 10。)
几天前我从16.04 – > 16.10更新了,我再也无法让笔记本电脑启动了。 更糟糕的是,我甚至无法启动与最初的USB驱动器相同的16.04 LTS。 (尽管如此,Windows仍然会启动。)我第一次实现的解决方案(见下文)这次没有什么不同,我不知道为什么突然出现这种情况。
请注意,升级过程似乎正常完成。 我已经在以前的Ubuntu版本中遇到了几个类似的问题(例如14.04),但它们没有用或者不适用于我的情况。 我已经花了好几天时间……
当前行为和错误消息
这取决于我选择的引导选项,但这是尝试引导当前升级的16.10安装(包括引导命令)的概要:
基本命令是linux /vmlinuz-4.8.0-22-generic root=UUID... ro_quiet splash $vt_handoff
,所以我只列出选项之间的差异以便于阅读。
- 默认启动选项:如上所示的命令(当然具有完整的UUID)。
- 显示Ubuntu徽标后系统立即挂起。
- 在挂起之前按键显示控制台会显示没有消息写入它。
- 升级前引导命令:添加了
acpi_osi="Linux" pci=nomsi
参数。- 与上面相同的行为
- 这些论点是解决方案的一部分,以便在7月份安装16.04后再运行。
- 恢复模式1:这会添加
ro recovery nomodeset
内核参数- 大量输出显示服务入门
- 最后一条消息是
[OK] Started Light Display Manager.
(即lightdm
服务) - 屏幕在这里变黑,不再响应。
- 仅显示以下错误消息。
- 恢复模式2:与#3相同的恢复参数,但使用
acpi_osi="Linux" pci=nomsi
手动添加- 与#3基本相同的结果
我在选项3和4中看到的唯一错误是:
[FAILED] Failed to start NVIDIA Persistence Daemon. See 'systemctl status nvidia-percistenced.service' for details
启动过程不会挂起此故障。 启动过程一直持续到LightDM服务启动之后,但在您真正看到欢迎之前。
另外,我尝试使用systemctl
命令,但是:
- 挂系统不接受命令,和
- 我在之前的恢复尝试(
apt-get purge nvidia\*
)中实际上已经清除了nvidia-367
驱动程序/软件包,而不是官方页面中的更新版本。
在任何情况下,即使驱动程序是问题(例如,不能作为LKM加载),我(最多)期望欢迎和图形用户界面不显示,在这种情况下,我有终端登录并解决它。 但是,我无法做到那么远。
先前的故障排除尝试和结果
由于我之前已经看过(并解决了)其中的一些错误,因此我花了最后几天尝试完成这些步骤并在发布之前解决问题。 不幸的是,以前出现类似问题的事情(AFAIK)没有帮助。
最初成功的解决方案(这次没有工作)
当我在7月份进行故障排除时,这些是我所做的事情,帮助我解决了我的启动和登录问题:
- 将
acpi_osi="Linux"
内核参数添加到解决方法ACPI表错误中- 这些通常是由BIOS为Windows系统构建的,可能会导致Linux出现问题。
- 将
pci=nomsi
内核参数添加到此笔记本电脑的解决方法问题中- 如果没有此选项,内核将继续记录消息ad-infinitum并消耗分区中的可用空间,此选项可修复该问题。
- 禁用安全启动以允许在安装驱动程序后登录
- 基本上,我不能将Nouveau驱动程序用于我正在进行的项目。 我需要使用未签名的NVIDIA驱动程序(它在安装期间在本地构建),并且在安全启动世界中,是一个不受信任的内核模块。
- 在安全启动环境中,不允许未签名的内核模块按预期加载/工作,并且构建/安装NVIDIA驱动程序可以显示登录屏幕,但每次登录尝试都会在您到达桌面之前失败(它退回到登录屏幕)。
- 您必须禁用安全启动才能超越这一点(或者找到一种方法让Microsoft签署您的定制驱动程序(祝您好运),或者自己动手(再次祝好运)…
我这次尝试了这些东西以便重新安装16.10,但我没有看到相同的结果。 神秘之处在于,我甚至无法获得在7月工作的16.04,现在的行为方式与当时的情况相同。 我对此没有任何解释。
我曾经在以前的惠普笔记本电脑上使用pci=off
来解决启动问题,但是尝试使用MSI让我无处可去。
从Live USB启动失败
现在,尝试使用默认选项¹从实时USB启动16.04 LTS或16.10,在控制台中挂起以下消息:
... lvm2-monitor.service tmp.mount systemd-tmpfiles-setup.service resolvconf.service [ kernel-time] nouveau 0000:01:00.0: pci: failed to adjust lnkctl speed [ kernel-time] iwlwifi 0000:02:00.0: Unsuported splx structure [ kernel-time] NMI watchdog: BUG: soft lockup - CPU#4 stuck for 22s! [plymouthd:314] [ kernel-time] NMI watchdog: BUG: soft lockup - CPU#4 stuck for 23s! [plymouthd:314] [ kernel-time] ...... [ kernel-time] INFO: task systemd:1 blocked for more than 120 seconds. [ kernel-time] Tainted: GL 4.8.0-22-generic #24-Ubuntu ... [ kernel-time] INFO: rcu_sched self-detected stall on CPU [ kernel-time] NMI watchdog: ......
将acpi_osi="Linux" pci=nomsi
到live USB命令会产生稍微不同的输出,添加的关于pci_enable_msi failed - -22
错误行pci_enable_msi failed - -22
... lvm2-monitor.service tmp.mount systemd-tmpfiles-setup.service systemd-update-utmp.service [ kernel-time] nouveau 0000:01:00.0: pci: failed to adjust lnkctl speed [ kernel-time] pci_enable_msi failed - -22 [ kernel-time] iwlwifi 0000:02:00.0: Unsuported splx structure [ kernel-time] NMI watchdog: BUG: soft lockup - CPU#4 stuck for 23s! [plymouthd:314] [ kernel-time] INFO: rcu_sched self-detected stall on CPU
我之前已经看到了软锁定消息(在HP笔记本电脑中),我总是可以将它们追溯到BIOS中禁用的VT-d和CPU虚拟化选项,并启用它们可以快速解决该问题。 虽然我没有立即记住,如果我在7月份恢复了这些CPU停滞,如果我这样做了,那么我会以同样的方式解决它们。 (如果你想要运行虚拟机,你还需要虚拟化 – 例如虚拟机。)
我在网站上阅读了其他答案,其中一些建议禁用 CPU C状态,但这对我来说也不起作用。
相关的BIOS设置
以下是每个选项卡之前相关的设置,以及它们在16.04 – > 16.10升级之前工作的当前值。 请注意,我已经尝试了一些选项中的不同启用/禁用组合(例如,禁用超线程,c状态等),但没有成功。
高级选项卡
- 英特尔虚拟化技术:已启用
- VT-d:启用
- 超线程:已启用
- CPU C状态:已启用
启动选项卡
- 快速启动:启用
- 引导模式选择: UEFI
安全选项卡 – >安全启动菜单
- 安全启动:已禁用
- 安全启动模式:标准
脚注
- 实时USB中的默认启动命令:
linux /casper/vmlinuz.efi file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash ---
在发布问题后我很快就解决了这个问题,但在尝试发布我的答案之前我想确定一下。 请注意,除了我在OP中指定的内容之外, 不需要对BIOS / UEFI设置进行其他修改。
我的修复步骤
该过程基本如下:
- 添加内核参数:
nomodeset acpi_osi=
允许继续引导- 使用
acpi_osi="Linux"
起初不起作用; 它必须是空的,如上所示¹ - 您可以在GRUB菜单中按e编辑引导命令
- 使用
- 这允许从现场USB成功启动16.10。
- 在我的情况下,我去重新安装²
- 重新安装后,我将内核参数更改回
pci=nomsi acpi_osi="Linux"
我不确定为什么nomodeset
才能让系统首先启动,但实际上并不是必需的 ,这可能就是为什么我忘记了我在7月份解决原始16.04 LTS安装问题时可能已经完成了这个工作。 无论如何,我希望这可以帮助其他可能遇到类似问题的人。
永久改变
目前,您必须每次都编辑引导命令,并且快速变老。 要永久更新引导命令,请按照下列步骤操作:
- 以
root
身份打开/etc/default/grub
进行编辑- 来自终端的
sudo vim /etc/default/grub
- 为你喜欢的编辑器改变
vim
(例如nano
)
- 来自终端的
- 编辑此行,如下所示并保存更改
- 默认值:
GRUB_CMDLINE_LINUX=""
- 编辑:
GRUB_CMDLINE_LINUX="pci=nomsi acpi_osi=\"Linux\""
- 默认值:
- 运行
sudo update-grub2
命令以生成更新的/boot/grub/grub.cfg
文件- 切记不要直接编辑
/boot/grub/grub.cfg
- 切记不要直接编辑
如果你想知道pci=nomsi
参数,这可以防止内核用大量伪造的消息填满你的驱动器(即/var/log/syslog
)。 这似乎是MSI笔记本电脑特有的,因为我的台式机和以前的惠普笔记本电脑不需要这种解决方法。
脚注
- 如果您没有将
acpi_osi=
更改回acpi_osi="Linux"
,并且您已经安装了nvidia
驱动程序包,则登录尝试将失败,您将看到重新显示的欢迎程序。 您可以识别这一点,因为您的密码是正确的(即没有关于密码不匹配的错误消息),如果您按Ctrl + Alt + F1进入终端,则可以从那里成功登录。 - 如果你的
/home
目录在你自己的分区中(你应该这样,恕我直言),那么你只需确保将分区标记为使用相同的文件系统(例如ext4)和挂载点(即/home
),但是没有格式化它。 我还在安装期间重新输入了相同的帐户凭据。 请注意,旧帐户仍将位于/home
目录中,但如果使用“设置”>>“用户”,则可能不会显示,因为该帐户从/etc/passwd
读取。 您可能需要sudo adduser ...
才能让它们正确显示。 - 看看
nomodeset
做了什么?
我有相同的笔记本电脑,GP72-6qf ..现在运行Ubuntu。
- 确保您拥有最新的Bios和固件更新。 十月有一个新版本。
- 设置CPU C状态 :已禁用和快速启动 :已禁用
-
编辑文件
/etc/default/grub
并进行更改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
至
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi= acpi_backlight=none acpi=ht pci=nomsi"
然后运行
sudo update-grub
-
更新Ubuntu(
sudo apt update && sudo apt upgrade
)。
在我的情况下,我遇到了让Nvidia驱动程序在Ubuntu 16.04上运行的问题
我的修复:
add-apt-repository ppa:xorg-edgers/ppa apt-get update apt-get install nvidia-375 reboot