我基本上需要帮助弄清楚如何让 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
,因此为了便于阅读,我仅列出选项之间的差异。
- 默认启动选项:命令如上所示(当然带有完整的 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
命令,但是:
- 挂起的系统不接受命令,并且
- 实际上,我
nvidia-367
在之前的恢复尝试(apt-get purge nvidia\*
)中已经清除了驱动程序/包,转而使用来自官方页面的较新版本。
无论如何,即使驱动程序是问题所在(例如无法作为 LKM 加载),我(最多)希望欢迎界面和图形用户界面能够不是出现,在这种情况下,我会登录终端并解决问题。但是,我做不到那么远。
先前的故障排除尝试和结果
由于我之前见过(并解决过)其中一些错误,因此我花了几天时间尝试完成这些步骤并解决问题,然后才在此发布。不幸的是,以前对类似问题有效的方法(据我所知)没有帮助。
最初成功的解决方案(这次不起作用)
当我在 7 月份进行故障排除时,我做了以下事情来帮助我解决启动和登录问题:
- 添加
acpi_osi="Linux"
内核参数来解决 ACPI 表错误- 这些通常是由 BIOS 为 Windows 系统构建的,并且可能会在 Linux 上造成问题。
- 添加
pci=nomsi
内核参数以解决此笔记本电脑的问题- 如果没有这个选项,内核将继续记录一条消息无限并侵蚀分区中的可用空间,此选项解决了该问题。
- 禁用安全启动以允许在驱动程序安装后登录
- 基本上,我无法将 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 状态等),但没有成功。
高级选项卡
- 英特尔虚拟化技术:已启用
- VT-d:已启用
- 超线程:已启用
- CPU C 状态:已启用
启动选项卡
- 快速启动:已启用
- 启动模式选择:UEFI
安全选项卡 -> 安全启动菜单
- 安全启动:已禁用
- 安全启动模式:标准
脚注
- live USB 中的默认启动命令:
linux /casper/vmlinuz.efi file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash ---
答案1
我在发布问题后不久就解决了这个问题,不过我想在发布答案之前先确定一下。请注意不除了我在 OP 中已经指定的内容之外,还需要对 BIOS/UEFI 设置进行额外的修改。
我的修复步骤
该过程基本上如下:
- 添加内核参数:
nomodeset acpi_osi=
以允许启动继续- 一开始使用
acpi_osi="Linux"
不起作用;它必须是空的,如上所示¹ - e您可以通过在 GRUB 菜单中按下来编辑启动命令
- 一开始使用
- 这允许从实时 USB 成功启动 16.10。
- 就我而言,我选择重新安装²
- 重新安装后,我将内核参数改回
pci=nomsi acpi_osi="Linux"
我不确定为什么nomodeset
需要³才能启动系统首先,但其实没有必要事后,这可能就是为什么我忘记了我在 7 月份排除原始 16.04 LTS 安装故障时可能已经做过这件事。无论如何,我希望这对遇到类似问题的人有所帮助。
使改变永久化
目前,你每次都必须编辑启动命令,这很快就会过时。要更新启动命令永久, 按着这些次序:
- 打开
/etc/default/grub
进行编辑,如root
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 笔记本电脑,因为我的台式机和以前的 HP 笔记本电脑不需要这种解决方法。
脚注
- 如果您不改
acpi_osi=
回acpi_osi="Linux"
,并且安装了nvidia
驱动程序包,登录尝试将失败,您将看到重新显示欢迎界面。您可以识别这一点,因为您的密码是正确的(即没有关于密码不匹配的错误消息),并且如果您进入Ctrl终端,您可以从那里成功登录。AltF1 - 如果你的
/home
目录位于自己的分区中(恕我直言,你应该这样做),那么你只需确保将该分区标记为使用相同的文件系统(例如 ext4)和挂载点(即/home
),但没有格式化。我还在安装过程中重新输入了相同的帐户凭据。请注意,旧帐户仍将保留在您的/home
目录中,但如果您使用“设置”>>“用户”,则可能不会显示,因为该操作是从中读取的/etc/passwd
。您可能需要sudo adduser ...
让它们正确显示。 - 看做什么
nomodeset
?
答案2
我有同样的笔记本电脑,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
)。
答案3
就我而言,我在 Ubuntu 16.04 上运行 Nvidia 驱动程序时遇到了问题
我的解决方法:
add-apt-repository ppa:xorg-edgers/ppa
apt-get update
apt-get install nvidia-375
reboot