一、遇到问题并排错的过程
遇到的问题:更改配置文件后,提示没有找到ens33这个网卡。重启之后配置文件又恢复为原来的样子。
因为网络没配好,启动的时候是下面这样:要等他超时之后(大概要等2分钟)才进入到系统。

IP add的结果,网卡名称为ens33,。

接下来是解决过程。
1、尝试修改配置文件
进入到这个目录。
shell
cd /etc/netplan/
里面只有一个文件,就是网卡配置文件。
shell
# 注意,要加sudo,不然权限不够,打开的时一个空文件(新建文件)
sudo vim 50-cloud-init.yaml
初始内容如下:

好的,修改文件后,遇到第一个错误,IP地址格式不对。
文件内容如下:

报错如下:

我是按照这篇博客来配置的。
后话:配置成功后,我回过来看,发现上面之所以报错,是因为少了
renderer: networkd守护进程这一行。
好吧,刚才看了官方文档,试了一下,配置了个临时地址,已经可以用xshell连接了。看来接下来是不会再出错了,就按照官方文档的介绍来配置。
2、尝试配置临时IP(暂时能用)
官方文档地址:配置网络 - Ubuntu Server documentation
进行下面的配置,设置临时IP后,可以用xshell连接。
shell
# 配置临时IP地址,这里的ens33是我前面IP add命令查看到的网卡名称
sudo ip addr add 192.168.123.55/24 dev ens33
# 开启链接
ip link set dev ens33 up
# 配置网关
sudo ip route add default via 192.168.123.254
完成上面的配置就可以用xshell连接了。查看网卡IP和路由信息如下:

3、根据官方文档修改配置文件
下面是我修改后的网卡配置文件(虽然DNS没改过来,但是与后面的报错没关系)。
shell
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.123.55/24
routes:
- to: default
via: 192.168.123.254
nameservers:
search: [mydomain, otherdomain]
addresses: [10.10.10.1, 1.1.1.1]
修改配置文件后,运行sudo netplan try提示如下:

Ctrl+C取消后,执行下面的命令,使配置生效。
sudo netplan apply
又报错了,查看了一下ovsdb-server.service服务的状态,直接没这个服务,后来有查看了一下,Open vSwitch也没安装,现在又连不了网,也装不了。
# 报错信息
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.

又用ip add看了一下,网络配置还是没有改过来。
看了一篇博客(这篇博客写的还挺好的),他的遇到的问题和我差不多(如下图),但是他的网络能正确配置。我就试着重启了一下。

重启之后,配置文件又恢复原样了。重来!@!
二、禁用cloud-init后,再次修改配置,成功
我注意到网卡配置文件中的一段话(其实在我写这篇文章之前,我好像就问过ai,它好像说过要修改一下这个文件来着,不过我没有注意),如下
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
# 翻译如下:
该文件由数据源提供的信息生成。对它的更改不会在实例重新启动后持续。要禁用cloud-init的网络配置功能,请使用以下内容编写文件/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network: {config: disabled}
就是说在/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg文件下添加内容network: {config: disabled},从而禁用cloud-init。
我尝试了一下,如下图。

修改之后,再次修改网卡配置文件,内容如下:
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.123.55/24
routes:
- to: default
via: 192.168.123.254
nameservers:
search: [mydomain, otherdomain]
addresses: [192.168.123.254,8.8.8.8]
修改完成后,执行sudo netplan try,直接回车确认更改配置。

虽然还是有警告,但是查看IP,配置已经更改成功了。

此时我试了一下,ping 百度,能解析出百度IP,但是无法ping通。xshell可以连接了。那就先重启一下试试。
重启后,没有出现A start job is running for wait for network to be configured.等两分钟的情况了,没多久就启动了。倒是在登录用户之前,弹出一条日志,如下:

登录后,可以ping通外网,也可以xshell连接了,网络配置成功!
再次查看网卡配置文件,一切正常。

总结
这次遇到的问题主要有三个。
1、开机时硬控两分钟的启动作业。
shell
A start job is running for Wait for Network to be Configured (1min 25s no limit)
# 翻译:正在运行一个启动作业,以等待配置网络
2、由于没有禁用cloud-init,导致网络配置无法生效。
shell
该文件由数据源提供的信息生成。对它的更改不会在实例重新启动后持续。要禁用cloud-init的网络配置功能,请使用以下内容编写文件/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network: {config: disabled}
3、配置完网卡文件后,try或者apply时出现的Warring信息。
shell
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
关于问题1和2,都是因为没有禁用cloud-init导致的,把它禁用就好了。
问题3,只是个警告,倒是没什么影响。目前这个虚拟机主要用来部署网站,Open vSwitch一般是做SDN的实验才用到,也就不在这台虚拟机上安装了。