概括

概括

我基本上需要帮助弄清楚如何让 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

启动过程确实不是挂起此故障。启动过程持续到 LightDM 服务启动之后,但在您实际看到欢迎界面之前。

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

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

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

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

由于我之前见过(并解决过)其中一些错误,因此我花了几天时间尝试完成这些步骤并解决问题,然后才在此发布。不幸的是,以前对类似问题有效的方法(据我所知)没有帮助。

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

当我在 7 月份进行故障排除时,我做了以下事情来帮助我解决启动和登录问题:

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

这次我重新安装 16.10 时尝试了这些方法,但没有看到相同的结果。奇怪的是,我甚至无法让 7 月份运行正常的 16.04 现在的行为与当时相同。我对此没有任何解释。

我之前也曾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>...

将添加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

我以前见过软锁定消息(在 HP 笔记本电脑中),我可以总是将它们追溯到 VT-d 和 CPU 虚拟化选项已禁用在 BIOS 中,启用它们可以快速解决该问题。虽然我不记得我在 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 ---

答案1

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


我的修复步骤

该过程基本上如下:

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

我不确定为什么nomodeset需要³才能启动系统首先,但其实没有必要事后,这可能就是为什么我忘记了我在 7 月份排除原始 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终端,您可以从那里成功登录。AltF1
  2. 如果你的/home目录位于自己的分区中(恕我直言,你应该这样做),那么你只需确保将该分区标记为使用相同的文件系统(例如 ext4)和挂载点(即/home),但没有格式化。我还在安装过程中重新输入了相同的帐户凭据。请注意,旧帐户仍将保留在您的/home目录中,但如果您使用“设置”>>“用户”,则可能不会显示,因为该操作是从中读取的/etc/passwd。您可能需要sudo adduser ...让它们正确显示。
  3. 做什么nomodeset

答案2

我有同样的笔记本电脑,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)。

答案3

就我而言,我在 Ubuntu 16.04 上运行 Nvidia 驱动程序时遇到了问题

我的解决方法:

add-apt-repository ppa:xorg-edgers/ppa
apt-get update
apt-get install nvidia-375
reboot

相关内容