Bootstrap

ubuntu20.04以及NVIDIA显卡安装与卸载,以及踩坑记录

为了能够在本地对模型结果可视化,需要在本机安装ubuntu20.04,安装了整整一天,踩了不少坑,还因为linux与nvidia的爱恨情仇导致经典黑屏。网上的教程虽然多,而且也比较全面,但还是自己写一篇吧。由于我已经安装结束了,所以不少图片来源于网络,也参考了大量网上的教程。

目录

Ubuntu安装

准备工作

引导系统以及磁盘分区查看

BIOS设置

磁盘分区,为Ubuntu腾出地方

制作系统安装盘

正式安装

时间调整

卸载Ubuntu(UEFI引导方式)

NVIDIA显卡驱动安装

安装官方驱动

从官网上下载

软件与更新以及命令行安装

黑屏问题

不能进入命令行模式

可以使用命令行


Ubuntu安装

准备工作

引导系统以及磁盘分区查看

检查系统引导模式,win+r,查看BIOS模式是不是UEFI,如果是“传统”,不适合这篇文章,只有后续安装显卡驱动的部分有参考价值。

之后搜索设置计算机管理,选择其中的磁盘管理,右键你准备将Ubuntu安装的那个磁盘,查看其属性,比如我这里就是右键磁盘0(旁边那个196G的就是我装好的Ubuntu),选择卷属性,查看分区方式,应该为GPT,如果不是,提前转化为GPT形式。注意,如果你的磁盘分区里面有BitLocker的话,一定一定要关闭,否则在后续安装过程中,会导致磁盘被锁起来。关闭方法为搜索设置“设备加密设置”或者bitlocker,选择关闭设备加密(非常耗时,可能要解密几天)。万幸的是,一般的windows家庭版都没这个功能。

BIOS设置

关闭Secure Boot安全启动!!

不同的BIOS启动键如下:

如果你是win11 or win10,还可以搜索设置里面的更改高级启动选项,直接选择立即重新启动,之后选择“疑难解答”,选择“高级选项”然后选择"UEFI固件设置",就可以进入BIOS。

各个主板的BIOS关闭安全启动的方法不一样,但是华硕的无疑很出生。以自己的华硕天选笔电为例,按F7或者选择右下角的高级模式。

选择安全性,进入后发现安全启动开启,但是颜色是灰的,不能更改。此时需要点击下面的密钥管理。

先删除下面的密钥交换密钥,在删除平台密钥,删除方法为点击后在弹出框选择删除,完成后F10保存,外面的安全启动就关闭了(可能需要重启)。

部分电脑还需要关闭Intel RST,但我是是AMD的U,所以显然不需要。至于在BIOS中设置优先u盘引导或者后面的优先Ubuntu引导,我都觉得没必要,默认即可,如果后面始终不能使用优先u盘引导,再进行设置。

磁盘分区,为Ubuntu腾出地方

在刚才磁盘管理的页面,右键你要分区的盘,选择压缩卷,之后设置压缩大小即可。

如果你发现可用空间远远小于这个磁盘实际剩余的空间,那是因为有大量的文件碎片在这个磁盘中。不要信网上什么用ccleaner、Defraggler之类的清理文件碎片,要不下载链接失效,要不下下来就是金山毒霸,我当时下下来看是金山毒霸差点背过气去。使用DiskGenius进行分区,注意不要将这个安装到你要分区的盘中,使用它分区,会强制将文件都移到一块(物理意义),从而避免文件碎片。同时,后续如果我们要卸载Ubuntu(比如不用了,或者显卡驱动装炸了),也需要这款软件的帮助。

分好区后,应该会显示有一部分是未分配状态(图源网络),如果使用DiskGenius发现直接分出一个新的盘,如E,F盘,别慌,在那个新盘基础上用右键-压缩卷的方式分出一个新的即可,剩的那一点空间在合并给另一个盘就行。不用纠结分区空间大小,因为Ubuntu算空间大小和windows不一样,你在这里细致调成200G,可能到那边看就有210G。

制作系统安装盘

准备一个空u盘,不是空的后面也会被格式化的。

下载Ubuntu安装镜像文件,我推荐阿里云,感觉比华为云快上不少。

https://mirrors.aliyun.com/ubuntu-releases/20.04/

https://mirrors.aliyun.com/ubuntu-releases/22.04/

如果你像我一样,安装Ubuntu20.04,选那个4.1G的。Ubuntu的版本并不是越新越好,具体安装哪个版本取决于你使用的需要,但不论如何,最好安装LTS这些长期支持的版本。

