Ubuntu 使用备忘录:好记性不如烂笔头
Ubuntu 使用备忘录:好记性不如烂笔头
dong4j简介
家中的服务器有 3 台全部安装的是 Ubuntu, 有时候需要折腾一下.
所以想用一个文档来记录 Ubuntu 上遇到过的问题, 另外就是做一个备忘录, 将已操作过的记录保存下来, 以便在其他服务器上重现, 避免重复查询资料.
优化建议
启用 Ubuntu Pro
Ubuntu Pro 是 Canonical 提供的企业级专业支持服务,个人用户和小团队可免费使用(最多 5 台设备,超过需付费)。它提供了长达 10 年的安全更新支持。
1 打开「软件和更新」,切换到「Ubuntu Pro」选项卡。
2 点击「启用 Ubuntu Pro」。
3 访问 Ubuntu Pro Dashboard 拿到分配给你的Token
,填入「手动添加令牌」中,然后点击「确定」。
参考
Landscape Server
参考:
系统克隆
原来的系统安装在一块 PCIe Gen3 x4 的 M.2 固态上, 查阅资料得知这个插槽支持 PCIe Gen4 x4, 为了不浪费资源, 所以需要使用一块 PCIe Gen4 x4 的 M.2 固态替换原来那块系统盘, 但是又不想重新安装系统, 所以想通过系统克隆的方式迁移.
使用 dd 命令
备份数据:在进行克隆操作之前,确保你已经备份了重要数据,以防万一。
关闭系统:关闭你的 Ubuntu 系统,并插入新的 1T M.2 固态硬盘。
进入 Live 环境:使用 Ubuntu 安装介质(如 USB 启动盘)启动到 Live 环境。
打开终端:在 Live 环境中打开终端。
查找硬盘标识:使用
lsblk
或fdisk -l
命令查找新旧硬盘的标识(例如/dev/nvme0n1
和/dev/nvme1n1
)。克隆硬盘:使用
dd
命令进行克隆。以下命令将旧硬盘克隆到新硬盘:1
sudo dd if=/dev/nvme0n1 of=/dev/nvme1n1 bs=4M status=progress
注意:此操作将克隆整个硬盘,包括空闲空间,因此需要时间较长。
调整分区大小:克隆完成后,使用
gparted
或fdisk
调整新硬盘的分区大小以利用额外的空间。更新引导器:如果需要,更新引导器配置,例如使用
bootctl update
。重启系统:重启系统,从新硬盘启动。
参考
- Ubuntu 硬盘克隆完全指南 高效实现数据备份与恢复
- Ubuntu 无损迁移、克隆系统
- Ubuntu 整系统迁移到另一个硬盘中
- Ubuntu 系统迁移实践
- 怎么把 ubuntu 移植到 centos 无界面系统中 ubuntu 系统迁移到新硬盘
使用群晖的 ABB
这个应该算是最简单的方法了, 正好我也有群晖, 所以直接使用这种方式恢复镜像即可.
参考
- 【NAS】整机备份还原 Windows/Linux 系统,群晖最强套件 ABB 教程
- 实体伺服器备份及还原-Linux
- Active Backup for Business 管理员指南 - 适用于 Linux
KVM
KVM 常用命令
1. 安装 KVM 和 libvirt
首先,确保已安装 KVM 和 libvirt,这通常是管理 KVM 虚拟机的基础:
1 | # 安装 KVM 和 libvirt |
2. 虚拟机管理(使用 virsh)
virsh 是管理 KVM 虚拟机的命令行工具,以下是一些常见命令:
2.1 列出所有虚拟机
列出所有虚拟机,包括运行中的和已关闭的虚拟机:
1 | sudo virsh list --all |
2.2 启动虚拟机
启动指定的虚拟机:
1 | sudo virsh start <vm_name> |
例如:
1 | sudo virsh start myvm |
2.3 停止虚拟机
优雅地关闭虚拟机:
1 | sudo virsh shutdown <vm_name> |
如果虚拟机未响应,可以使用强制停止命令:
1 | sudo virsh destroy <vm_name> |
2.4 查看虚拟机的状态
查看虚拟机的详细状态:
1 | sudo virsh dominfo <vm_name> |
2.5 查看虚拟机的控制台
连接到虚拟机的控制台,适用于命令行界面虚拟机:
1 | sudo virsh console <vm_name> |
3. 虚拟机自启动
启用或禁用虚拟机的自启动(在系统重启时自动启动虚拟机):
3.1 启用自启动
1 | sudo virsh autostart <vm_name> |
3.2 禁用自启动
1 | sudo virsh autostart --disable <vm_name> |
3.3 查看自启动虚拟机列表
1 | sudo virsh autostart --list |
4. 创建、删除虚拟机
4.1 创建虚拟机
使用 XML 配置文件创建虚拟机:
1 | sudo virsh create <xml_file> |
例如:
1 | sudo virsh create /path/to/your/vm_config.xml |
4.2 删除虚拟机
删除虚拟机和关联的配置文件:
1 | sudo virsh undefine <vm_name> --remove-all-storage |
5. 虚拟机磁盘管理
5.1 查看虚拟机磁盘
查看虚拟机的磁盘配置:
1 | sudo virsh vol-list --pool default |
5.2 创建虚拟机磁盘
使用 qemu-img 创建一个虚拟硬盘镜像:
1 | qemu-img create -f qcow2 /path/to/disk_image.qcow2 20G |
5.3 增加虚拟机磁盘大小
增加虚拟机磁盘的大小(例如将磁盘大小增加 10GB):
1 | qemu-img resize /path/to/disk_image.qcow2 +10G |
6. 网络配置
6.1 查看网络桥接配置
列出所有虚拟网络:
1 | sudo virsh net-list --all |
6.2 启用虚拟网络
启用虚拟网络(例如默认的 default 网络):
1 | sudo virsh net-start default |
6.3 配置虚拟网络
使用 virsh 编辑虚拟网络的配置:
1 | sudo virsh net-edit default |
7. 备份和迁移虚拟机
7.1 虚拟机快照
创建虚拟机的快照:
1 | sudo virsh snapshot-create-as <vm_name> <snapshot_name> |
7.2 迁移虚拟机
迁移虚拟机到另一台主机(需要 libvirt 支持迁移):
1 | sudo virsh migrate --live <vm_name> qemu+ssh://<user>@<remote_host>/system |
8. 使用 virt-manager(图形界面)
8.1 安装 virt-manager
在 Ubuntu 上安装 virt-manager:
1 | sudo apt install virt-manager |
8.2 启动 virt-manager
运行 virt-manager 图形界面,管理虚拟机:
1 | virt-manager |
通过图形界面,你可以创建、启动、停止虚拟机,查看日志、资源使用情况等。
9. 监控虚拟机资源使用情况
9.1 查看虚拟机的 CPU、内存和磁盘使用情况
1 | sudo virsh stats <vm_name> |
9.2 查看虚拟机的实时性能数据
你可以使用 virt-top 命令来实时查看虚拟机的性能:
1 | sudo virt-top |
10. 安装虚拟机操作系统
通过 virt-install 安装一个新虚拟机操作系统:
1 | sudo virt-install \ |
Cockpit
1 | # 主服务 |
Docker
Cockpit 强推 Podman 容器,Docker 管理插件在很早之前就没有维护了。好在民间有维护一个可用版本:chabad360/cockpit-docker: Cockpit UI for docker containers (ported from cockpit-podman) (github.com)。
1 | git clone git@github.com:chabad360/cockpit-docker.git \ |
sudo make install
将包安装到 usr/local/share/cockpit/。这依赖于 dist 目标,该目标生成分发压缩包。你也可以运行 make rpm 来构建本地安装的 RPM。
在生产模式下,源文件会自动压缩和混淆。如果你想复制这个行为,请设置 NODE_ENV=production。
Sensors
1 | wget https://github.com/ocristopfer/cockpit-sensors/releases/latest/download/cockpit-sensors.tar.xz && \ |
软件更新-磁盘空间不足
有一天主机 /boot
空间分配太少了, 一到更新就报 磁盘空间不足
:
此升级一共需要 188 M 的空闲空间,磁盘为 “/boot”。请额外释放至少 69.5 M 的 “/boot” 磁盘空间。您可以通过使用 “sudo apt remove”命令移除旧内核,还可以在 /etc/initramfs-tools/initramfs.conf 中添加“set COMPRESS=xz”选项来减少 initramfs 的大小。
删除旧内核
1 | $ uname -r |
压缩减少 initramfs 文件大小
编辑 /etc/initramfs-tools/initramfs.conf
文件,添加 set COMPRESS=xz
来压缩 initramfs
文件,从而减少空间占用。
编辑 initramfs.conf 文件
1 | sudo vim /etc/initramfs-tools/initramfs.conf |
自动清理旧内核
1 | sudo apt install byobu |
boot 扩容
参考:
Speedtest
来源: https://u.sb/debian-speedtest/
安装 Speedtest CLI
Speedtest CLI 是 Ookla 官方推出的 Linux / BSD 下的 CLI 工具,方便我们在服务器里直接测试公网带宽速度。
首先,导入 GPG Key 并添加源:
1 | apt install -y lsb-release ca-certificates apt-transport-https curl gnupg dpkg |
然后更新系统并安装 speedtest
:
1 | apt update |
使用 Speedtest CLI
安装完毕后我们即可使用默认的 speedtest
命令选择最近的节点并使用默认的网络测速,提示 Do you accept the license? [type YES to accept]
时,输入 YES
并回车即可:
高级用法
输入 speedtest -h
即可查看 speedtest
的命令参数:
1 | root@debian ~ # speedtest -h |
比较实用的有:
指定出口网卡:
1 | speedtest -I 指定网卡名称 |
指定出口 IP:
1 | speedtest -i IP 地址 |
注意指定网卡或 IP 后可能会出现 [error] Error: [0] Cannot open socket
的错误提示,忽略即可。
查看附近的测速节点列表:
1 | speedtest -L |
指定某个测速节点:
1 | speedtest -s 测速节点 ID |
systemd-networkd-wait-online.service
如果用 netplan
控制网络设备,同时把设备设置成固定 ip。如果对应的设备不存在,那么在系统启动后 systemd-networkd-wait-online.service
就会卡住几分钟,导致后续的服务无法执行。
这个问题有多种方式可以解决:
如何使用
NetworkManager
管理网络, 可以在netplan
配置文件中添加renderer: NetworkManager
;修改
systemd-networkd-wait-online.service
的超时时间:1
2
3[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --timeout=5使用
NetworkManager-wait-online.service
代替;
因为我已经使用 NetworkManager
来接管网络了, 所以完全可以禁用 systemd-networkd-wait-online.service
, 而且 NetworkManager
也自带一个 NetworkManager-wait-online.service
, 可以避免依赖网络的自启动服务在启动时出现问题:
1 | sudo systemctl disable systemd-networkd-wait-online.service \ |
systemd mask
的作用是 彻底屏蔽一个服务,防止它被启动,即使其他服务或依赖项尝试启动它,也不会生效。
操作 作用 是否可以被手动启动? 依赖的服务能否启动它? disable
取消开机自启 ✅ 可以 systemctl start
✅ 其他服务可以启动 mask
完全屏蔽 ❌ 无法手动 start
❌ 其他服务无法启动 简单理解:
- disable 只是禁止开机自启,但仍然可以手动或被其他服务调用启动。
- mask 彻底屏蔽,即使你手动 systemctl start 也不会启动,会报错:
1 Failed to start systemd-networkd-wait-online.service: Unit is masked.应用场景:
可以用 mask 来屏蔽那些 你不需要且可能干扰系统 的服务,比如:
- systemd-networkd-wait-online.service 影响启动速度(如果你用 NetworkManager )
- systemd-resolved.service 冲突(如果你用 dnsmasq )
- 某些自动更新服务(如果不希望它们运行)