PVE 网络异常下的工程性止损方案:从虚拟机自愈幻想到宿主机重启策略

一、问题背景 在基于 PVE(Proxmox VE)的单节点虚拟化环境中,宿主机偶发网络异常,表现为: 该现象在家用硬件、非 HA、bridge 网络架构中具有一定普遍性。 二、初始假设与验证路径 1. 虚拟机网卡模型假设 最初怀疑为 VirtIO 在宿主机网络异常时放大问题,因此进行了如下验证: 2. 验证结果 结论: 问题不在虚拟机网卡模型层面 三、systemd + bridge + KVM 的一致性边界 在异常场景下,宿主机通常通过: 恢复网络。 该操作在 systemd + bridge 环境中会导致: 此时虚拟机网络栈处于: 逻辑上未崩溃,但状态不可预测 这是虚拟化架构本身的边界问题,而非配置错误。 四、关键工程结论 经过多轮实测,可得出以下结论: 最终结论: 当宿主机发生网络中断时,最可靠的策略是直接重启宿主机 因为宿主机重启可以同时完成: 五、设计目标的转变 设计目标从: “尽量让虚拟机自己恢复网络” 转变为: “一旦检测到宿主机网络中断,直接重启宿主机,保证整体收敛” 这是典型的工程止损决策,而非妥协。 六、最终方案:宿主机网络监控 + 自动重启 方案原则 七、宿主机网络重启 Watchdog …

通过公网 Pull 模式实现 Raspberry Pi 的长期增量灾备方案

摘要 在 Raspberry Pi 等长期运行设备中,SD 卡依然是最常见、也是最不可靠的存储介质之一。异常断电、磨损老化或 silent corruption 往往在系统仍可运行时悄然发生,一旦彻底失效,恢复成本极高。 本文记录了一套 与设备物理位置无关的 Raspberry Pi 灾备方案:通过公网 SSH,以 备份机主动拉取(pull) 的方式,对远端树莓派的根文件系统进行 持续增量备份,在不影响系统运行的前提下,确保随时具备完整恢复能力。 设计目标 总体设计思路 1. 连接模型:Pull 而非 Push 备份由 备份机主动发起: 该模型符合最小权限原则,也更适合嵌入式设备长期运行。 2. 标识方式:域名而非 IP 使用域名作为唯一入口: 只要 SSH 可达,系统即可被完整拉取。 3. 备份粒度:文件级增量镜像 放弃块级复制(dd),采用 rsync: 核心实现 rsync 参数选择 关键参数说明: 参数 作用 -a 保留权限、时间戳、符号链接 -A 保留 ACL -X …

在 PVE 单节点环境中正确移除 Ceph 的一次实践记录

背景说明 在一次 Proxmox VE(PVE)节点初始化完成后,Web UI 中出现了 Ceph HEALTH_WARN 提示,提示内容为: OSD count 0 < osd_pool_default_size 3 该告警并非硬件故障或系统异常,而是由于 Ceph 已被初始化,但集群中并未配置任何 OSD(Object Storage Daemon),同时 Ceph 默认要求存储池副本数为 3,从而触发健康警告。 当前环境采用 PVE 单节点 + 独立硬件 PBS(Proxmox Backup Server) 的架构,用于虚拟化运行与备份分离。在该架构下,并不存在分布式存储或在线高可用的需求,因此 Ceph 实际上并不适合该使用场景。 Ceph 的定位与适用场景 Ceph 是一套分布式存储系统,主要目标包括: 其典型使用场景包括: 而在 单节点 PVE 环境中: 因此,在明确不使用 Ceph 的前提下,应当将其从系统角色中移除。 HEALTH_WARN 的根本原因 出现告警的直接原因是: …

PVE 虚拟机启动失败的一次完整排障记录(内存相关)