下载好镜像后,下载windows版本的ventoy工具,插入u盘后,打开下面的.exe

上面的设备确定好是你的u盘,检查磁盘格式是不是GPT(那个大大的1.0.98右边),不是点击左上角配置选项-分区类型,改为GPT。最后点击安装,u盘名称自动变为ventory。

将下载好的镜像文件拷进去,这个系统安装盘也可以放别的,当做普通u盘也是可以的,比如我就放了一堆东西。

正式安装

插入u盘,重启电脑,在出现logo时候,按住你电脑的u盘启动键,对于我来说是ESC,选择u盘引导,此时就是除windows外的另一个选项,进入如图界面(图源网络)

列表里就是你在u盘中放的系统镜像文件。选择ubuntu20.04,之后选择“Boot in normal mode”,之后,如果有“try or install”选“try or install”(22.04),没有选默认第一个(应该都是“ubuntu”,20.04),进入ubuntu安装程序(图源网络)

如果没有进入图像界面,发生关于nouveau报错,提示你发现一个不认识的芯片型号(unknown chipest),那就中奖啦。原理我会在之后显卡驱动部分讲,这里只说明解决办法。

重启电脑,重新回到启动界面,在选择“try or install”或者“ubuntu”时,不要回车,而是按E键进入编辑启动项模式

在linux那一行 quiet splash 后面加空格和nomodeset,按下F10,用修改后的参数启动,从而防止启动时加载nouveau驱动。

之后回到正常的安装界面,修改左侧语言,找到简体中文,点击该界面的安装Ubuntu。

部分人,包括我自己,由于没有合适的驱动,会导致界面显示不全,分辨率低但是界面特别大,这时候按住Alt+F7,鼠标会变成小手状,移动鼠标就可以拖动界面了。

使用默认的键盘布局即可

进入安装选项界面,选择正常安装,不要勾选“安装Ubuntu时下载更新”,否则安装会巨慢无比,建议勾选“为图形或无线硬件......”,勾选这个后,会帮你安装一些驱动,可以连无线网,看视频等等。点击继续,开始准备ubuntu驱动。

之后选择安装类型,自己设计分区就选择其他选项,根据自己的需求选择

如果选择其他选项,要进行磁盘分区。首先找到自己之前未分配的空间,类型是为空,设备名字为空闲。其他的类型:ntfs是windows系统上磁盘的分区;efi是引导项分区,windows和ubuntu的引导项都放在这,这俩可以共用一个分区;如果磁盘类型是未知,表示bitlocker没打开,返回之前的准备工作,否则磁盘会锁死。自己通过大致的空间大小(具体大小会有一定变化)先找未分配的空间。

现在将ubuntu的根挂载点(/)和home挂载点(/home)放一起,如果你有别的分区方案,就按照自己设计的来。上面两个挂载点大家可以大致理解为windows中的C盘和D盘,你既可以放一起,也可以单独分出来,这取决于自己,由于这又不是给服务器装,这是给咱自己装,所以我觉得也没必要分开。

选中目标空闲分区,点击左下“+”号,挂载点选择根挂载点(/)

安装引导器,选择已装系统为Windows Boot Manager的efi分区,在下面安装启动引导器的设备中找到那个分区。之后就是右下角现在安装就行。

选择完时区后,设计账户名和计算机名以及密码,最后点击继续后成功安装。注意,安装完成后,最好先安装vim。

sudo apt install vim

时间调整

Ubuntu和windows计时方式不同,来回切换系统会导致时间错误。

在终端中安装ntpdate

sudo apt install ntpdate

windows用来同步时间的往事是time.windows.com,让Ubuntu也按照这个网址校准时间,并与电脑硬件时间保持一致。第二条指令和第三条指令择一使用。

sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc
sudo timedatectl set-local-rtc 1

卸载Ubuntu(UEFI引导方式)

使用DiskGenius直接将分给Ubuntu的区域右键删除,记得保存更改,之后再回收给旁边的盘,可以使用系统自带的磁盘管理功能。由于没有删除Ubuntu引导项,此时如果重启会进入grub命令行模式,输入exit可以退出。

找到Ubuntu引导项,我的是在SYSTEM下,不同电脑所在位置可能不同,有的在ESP下。选择ubuntu文件夹,将里面的文件全部选中,右键彻底删除。

NVIDIA显卡驱动安装

