Intel 760P NVMe SSD安装UBuntu 16.04 所遇到的问题

使用NVMe PCIE的SSD安装UBuntu 16.04存在以下几个问题,导致无法进入桌面:

        (1) Couldn't get size: 0x8000000000000000e

        (2) radeon 0000:01:00.0: Invalid PCI ROM header signature: excepting 0xaa55, got 0xffff

        (3) nvme nvme1: ignoring ctrl due to duplicate subnqn (nnqn.2017-12.org.nvmexpress:uuid:)

        问题(1)之前还应该有一个提示,拍照时没有拍到。问题(1)不知道是什么问题,问题(2)查到说是AMD的显卡驱动的问题,也是和NVMe有关的问题,老外那个帖子抱怨了一下AMD的驱动,也没有人给出解决方案。问题(3)也是NVMe驱动问题,搜索了一下,也没找到相关的解决方案。

经过仔细排查, 再次总结一下,以免给人以误导.

     问题(3)的确是由于安装了2块Intel的NVMe SSD导致(由于2块SSD同时提交NQN请求导致,详见后面的内容),还好手头有一块三星的NVMe SSD,换上之后不再有问题(3)。但是问题(1)、(2)和(4)在升级内核后问题依然存在,刚开始还以为是UBuntu对NVMe的支持不好,但是使用SATA固态硬盘克隆系统之后,问题依然存在,所以确定不是NVMe的问题。突然想起在升级新内核的过程中提示了较多的关于firmware的警告信息,当时没有留意,也没有将警告信息保存起来。由于原来还备份了一份系统,于是使用系统备份克隆,刚开始还没有问题,可使用过程中,提示关键更新,于是就单击更新开始更新,更新完后,也看到了少量的关于firmware的警告信息,并且提示将内核升级到了4.15.0-47,同时自动将原来的4.15.0-45内核删除。再次启动,问题又出现了,并且无法进入桌面。于是确定应该是内核版本太高和firmware不匹配,不想折腾firmware,于是在rescue模式下删除新内核4.15.0-47(在启动界面直接启动旧版本4.15.0-46,仍然无法进入桌面,但是正好可以删除新内核),reboot后,没有提示错误,顺利进入桌面。
     在这过程中找到几个有用的网站:
    https://pkgs.org/, you can search all packages of linux
    https://kernel.ubuntu.com/~kernel-ppa/, kernels of Ubuntu
    https://mirrors.kernel.org/, a mirror web for kernels of linux
    https://packages.ubuntu.com/, pakages of ubuntu
    https://launchpad.net/ubuntu/+source/linux-firmware, firmware for ubuntu
    http://ftp.sjtu.edu.cn/, mirror web for linux

