Ubuntu 16.10 无法在 MSI GP72 笔记本电脑中启动

cod*_*edd 4 boot uefi msi 16.04 16.10

我基本上需要帮助弄清楚如何让 Ubuntu 16.10 AMD64(Linux 4.8.0-22 通用内核)成功启动系统,以便我可以回去实际使用它。引导至 16.04 LTS 也是一种可接受的解决方案。

您将在下面找到包含有关系统的其他信息、我尝试过的方法以及获得的结果的部分。在此先感谢您提供的任何帮助。详细信息:O!

概括

我在今年 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
Run Code Online (Sandbox Code Playgroud)

引导过程不会因此故障挂起。引导过程一直持续到 LightDM 服务启动之后,但在您实际看到欢迎程序之前。

另外,我会尝试该systemctl命令,但是:

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

在任何情况下,即使驱动程序是问题(例如,无法作为 LKM 加载),我(至多)希望欢迎程序和图形 UI不会出现,在这种情况下,我将拥有终端登录并解决它。但是,我不能走那么远。

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

由于我之前已经看到(并解决了)其中的一些错误,因此我花了最近几天的时间尝试完成这些步骤并在此处发布之前解决问题。不幸的是,以前对类似问题有效的方法(AFAIK)无济于事。

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

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

  1. 添加acpi_osi="Linux"内核参数以解决 ACPI 表错误
    • 这些通常是由 BIOS 为 Windows 系统构建的,可能会导致 Linux 出现问题。
  2. pci=nomsi 内核参数添加到此笔记本电脑的解决方法问题
    • 如果没有这个选项,内核会无限地记录一条消息并占用分区中的可用空间,而这个选项解决了这个问题。
  3. 禁用安全启动以允许在驱动程序安装后登录
    • 基本上,我不能将 Nouveau 驱动程序用于我正在处理的项目。我需要使用未签名的 NVIDIA 驱动程序(它在安装期间在本地构建),并且在安全启动世界中,它是一个不受信任的内核模块。
    • 在安全启动环境中,不允许未签名的内核模块按照您的预期加载/工作,并且构建/安装 NVIDIA 驱动程序会显示登录屏幕,但每次登录尝试都会在您到达桌面之前失败(它直接返回登录屏幕)。
    • 您必须禁用安全启动才能通过这一点(或找到一种方法让 Microsoft 签署您的自定义驱动程序(祝您好运),或自己动手(再次祝您好运)...

这次我为 16.10 重新安装尝试了这些东西,但我没有看到相同的结果。神秘的是,我什至无法让 16.04 在 7 月份工作,现在的行为方式与当时相同。我对此没有任何解释。

我也曾pci=off在以前的 HP 笔记本电脑上使用过来解决启动问题,但在 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] ...<same message>...
[ kernel-time] INFO: task systemd:1 blocked for more than 120 seconds.
[ kernel-time]       Tainted: G             L 4.8.0-22-generic #24-Ubuntu
...
[ kernel-time] INFO: rcu_sched self-detected stall on CPU
[ kernel-time] NMI watchdog: ...<same message>...
Run Code Online (Sandbox Code Playgroud)

添加acpi_osi="Linux" pci=nomsi到 live USB 命令会产生略有不同的输出,添加的错误行约为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
Run Code Online (Sandbox Code Playgroud)

我之前(在 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. live USB 中的默认启动命令: linux /casper/vmlinuz.efi file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash ---

cod*_*edd 5

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


我的修复步骤

该过程基本上如下:

  1. 添加内核参数:nomodeset acpi_osi=允许引导继续
    • 使用一开始acpi_osi="Linux"没用;它必须是空的,如上所示¹
    • 您可以通过按eGRUB 菜单中的来编辑引导命令
  2. 这允许从实时 USB 成功启动 16.10。
    • 就我而言,我进行了重新安装²
  3. 重新安装后,我将内核参数改回 pci=nomsi acpi_osi="Linux"

我不知道为什么nomodeset³必要让系统开机的第一,但不是真的有必要在事后,这可能是为什么我忘了,我大概已经做到了这一点早在7月,当时我troubleshooted我原来的16.04 LTS安装。无论如何,我希望这可以帮助其他可能遇到类似问题的人。


永久更改

目前,您每次都必须编辑引导命令,这很快就会过时。要永久更新引导命令,请执行以下步骤:

  1. 打开/etc/default/grub编辑,如root
    • 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 笔记本电脑特有的,因为我的台式机和以前的 HP 笔记本电脑不需要这种解决方法。


脚注

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