从ubuntu 16.04(Dell XPS 15)重启后BIOS不检测SSD

重新启动ubuntu导致笔记本电脑无法启动,除非我有一个可启动的USB或我的SSD插入以外的东西。从Windows或ubuntu再次关闭和启动工作正常,从Windows重新启动也是如此。 我尝试更新BIOS,重新安装了许多不同的ubuntu版本(包括16.04.3和17.10),但两者都存在相同的问题。 可能还值得一提的是,如果我实际上没有安装ubuntu,问题仍然存在,但是从我的可启动USB的“Try ubuntu”选项重启。 我的规格:

戴尔XPS 15 9950:

SSD:三星NVMe PM951 512GB

处理器:Intel i7-6700HQ(2.6 Ghz)

GPU:Intel Graphics 530 / NVIDIA GeForce 960M

根据我发现的所有教程,我确实将SATA操作从RAID On切换到AHCI,而Windows处于安全模式。 分区是使用默认分区管理器完成的(尽管我在从实时操作系统重新启动时尝试使用完整的分区)。 安全启动从BIOS关闭,我也从我之前安装的Linux中取消激活它。 在此过程中,我还多次重置Windows 10。 最后,我知道发布了一个几乎完全相同的问题,但它既没有赞成也没有回复,而且我的智慧结束了。 我可能不介意放弃Ubuntu并安装Debian,但我不知道如何(我是linux新手,没有可用的教程)。

PS:在某个时刻,我有一个正常工作的ubuntu 16.04(可能是16.04.1,因为我使用的棒是好几个月),但升级到17.10出错了,我决定重新安装。

编辑:我还以为我应该提一下这样一个事实:在重新启动时,PC直接转到戴尔支持协助,并说“硬盘没有安装”(或硬盘,不记得),除了这个问题,ubuntu似乎工作正常。

也许你不再担心,但我和你有同样的问题。

经过大量研究后,我找到了问题的根源。

在内核版本4.11中,他们添加了一个节省电量的NVMe控制器。 在内核版本4.11.0rc7之后,他们在这个补丁中添加了:

static const struct nvme_core_quirk_entry core_quirks[] = { /* * Seen on a Samsung "SM951 NVMe SAMSUNG 256GB": using APST causes * the controller to go out to lunch. It dies when the watchdog * timer reads CSTS and gets 0xffffffff. */ { .vid = 0x144d, .fr = "BXW75D0Q", .quirks = NVME_QUIRK_NO_APST, }, 

显然这会导致我们的SSD在重新启动时出现问题,因此无法检测到它。 如果你想切换到除Debian之外的其他发行版或者想要更改内核,请确保使用v4.11.0rc7或更低版​​本的内核。

现在,我唯一的问题是:是否可以在较新的内核中禁用它? 我真的不知道如何去做这件事。 我希望它像添加启动参数一样简单。

我在使用内核4.16的Dell XPS 15 9550上遇到了同样的问题; 经过大量的研究,我发现了一个适合我的解决方案:

TLDR :使用内核参数nvme_core.default_ps_max_latency_us=4950引导

  • 我这样做是通过修改/etc/default/grub GRUB_LINUX_CMDLINE_DEFAULT然后运行sudo grub-install

问题

正如Cristian Velasquez Ramos早先在此帖中发布的那样 ,为NVMe Samsung 950(固件ID: BXV76D0Q )禁用APST(自治电源状态转换)的怪癖被合并到主线内核4.11.0rc7中以修复如下错误:

来自linux-nvme邮件列表的讨论 :

戴尔XPS 15 9550和Precision 5510笔记本电脑(基本上是同一台笔记本电脑)中的三星950系列固态硬盘如果允许使用最深的APST状态,则会丢失其PCIe链路。 三星工程师有一个受影响的系统,正在努力。 其他机器(即使是XPS 13)中的相同SSD也可以正常工作。

由于这个怪癖,我们设备的默认APST控制器状态设置为关闭 ,这导致我们看到的软重启问题。

这是关于合并到主线4.11的怪癖的讨论 :

我们需要以某种方式禁用怪癖以解决软重启的问题。

我们可以通过使用nvme_core.force_apst=1来完全禁用这个怪癖,但这可能会导致长时间使用后读/写错误(在3天的正常运行时间后发生这种情况)。 因此,简单地覆盖apst将不起作用。

但是,我们可以使用内核参数禁用最低功耗状态: nvme_core.default_ps_max_latency_us=4950

这解决了所有问题! 再次感谢Cristian Velasquez Ramos的修复。