关于firware:
    硬件越来越复杂,硬件的许多功能使用了程序实现,与直接硬件实现相比,固件拥有处理复杂事物的灵活性和便于升级、维护等优点。固件(firmware)就是这样的一段在设备硬件自身中执行的程序,通过固件标准驱动程序才能实现特定机器的操作,如:光驱、刻录机等都有内部的固件。来自于博文(Linux设备模型firmware(固件): https://blog.csdn.net/u014379540/article/details/52496647),也可以看看另外一篇博文(如何在 Linux 上安装/更新 Intel 微码固件 | Linux 中国:https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79472688)
    如何更新firmware:
    sudo apt-get update
    sudo apt-get install linux-firmware

    我没有更新firmware,一是不想再折腾,怕遇到内核版本与固件版本不匹配的情形,另外,看了一下系统中固件(/lib/firmware)中文件的时间,基本上和最新固件发布的时间相同,于是就没有更新。


        问题(3)在Ubuntu的BUG提交网查到:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1811755,BUG提交人看似是通过更新Linux内核版本解决了该问题。

This commit can fix your issue:

commit 6299358d198a0635da2dd3c4b3ec37789e811e44
Author: James Dingwall <email address hidden>
Date: Tue Jan 8 10:20:51 2019 -0700

    nvme: introduce NVME_QUIRK_IGNORE_DEV_SUBNQN

    If a device provides an NQN it is expected to be g

commit 6299358d198a0635da2dd3c4b3ec37789e811e44
Author: James Dingwall <email address hidden>
Date: Tue Jan 8 10:20:51 2019 -0700

    nvme: introduce NVME_QUIRK_IGNORE_DEV_SUBNQN

    If a device provides an NQN it is expected to be globally unique.
    Unfortunately some firmware revisions for Intel 760p/Pro 7600p devices did
    not satisfy this requirement. In these circumstances if a system has >1
    affected device then only one device is enabled. If this quirk is enabled
    then the device supplied subnqn is ignored and we fallback to generating
    one as if the field was empty. In this case we also suppress the version
    check so we don't print a warning when the quirk is enabled.

问题(1)~(3)的解决方案:升级Linux内核

# 看一下当前Linux内核版本
uname -sr
# Linux 4.18以后的内核依赖于libssll(>=1.1.0),到https://packages.ubuntu.com/bionic/下载libssll 1.1.0版本
wget -c http://kr.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4.3_amd64.deb
# 安装libsll
sudo dpkg -i libssl1.1_1.1.0g-2ubuntu4.3_amd64.deb
# 到https://kernel.ubuntu.com/~kernel-ppa/mainline/下载比较新的内核
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.0/linux-headers-5.0.0-050000_5.0.0-050000.201903032031_all.deb https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.0/linux-headers-5.0.0-050000-generic_5.0.0-050000.201903032031_amd64.deb https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.0/linux-modules-5.0.0-050000-generic_5.0.0-050000.201903032031_amd64.deb https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.0/linux-image-unsigned-5.0.0-050000-generic_5.0.0-050000.201903032031_amd64.deb
# 安装新内核, 按照下载的顺序依次安装
sudo dpkg -i ***.deb
# 看一下已经安装的所有内核版本
dpkg --get-selections|grep linux
# 删除孤立无用的Linux内核
sudo apt-get autoremove
# 删除特定的Linux内核版本,大概有3至4项,按照如下格式删除
sudo apt-get remove --purge linux-modules-extra-4.15.0-45-generic
# 清理缓存
sudo apt-get autoclean
# 更新grub
sudo update-grub

        (4)  /dev/nvme0n1p2 has unsupported feature(s): metadata_csum

        e2fsck: Get a newer version of e2fsck


问题(4)的解决方案:升级e2fsck,参考博文Centos7升级最新版e2fsck

# 看一下当前e2fsck的版本
e2fsck -V
# 到https://sourceforge.net/projects/e2fsprogs/下载e2fsprogs的新版本,我下载的是1.45
wget -c https://nchc.dl.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.45.0/e2fsprogs-1.45.0.tar.gz
# 解压
tar xzf e2fsprogs-1.45.0.tar.gz
# 编译
./configure
make
# 查看编译结果
cd e2fsck
./e2fsck -V
# 替换掉原来的e2fsck
sudo mv /sbin/e2fsck /sbin/e2fsck.old
sudo cp e2fsck /sbin/
# 看一下新版本
cd /
e2fsck -V


        于是就针对/dev/nvme0n1p2校验和问题来解决,使用Boot-repair启动盘启动,然后使用e2fsck /dev/nvme0n1p2检查,并未发现问题。于是就使用Boot-repair修复grub(Note: 修复时不要按照默认的设置修复,要先根据自己的需要修改一下高级选项),修复完成后,尽管校验和问题依然存在,但是UBuntu能够顺利进入桌面。可却带来了新的问题:

(5)无法上网,尽管网络连接显示正常。(当时是病急乱投医,其实无需修复Grub,这是后话)

        简单搜索了一下说是修改DNS,网上也提供了几种方法,尽管这几种方法都说解决了上网问题,可是我没有这样做。看到一个帖子提到了要修改/etc/resolv.conf,于是查看该文件,首先发现该文件并不是/run/resolconf/resolv.conf文件的符号链接,打开该文件,其中的nameserver被修改为127.0.0.53,本来应该是127.0.0.1,而/run/resolconf/resolv.conf文件中的nameserver仍然是127.0.0.1。

        于是重命名/etc/resolv.conf,然后创建/run/resolconf/resolv.conf的符号链接: ln -s /run/resolconf/resolv.conf /etc/resol.conf。重启网络服务,或者注销重新登录,不能上网问题得以解决。但是不知道/etc/resolv.conf是为何被修改。

后记:

        grub修复后能够进入桌面实际上是一种假象,再次重启则会遭遇多次无法进入桌面的情形。查了一些资料,基本上了解到是因为安装了2块Intel的760P SSD,同时提交NQN请求,导致系统忽略其请求,因此无法识别到SSD(因为有时也会提示无法找到UUID=XXXX的硬盘),因此,还是通过升级Linux内核来解决这个问题。

(1)由于Linux 4.16.4后的的内核都依赖于较高版本的libssll(>=1.1.0),记得要下载1.1.0版本的libssll,不要下载1.1.1版本,因为1.1.1版本libssl依赖于高版本的libc(>=2.27),很显然,这个依赖如果解决不好将会带来更复杂的问题。

(2)因为主板有2个M.2 NVMe接口,因此就买了2块Intel的760P SSD,这个SSD虽然性能不出色(看openbenchmarking的测试),但是价格相对便宜,据说较为稳定,并且质保5年。一块装WIndows10,一块装Ubuntu。WIndows 10自然没有问题,但是Ubuntu 16.04(我没有重新安装,而是通过系统迁移的方法将原来的安装好的系统迁移到SSD)却问题多多,想享受NVMe带来的优势看来并不简单,这个问题困扰了我将近1个星期,还好查到资料,知道问题原因。现在基本解决,但是有老外反映说是可能并不能完全解决NQN的问题,只是减少了NQN警告的几率。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安装 UbuntuNVMe SSD 上与安装到其他类型的硬盘或固态硬盘(SSD)上类似。以下是一般的步骤: 1. 准备安装介质:首先,你需要准备一个 Ubuntu安装介质(如 USB 驱动器或光盘)。确保你已将 Ubuntu安装映像文件下载到计算机上。 2. 插入安装介质:将 Ubuntu安装介质插入计算机的相应接口(如 USB 插槽或光驱)。 3. 进入 BIOS/UEFI 设置:重启计算机,并按下相应的键(如 F2、F12、Delete 或者 Esc)进入 BIOS 或 UEFI 设置。 4. 配置启动顺序:在 BIOS/UEFI 设置中,找到启动选项,确保 NVMe SSD 在启动顺序中排在其他设备(如硬盘、光驱)之前。 5. 保存设置并重启:保存 BIOS/UEFI 设置,并重启计算机。计算机将从 Ubuntu 安装介质启动。 6. 开始 Ubuntu 安装:选择从安装介质启动的选项,并按照 Ubuntu 安装向导的指示进行操作。在分区阶段,选择 NVMe SSD 作为目标安装位置。 7. 完成安装:等待 Ubuntu 安装程序完成,并按照向导的指示进行设置和配置。 8. 配置引导程序:在完成 Ubuntu 安装后,可能需要配置引导程序(如 GRUB)以正确引导到 NVMe SSD 上的 Ubuntu。这通常会自动完成,但如果你遇到引导问题,可以尝试使用引导修复工具修复。 请注意,具体的安装步骤可能因计算机品牌、型号和 BIOS/UEFI 版本而略有差异。在进行安装之前,建议备份重要的数据,并确保你了解并遵循安装过程中的提示和警告。 如果你对特定的安装步骤或问题有更多疑问,建议参考 Ubuntu 的官方文档或搜索相关的教程和指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值