就我在网上查找资料的情形来看,十个人安装显卡驱动九个黑屏

为什么大伙这么容易黑屏呢,原因也很抽象。老黄只愿意给Linux提供闭源的驱动程序,而Linux的大佬们又喜欢创新,没多久就更新一次内核,小改甚至是大改一次图像架构,这就导致两边经常不对齐,linux内核一更新,服务器就得炸一次,所以大家一般都不更新的。而在最新的Linux内核中,大佬们想把显卡驱动加到Linux内核中,理由是说这样子logo可以更漂亮(大家也有体会,在电脑开机时候,管你什么显卡,logo都是一样的糊)。但这要求NVIDIA要么开源,要么就跟随Linux大佬的脚步,人家更新一次,厂商更新一次官方内核驱动,其他Intel,AMD都比较听话,唯独NVIDIA懒得管,毕竟要恰米,谁给他一年四五次的免费更新,也无怪乎Linus Torvalds(Linux之父)破口大骂“fxxk you nivdia”,搞笑的是,说这话的背景是一个芬兰学生问他怎么在自己装了NVIDIA显卡的电脑上用Linux,我觉得他估计也黑屏了。之后,Linux对NVIDIA驱动逆向破解,搞了自己的驱动——nouveau,你在用NVIDIA提供的.run安装驱动时候,Linux还会问你是不是要装这个闭源的,为什么不用我们的开源驱动。也就是这个nouveau,一般是导致我们黑屏的罪魁祸首。

所以首先要禁用nouveau,在之前我们安装Ubuntu的时候,使用u盘引导项安装就在启动项修改了参数(nomodeset),同样,现在我们安装完成,也需要禁用。在重新启动电脑时候,在选择系统界面,在ubuntu选项上按E进入修改启动项,同样找到包含Linux和quiet splash的那一行,在末尾添加参数nomodeset(记得有空格),之后按F10启动。

进入图形界面后,将nouveau加入系统黑名单,在终端中输入

sudo gedit /etc/modprobe.d/blacklist.conf

打开系统黑名单,在最后添加

blacklist nouveau

options nouveau modeset=0  #这一行和修改启动项我认为是一样的,这里只是为了保险添加的

保存后,终端输入下面的指令来更新黑名单。

sudo update-initramfs -u

终端输入

lsmod | grep nouveau

 没有输出就代表以及成功禁用(如果有输出可以尝试重启再看一下)。

安装官方驱动

安装NVIDIA显卡驱动一般有三种种方式,一种通过官网安装,一种则是通过ubuntu自己“软件与更新”来安装,第三种为命令行安装,我认为后两种本质上是相同的,所以一起讲。

一般来说,网上大多推荐从官网安装,主要是后一种容易翻车,然而我是第一种方式翻车了(但我少了一些关键步骤,比如禁用gdm3服务)。

但不论哪种方法安装,首先要安装gcc,g++,make。首先要考虑好你未来使用的环境用什么版本的CUDA,选择对应版本的gcc,g++,当然,在实际使用中,往往需要安装多版本的CUDA和gcc,具体的切换方法可以参考我的另一篇文章

我这里安装9版本的gcc

sudo apt-get update
​sudo apt install gcc-9 g++-9
sudo apt-get install make

从官网上下载

首先去NVIDIA官网下载驱动,根据你自己的配置选择,注意系统要选择Linux 64-bit,如果要选择下载类型,可以选择生产分支

https://www.nvidia.cn/drivers/lookup/

https://www.nvidia.cn/geforce/drivers/

选择一个心仪的驱动下载,注意最后存放的路径不要出现中文。

之后再次确认已经关闭nouveau驱动并且已经关闭了Secure Boot(安装Ubuntu部分已经说明,否则会遇到签名之类的问题)。之后,有的教程说是可以在图形界面安装,并有成功案例,但我自己就装炸了一次,所以还是切换至tty模式(如果坚持在图形界面安装,就直接运行.run就行)。按下Ctrl+Alt+Fn(n为1到6),需要禁用X-window服务,有些人可能是lightdm而非gdm3.

sudo service gdm3 stop  

之后就可以进入你保存.run文件的文件夹,运行该文件了,后两个参数分别要求不安装OpenGl和用于跳过对 X 服务器的检查(在安装 NVIDIA 驱动时,安装程序默认会检查 X 服务器的运行状态。如果 X 服务器正在运行,可能会导致安装失败)。

