[步骤] 让虚拟机或容器被宿主机以外的其他物理机访问的设置 (在宿主机上取保虚拟网络处于路由模式并开启 IP 地址转发)

步骤一:确保虚拟机或容器的虚拟网路是路由模式

例如 KVM 虚拟机所处的网络是 Routed 模式而是 NAT 模式的话,则无论如何也无法被其他物理机访问。

参考步骤:停止所有虚拟机 –> 记录原虚拟网络的名称和网段信息 –> 修改原虚拟网络的名称 –> 用原虚拟网络的名称和网段信息创建新的虚拟网络 –> 开启所有虚拟机

步骤二:在虚拟机的宿主机上开启 IP 地址转发

2.1 临时开启 IP 地址转发

2.1.1 通过修改 /proc/sys/net/ipv4/ip_forward 文件的方式临时开启 IP 地址转发
# echo 1 > /proc/sys/net/ipv4/ip_forward
2.2.2 通过 sysctl 命令的方式开启 IP 地址转发
# sysctl -w net.ipv4.ip_forward=1

2.2 永久开启 IP 地址转发

2.2.1 修改 /etc/sysctl.conf 文件
# vi /etc/sysctl.conf

添加以下内容:

......
net.ipv4.ip_forward = 1
2.2.2 让修改的 /etc/sysctl.conf 文件生效
# sysctl -p

[内容] virtio 类型虚拟网卡的简介

KVM 虚拟化以及基于 KVM 的技术例如 OpenStack 和 OpenShift 云平台上的虚拟机网卡使用的是 virtio 类型
virtio 类型是一种半虚拟化 (Para-virtualization) 技术。其没有速度限制,会随着宿主机的网络、处理器、内存的实际情况实时发生变化,能多快就跑多快
使用类似 ethtool 的命令查看 virtio 类型的网卡时不会显示网卡速度

[命令] Linux 命令 zgrep (显示压缩文本的行同时不用解压文件)

内容一:zgrep 命令的用法

和 grep 命令相同

内容二:zgrep 命令的选项

和 grep 命令相同,除了以下选项

1) –dereference-recursive 或者 -R
2) –directories 或者 -d
3) –exclude
4) –exclude-from
5) –exclude-dir
6) –include
7) –null 或者 -Z
8) –null-data 或者 -z
9) –recursive 或者 -r

内容三:grep 命令

[步骤] 系统升级 (从 Fedora 40 升级到 Fedora 42)

步骤一:升级所有已安装的软件

# sudo dnf update

步骤二:安装 Fedora 升级软件

# sudo dnf install dnf-plugin-system-upgrade

步骤三:刷新所有现有版本的软件源

# sudo dnf upgrade --refresh

步骤四:下载升级所有所需的软件

# sudo dnf system-upgrade download --releasever=42

步骤五:重启并升级系统

# sudo dnf system-upgrade reboot

(注意:系统会重启,并在后台升级系统,这个步骤可能会持续很长一段时间,根据虚拟机的硬件性能而定)

[排错] 解决 Linux 启动时某些服务没有开机自启 (日志里报错: “deleted to break ordering cycle starting”)

报错代码

某些服务没有开机自启例如 NetworkManager.service

原因分析

在系统日志里可以类似 …… Job network.target/start deleted to break ordering cycle starting with …… 报错例如:

# cat /var/log/messages
Jan 1 10:09:24 server systemd[1]: network-online.target: Found ordering cycle on network.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Job network.target/start deleted to break ordering cycle starting with network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found ordering cycle on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on NetworkManager-wait-online.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Job NetworkManager.service/start deleted to break ordering cycle starting with NetworkManager-wait-online.service/start

从案例中日志里的内容可以判断:
1) network.target/NetworkManager.service 启动
2) NetworkManager.service 作为基础服务依赖 basic.target
3) basic.target 依赖所有 slice 包括 mysql.slice
4) mysql.slice 依赖 iscsi.service/remote-fs.target/remote-fs-pre.target
5) iscsi.service/remote-fs.target/remote-fs-pre.target 依赖 network.target/NetworkManager.service
6) 系统为了防止启动时陷入死循环,systemd 报错 Job NetworkManager.service/start deleted to break ordering cycle 并放弃启动 NetworkManager.service

解决方法

取消不太重要的服务的依赖要求

# vi /etc/systemd/system/mysql.slice

将以下内容:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

修改为:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

(补充:这里以取消使用 /etc/systemd/system/mysql.slice 文件的服务的依赖要求为例)