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 ,所以我只列出选项之间的差异以便于阅读。

  1. 默认启动选项:如上所示的命令(当然具有完整的UUID)。
    • 显示Ubuntu徽标后系统立即挂起。
    • 在挂起之前按键显示控制台会显示没有消息写入它。
  2. 升级前引导命令:添加了acpi_osi="Linux" pci=nomsi参数。
    • 与上面相同的行为
    • 这些论点是解决方案的一部分,以便在7月份安装16.04后再运行。
  3. 恢复模式1:这会添加ro recovery nomodeset内核参数
    • 大量输出显示服务入门
    • 最后一条消息是[OK] Started Light Display Manager. (即lightdm服务)
    • 屏幕在这里变黑,不再响应。
    • 仅显示以下错误消息。
  4. 恢复模式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命令,但是:

  1. 挂系统不接受命令,和
  2. 我在之前的恢复尝试( apt-get purge nvidia\* )中实际上已经清除了nvidia-367驱动程序/软件包,而不是官方页面中的更新版本。

在任何情况下,即使驱动程序是问题(例如,不能作为LKM加载),我(最多)期望欢迎和图形用户界面显示,在这种情况下,我有终端登录并解决它。 但是,我无法做到那么远。

先前的故障排除尝试和结果

由于我之前已经看过(并解决了)其中的一些错误,因此我花了最后几天尝试完成这些步骤并在发布之前解决问题。 不幸的是,以前出现类似问题的事情(AFAIK)没有帮助。

最初成功的解决方案(这次没有工作)

当我在7月份进行故障排除时,这些是我所做的事情,帮助我解决了我的启动和登录问题:

  1. acpi_osi="Linux"内核参数添加到解决方法ACPI表错误中
    • 这些通常是由BIOS为Windows系统构建的,可能会导致Linux出现问题。
  2. pci=nomsi内核参数添加到此笔记本电脑的解决方法问题中
    • 如果没有此选项,内核将继续记录消息ad-infinitum并消耗分区中的可用空间,此选项可修复该问题。
  3. 禁用安全启动以允许在安装驱动程序后登录
    • 基本上,我不能将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状态等),但没有成功。

高级选项卡

  1. 英特尔虚拟化技术:已启用
  2. VT-d:启用
  3. 超线程:已启用
  4. CPU C状态:已启用

启动选项卡

  1. 快速启动:启用
  2. 引导模式选择: UEFI

安全选项卡 – >安全启动菜单

  1. 安全启动:已禁用
  2. 安全启动模式:标准

脚注

  1. 实时USB中的默认启动命令: linux /casper/vmlinuz.efi file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash ---

在发布问题后我很快就解决了这个问题,但在尝试发布我的答案之前我想确定一下。 请注意,除了我在OP中指定的内容之外, 不需要对BIOS / UEFI设置进行其他修改。


我的修复步骤

该过程基本如下:

  1. 添加内核参数: nomodeset acpi_osi=允许继续引导
    • 使用acpi_osi="Linux"起初不起作用; 它必须是空的,如上所示¹
    • 您可以在GRUB菜单中按e编辑引导命令
  2. 这允许从现场USB成功启动16.10。
    • 在我的情况下,我去重新安装²
  3. 重新安装后,我将内核参数更改回pci=nomsi acpi_osi="Linux"

我不确定为什么nomodeset才能让系统首先启动,但实际上并不是必需 ,这可能就是为什么我忘记了我在7月份解决原始16.04 LTS安装问题时可能已经完成了这个工作。 无论如何,我希望这可以帮助其他可能遇到类似问题的人。


永久改变

目前,您必须每次都编辑引导命令,并且快速变老。 要永久更新引导命令,请按照下列步骤操作:

  1. root身份打开/etc/default/grub进行编辑
    • 来自终端的sudo vim /etc/default/grub
    • 为你喜欢的编辑器改变vim (例如nano
  2. 编辑此行,如下所示并保存更改
    • 默认值: GRUB_CMDLINE_LINUX=""
    • 编辑: GRUB_CMDLINE_LINUX="pci=nomsi acpi_osi=\"Linux\""
  3. 运行sudo update-grub2命令以生成更新的/boot/grub/grub.cfg文件
    • 切记不要直接编辑/boot/grub/grub.cfg

如果你想知道pci=nomsi参数,这可以防止内核用大量伪造的消息填满你的驱动器(即/var/log/syslog )。 这似乎是MSI笔记本电脑特有的,因为我的台式机和以前的惠普笔记本电脑不需要这种解决方法。


脚注

  1. 如果您没有将acpi_osi=更改回acpi_osi="Linux" ,并且您已经安装了nvidia驱动程序包,则登录尝试将失败,您将看到重新显示的欢迎程序。 您可以识别这一点,因为您的密码是正确的(即没有关于密码不匹配的错误消息),如果您按Ctrl + Alt + F1进入终端,则可以从那里成功登录。
  2. 如果你的/home目录在你自己的分区中(你应该这样,恕我直言),那么你只需确保将分区标记为使用相同的文件系统(例如ext4)和挂载点(即/home ),但是没有格式化它。 我还在安装期间重新输入了相同的帐户凭据。 请注意,旧帐户仍将位于/home目录中,但如果使用“设置”>>“用户”,则可能不会显示,因为该帐户从/etc/passwd读取。 您可能需要sudo adduser ...才能让它们正确显示。
  3. 看看nomodeset做了什么?

我有相同的笔记本电脑,GP72-6qf ..现在运行Ubuntu。

  1. 确保您拥有最新的Bios和固件更新。 十月有一个新版本。
  2. 设置CPU C状态 :已禁用和快速启动 :已禁用
  3. 编辑文件/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

  4. 更新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