sudo ./NVIDIA-Linux-x86_64-xxx.xx.run –no-opengl-files -no-x-check
or
sudo bash NVIDIA-Linux-x86_64-xxx.xx.run –no-opengl-files -no-x-check

安装过程中会遇到

1.问你是不是要安装NVIDIA驱动,因为现在有可以替代的驱动(nouveau)       

        选continue installation

2.是否安装Nvidia's 32-bit compatibility libraries

        NO,一般都不需要,除非有运行 32 位应用程序、游戏或特定软件的需求,安了也没事

3.是否用NVIDIA的驱动来优化图形界面,

Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver dill be used dhen you restart X?        

        YES,No都行,看你的需要

安装完成后重启X-window

sudo service gdm3 start

之后使用nvidia-smi有正常输出即可(最好重启检验一下,我第一次就是可以正常输出,重启后黑屏)。

软件与更新以及命令行安装

我将这两种方式放在一起。在全部软件里面找软件与更新,选择附加驱动,会有一些驱动推荐,注意其实如果是比较新的显卡,他是识别不出来的(如果能够识别出来,推荐里可选的驱动版本就会比较多)。

对于这个,选择一个驱动安装即可。

至于命令行,终端输入

ubuntu-drivers devices

查看推荐驱动,会发现和刚才一模一样,所以我认为两个是一样的。

选择 一个安装,一般不安装open,根据ai的说法,open完成的功能较为基础。

sudo apt install nividia-driver-xxx

可以观察到,从官网上下载的驱动较新,版本也更多,但是是否支持现在的内核感觉也没人清楚,如果装完黑屏了,那也没关系,卸载现有驱动,再装一个试一试,是在不行就把Ubuntu卸了再装一遍。

删除原有驱动

sudo apt-get remove --purge nvidia*

黑屏问题

出现黑屏问题首先不要慌,先看是否能够通过Ctrl+Alt+Fn进入到tty命令行模式。

不能进入命令行模式

坏了,你和我一样中头奖了。具体表现为,屏幕左上角一种闪一个下划线,或者不闪甚至一篇纯黑,连命令行模式都进入不了,简直完蛋了。最简单的解决方式就是重启到windows中把Ubuntu卸了重新安装。

另一种方式参考了这篇文章,此外还有参考文章的参考文章,着实是我的救星。

重启后,长按shift,调出GRUB 菜单,选择高级启动(Advanced options for Ubuntu),之后选择recovery mode(进入恢复模式),系统以最小化的环境启动,再选择root选项

输入

vim /etc/default/grub/ 

如果没有安装vim,此时又连不上网,可以使用vi打开。打开后修改配置,我就直接转载我参考文章的图片了

之后

update-grub

此时直接在命令行输入reboot重启系统应该就已经好了。不过按照参考文章的说法,他没有

而是命令行输入这些后才好。注意的是,我不推荐使用第三行的命令,gdm3已经在上一条指令删除,为啥还要第三行,而且第三行指令会删掉所有可能不用的依赖项,可能导致你出现不能联网等等问题!!引用一篇博客中的话,这个可能发生安装c的时候,c依赖b,b又依赖a,这个时候会自动安装a和b。但是,如果c利用了b默认隐含a包的条件,直接调用了a中的api,而下次更新b包的时候,假如b不再依赖a,这个时候autoremove会删掉a包,使c包不可用。

apt-get update
apt-get remove gdm3 如果没有gdm3,看看是否有gdm
apt-get autoremove 删除其他与gdm相关的依赖,注意注意,我不推荐这个命令
apt-get install lightdm
reboot

上述命令运行不成功,均可以加sudo来提升权限。但我觉得这着实怪怪的,因为这段代码只是删掉了gdm3,将管理系统的图形化登录界面的gdm3换成了lightdm。最初的那篇参考文章认为是升级Linux内核导致gdm的兼容性出了问题,也许在这里是安装的NVIDIA驱动和gdm3的兼容性出了问题?对于我自己来说,运行完上述代码,reboot后我还是不能进入图形界面,但是可以使用命令行,NIVIDIA驱动以及后续的CUDA什么都能正常安装,相当于变成一个服务器的感觉。。。但我又不用,于是我卸载了Ubuntu并重新安装。

可以使用命令行模式

这种就比较简单了

大部分的问题可以通过直接使用命令行输入

sudo systemctl restart gdm3

重启gdm3或者lightdm解决,之后可能需要再次reboot重启系统。

可以用下面的指令查询你是gdm3还是lightdm

cat /etc/x11/default - display - manager

;