主题:Proxmox VE(PVE)中,虚拟机在还原旧备份后仍无法启动,最终定位为**启动阶段可用内存不足(OOM)**的问题。 一、问题背景 在一次正常运行多时的 PVE 环境中,宿主机出现网络异常,随后进行了按电源键关机与强制断电。重启后发现: 这使得初期判断偏向于: 二、初期排查与误导方向 1. PVE 与宿主机层面 2. 虚拟机层面 这些现象说明: 数据本身完好,问题不在磁盘或文件系统层面。 三、关键现象:内核 Panic 与 OOM 在切换 BIOS(OVMF / SeaBIOS)后启动虚拟机,屏幕出现如下典型信息: 进一步查看启动日志,出现大量 OOM(Out Of Memory) 记录: 这明确指向: 虚拟机在 early boot 阶段内存严重不足,启动核心进程被 OOM Killer 反复杀死。 四、关键误区:最大内存 ≠ 启动可用内存 虚拟机的内存配置为: 表面看内存充足,但从 OOM 日志可计算出: 在 无 swap 的情况下,这一内存规模不足以完成: 从而导致 OOM → …

USB 硬盘柜作为 LVM 数据盘的健康检查记录(虚拟化环境)

一、问题背景 在虚拟化宿主机环境中,使用 USB 硬盘柜扩展大容量存储是一种常见方案。这种方案在成本和灵活性上具有优势,但在稳定性层面也存在一些天然短板。 本文记录一次针对 USB 接入的大容量数据盘(LVM 架构) 的系统性检查过程,目标并非“证明一切正常”,而是明确: 二、存储结构概览 数据盘采用典型的单盘 LVM 结构: 逻辑卷已处于激活状态,并被宿主系统正常使用。 三、分区与扇区对齐检查 数据盘特征如下: 分区起始位置采用标准的 1MiB 对齐方式。 结论 四、LVM 状态检查 对 LVM 各层进行检查后,得到以下结论: 结论 LVM 元数据、映射关系及激活状态均正常 至此,可以明确排除 LVM 结构异常 这一方向。 五、关键判断:风险不在分区与 LVM 在分区与 LVM 层面均确认正常后,排查重点需要下移。 在 USB 硬盘柜场景中,问题通常并不来自: 而是集中在以下层面: 六、必须重点关注的实际风险点 1. 内核日志中的 I/O 与 USB 事件 这是判断 USB …

一次 LVM + ext4 + 容器运行时 场景下的系统卡死排障记录

关键词:LVM、ext4、容器运行时、、、、hung task 这篇文章记录了一次典型但很容易被误判的 Linux 系统故障排查过程。问题表面看起来是 / 容器运行时 / 接连报错,但根因其实在底层存储与文件系统一致性。 如果你使用的是: 那么这篇记录大概率对你有参考价值。 一、问题现象 系统启动或运行过程中,内核和 日志大量刷屏,主要包括: 伴随的实际表现包括: 这类状态非常迷惑,很容易让人误以为是: 实际上都不是。 二、关键信息:hung task 真正重要的只有一条日志: 这不是 容器运行时 的逻辑错误,而是 Linux 内核的 hung task 检测,含义是: 某个进程(这里是 )长期处于不可中断状态(D state),通常是在等待 I/O。 一旦出现 hung task: 三、环境确认 进一步确认系统结构: 通过命令确认: 得到结果: 关键信息: 出问题的 ext4 文件系统,正是当前已经挂载为 / 的根分区。 四、为什么 / / 容器运行时 全部出问题 …

将 Anki Sync Server 数据迁移至应用目录的实践

在非系统包管理(非 APT/YUM 等)环境下运行 Anki Sync Server 时,默认的数据存储位置与传统 Linux 目录结构往往不利于长期维护、迁移和备份。本文记录了一次将 Anki Sync Server 的数据目录从默认位置迁移并集中到应用目录下的实践过程,并总结了其中涉及的关键机制与注意事项,为需要“手动管理应用”的使用场景提供一种可复制的方案。 一、问题背景 Anki Sync Server 官方支持通过 Python 模块 anki.syncserver 运行同步服务。在默认配置下: 在以下场景中,上述默认行为会带来不便: 因此,有必要将 Anki Sync Server 的数据目录显式迁移到应用自身目录中。 二、官方机制说明(关键前提) 根据 Anki 官方文档说明: 这意味着,任何迁移方案都必须围绕 SYNC_BASE 这一官方支持的接口展开。 三、目标设计:应用自包含目录结构 迁移的目标并非简单“换路径”,而是形成一种清晰、稳定、可迁移的目录布局: 该结构具有以下特点: 四、迁移步骤概述 1. 停止同步服务 在任何数据操作之前,应先停止正在运行的同步服务,避免并发写入。 2. 准备目标数据目录 在应用目录下创建专用的数据子目录(例如 data/),并确保权限正确。 3. 迁移已有服务端数据 将默认数据目录中的内容整体迁移到新的数据目录中,保持原有目录层级(每个用户一个子目录)。 迁移完成后,新的结构应直接呈现为: …

在 VPS 迁移中完整保留 Fail2ban 封禁历史的正确方法

在实际运维中,Fail2ban 不只是一个防护工具,它还是一台服务器长期遭受攻击后形成的“安全记忆库”。当更换或迁移 VPS 时,如果只重新安装 Fail2ban 而不迁移其历史状态,就等于让攻击者从零开始重新测试新服务器的防御边界。 本文介绍一种可验证、可复现、可迁移的 Fail2ban 完整状态迁移方法。 一、Fail2ban 的真实数据在哪里 Fail2ban 的运行状态由两部分构成: 类型 目录 配置与规则 /etc/fail2ban 封禁状态与历史 /var/lib/fail2ban 其中 /var/lib/fail2ban 通常包含一个 SQLite 数据库,用于存储: 这是 Fail2ban 最重要的“资产”。 二、为什么不能在运行时备份 Fail2ban 在运行中会持续写入数据库: 如果在运行中直接复制数据库文件,极容易得到: 这会导致迁移后 Fail2ban 启动失败或悄然失效。 因此,正确做法是:先停服务,再备份数据。 三、确认 Fail2ban 运行模式 Fail2ban 有两种运行模型: 模式 特征 root 模式 系统中没有 fail2ban 用户 非 root 模式 …

从 30Mbps 到 1Gbps:一次 VPS 网络层级的跃迁

摘要 一次看似“降配”的 VPS 更换(更低 CPU / 内存 / 磁盘),却带来了使用体验上的巨大飞跃。原因不在计算资源,而在 网络层级:从受限的国际云出口,迁移到了具备 1Gbps 端口的日本本土数据中心。本文记录了测速、延迟、路由与实际 4K 流媒体体验的对比分析,展示了为什么带宽和网络拓扑在现代自托管系统中比 CPU 和内存更重要。 一、原始环境与问题 原有 VPS 位于日本,但属于大型中国云厂商的海外节点,标称参数为: 项目 旧 VPS CPU 1 vCore 内存 1 GB 磁盘 20+ GB 流量 1 TB 端口带宽 30 Mbps(标称) 地点 东京 实际测速(使用 Cloudflare 测试节点): 而部分国际测速点(如欧洲镜像)甚至只有: 这意味着: 网络成为系统瓶颈。 二、新 VPS 配置 迁移到一家日本本土云厂商的轻量实例: …

从混乱云镜像到极简稳定 VPS:一次 Ubuntu 服务器瘦身与修复实战

在云服务器环境中,Ubuntu 官方 Cloud Image 往往为了“通用性”而内置了大量面向物理机、桌面或开发环境的组件。这些组件在 VPS 上不仅没有意义,还会带来磁盘浪费、升级风险以及依赖混乱。 本文记录了一次真实的 Ubuntu 24.04(noble)云主机修复与极简化过程,从发现磁盘异常、定位无用组件,到修复 APT 依赖与源混乱,最终将系统恢复为一个干净、稳定、适合长期运行网络服务的 VPS 系统。 一、问题的起点:异常臃肿的 /usr/lib 通过分析 /usr/lib 目录发现系统体积远大于典型 VPS: 其中包含大量不应出现在 VPS 上的组件: 这些都是典型“桌面 / 物理机 / 开发环境”遗留物。 二、发现根因:APT 源跨区域导致版本漂移 进一步排查发现系统使用了: 在 Ubuntu 24.04 的 .sources 格式下,这种跨站点组合极易导致: 表现为: 这是典型的仓库不一致导致的依赖破坏。 三、正确做法:统一为日本官方仓库 Ubuntu 24.04 采用 /etc/apt/sources.list.d/ubuntu.sources,必须修改该文件,而不是传统 sources.list。 统一切换到日本官方镜像(JAIST): 然后清空索引并重建: 验证 systemd 依赖已恢复: …