[{"content":"ComfyUI 视频模型工作流 使用记录 引言 创作目标 制作「AI 避难所」类视频：遇险 → 抛出物品 → 爆炸烟雾 → 变成避难所。\n痛点 线上闭源视频 API 按量计费，费用较高。\n方案 搭建本地 ComfyUI 视频工作流，利用自备的 RTX 5070 Ti 16G 显卡生成视频，以节省成本。\n全文分为两部分：第一部分为环境与依赖搭建，第二部分为工作流实践，含本地与线上两个方案。\n一、环境与依赖搭建 包含 ComfyUI 环境容器、节点与模型的安装配置，以及常见问题排查。\n1.1 环境容器（沙盒机制） 使用 ComfyUI Desktop。 默认自动检测并启用国内 Python 源，无需手动更换。 目录结构分为全局 ComfyUI 目录与子容器 ComfyUI 两层，后者以沙盒形式隔离，可并存多个版本环境。 设计原因： 不同工作流对环境要求各异（CUDA、Python 版本等存在差异），独立沙盒便于切换。 环境复杂，沙盒便于快照备份，支持快速回滚与恢复。 环境安装基本无障碍；若卡在下载或加载 Manager 等节点，启用代理即可。 1.2 工作流导入 工作流呈现为画布形式，本质是一个 JSON 文件，便于分享与导入。 导入工作流后，系统会提示缺失的节点与模型： 节点：默认下载缓慢，可借助代理安装。 模型：体积通常达十几 GB，推荐使用磁力工具下载。 1.3 节点安装 自定义节点由第三方封装，通常托管于 GitHub 仓库。 安装步骤： 进入 ComfyUI 的 custom_nodes 目录。 git clone 拉取自定义节点仓库。 需使用 ComfyUI 的 Python 环境安装其 requirements 依赖。该环境为节点自带的虚拟环境，路径通常在 ComfyUI/.venv/Scripts/ 目录下（Windows 下路径含空格需加引号），例如： \u0026#34;ComfyUI/.venv/Scripts/python.exe\u0026#34; -m pip install -r requirements.txt 1.4 模型下载与归档 默认下载方式过慢，建议采用以下流程：\n在 HuggingFace 检索模型名称。 点击下载，待浏览器弹出下载提示。 右键复制下载链接。 将链接导入 Motrix 等下载工具，可显著提升速度。 下载小技巧：\n重命名：下载文件名称可能退化为数字与符号组合，丢失原模型名，须在下载时手动填写名称。 分类存放：下载时应同时指定对应模型类别目录，按类别归档后方可被识别： diffusion_models loras LLM vae text_encoders 下载完成后，在 ComfyUI 中刷新即可识别。\nFAQ 1. 已下载模型但无法识别 原因：工作流作者为模型名称添加了前缀或斜杠（如 XXLTX 前缀），导致名称不匹配。 处理步骤： 在模型选择中选用「从库中使用」。 选择对应的模型。 点击右上角打勾确认。 系统将自动应用该模型。 二、本地 ComfyUI 工作流方案 2.1 流程设计 初始设定：雪山滑雪遇雪崩 → 掏出打火机 → 变为未来科技打火机造型建筑。 流程：先用九宫格分镜工作流生成分镜图（支持文字与图片参考），再以 LTX 2.3 多宫格导演台生成视频。 2.2 九宫格分镜生成（FLUX.2 Klein） 详解视频：https://www.bilibili.com/video/BV12ukMBqEwb 工作流（RunningHub）：https://www.runninghub.cn/post/2012959545563291649/?inviteCode=rh-v1270 功能：支持文字与图片参考，生成一致性九宫格分镜图。 2.3 提示词反推节点升级（Qwen3 → Qwen3.5） 背景：该工作流内置 Qwen3 反推节点用于图片提示词反推与扩写，速度偏慢且版本落后（Qwen3.5 已发布），遂替换升级为 Qwen3.5，验证可行。 Qwen3.5 详解视频：https://www.bilibili.com/video/BV1WfwezZET7 安装：git clone https://github.com/lihaoyun6/ComfyUI-llama-cpp_vlm 放入 custom_nodes，再使用 ComfyUI 的 Python 环境安装其 requirements 依赖（参照 1.3）。llama-cpp-python 默认安装为 CPU 计算版本，需按下述 FAQ 替换为 GPU 版 wheel。 常用参数说明 避免 Thinking 模式（chat_handler）：该参数控制 Qwen3.5 的思考模式，开启会将思考过程一并输出，导致提示词不纯净，反推时应避免开启。 图像参考方式（inference_mode）：one by one 单图、images 多图、video 视频帧；多图参考需选 images。 提示词预设（preset_prompt）：提供多种风格模板，如 Normal - Describe、Prompt Style - Tags、Prompt Style - Detailed / Extreme Detailed、Creative - Short Story 等。 FAQ 1. llama 节点运行慢，负载集中在 CPU 而 GPU 无负载 原因：llama-cpp-python 默认安装的是 CPU 计算版本。 解决方案： 查询 Python 与 CUDA 版本：在 ComfyUI 应用环境（沙盒）的设置中，界面会提示 Python 与 CUDA 版本。 在 https://github.com/JamePeng/llama-cpp-python/releases 下载匹配的 .whl 文件。命名规则：win 适配 Windows，cp313 对应 Python 3.13，cu130 对应 CUDA 13.0。 python -m pip uninstall llama_cpp_python 卸载默认版本。 python -m pip install [.whl 路径] 安装对应版本。 替换后即可启用 GPU 加速，推理速度显著提升。 2. requirements 依赖与 GPU wheel 的关系 pip install -r requirements.txt 会安装节点全部依赖，其中包含 llama-cpp-python，但默认得到的是 CPU 计算版本。 手动安装 CUDA 版 wheel 是对该包本身的替换：先卸载默认版本，再安装对应版本。 两者不重复：requirements 中除 llama-cpp-python 外的依赖仍需安装，该包则最终以 wheel 覆盖，从而启用 GPU。 2.4 视频生成（LTX 2.3 多宫格导演台） 详解视频：https://www.bilibili.com/video/BV1DSKS6CE1Q 工作流（RunningHub）：https://www.runninghub.cn/post/2062170832935411714/?inviteCode=n2w0z6hs 功能特点： 支持多种宫格布局：2×2、3×2、3×3 九宫格等。 关闭宫格功能后，支持首尾帧视频生成与纯文生视频。 导播轨内可自由添加文字或图片，按需搭配组合输入。 2.5 结果与问题 分镜图一致性不足：滑雪、掏打火机等开头场景尚可，进入避难所后的内部房间装饰描述一致性差、画面突兀。 视频不连贯：因分镜图一致性差，尽管强调一镜到底，仍出现 PPT 式画面跳转。 本地模型与线上闭源模型差距大：使用相同分镜图与相同提示词，分别使用本地模型与线上模型生成视频。 本地模型生成效果基本不可用，画面扭曲，出现不可名状的奇怪物体与异常的手脚。 线上模型效果明显更好，尚可观看。 差距过大，已超出通过优化提示词或工作流所能弥补的范围，故放弃本地视频生成。 三、线上闭源模型方案 3.1 模型验证 将九宫格图提交线上视频模型（Seedance 2.0 mini）测试：效果优于本地，但仍存在某些分镜画面跳转，无法一镜到底。 根因：分镜图一致性差。 3.2 预研头部作品 参考头部 UP 主的 AI 避难所视频，归纳其做法： 使用线上闭源 Seedance 2.0（最新版），最长单条视频 15 秒。 每 15 秒设置隐蔽转场，利用烟雾弥漫、视野遮蔽、开门等瞬间切换镜头。 3.3 方案确定：参考图生视频 技术路线：放弃九宫格图生视频，改用参考图生视频。各大 AI 视频平台支持上传多张（最多 9 张）参考图生成视频，且参考图不增加积分消耗。 分镜设计（按 15 秒分段）： 第一段：极限运动 → 遇险 → 抛出物体 → 炸开烟雾 → 冲入烟雾 → 走出烟雾看到避难所外观 → 走向大门 → 手按门把手定格，以尾帧衔接下一段。 第二段：进入室内，参观装潢与各房间。 注意：避难所外观设计应避免从外部看到室内装修。 参考图设计： 视觉环境氛围图：海上冲浪、低人称视觉、巨浪来袭、海上暴风雨环境。 烟雾扩散图：立体烟雾模型，透明背景，无杂乱元素干扰。 避难所外观图：大门不宜过远，几步即可到达；外观以文生图生成，可自由设计、反复抽卡。 ","date":"2026-08-03T00:00:00+08:00","image":"/ai/creative/assets/comfyui.png","permalink":"/post/ai/creative/comfyui/","title":"ComfyUI 视频模型工作流 使用记录"},{"content":"Fan Control on PVE Tested on: ASUS TUF GAMING B550M-PLUS / AMD Ryzen 5 5600 / Nuvoton NCT6798D\n1. Load the Driver apt update \u0026amp;\u0026amp; apt install lm-sensors sensors-detect # Accept defaults, say yes to write to /etc/modules modprobe nct6775 sensors # Verify fan RPM and temperature readings appear 2. Identify the Active PWM Channel pwmconfig automatically maps each PWM control to the fan it actually drives, saving guesswork.\napt install fancontrol # pwmconfig ships with fancontrol pwmconfig Answer y to switch each PWM channel to manual mode. The tool will briefly stop each fan and measure RPM changes. Sample output:\nTesting pwm control hwmon3/pwm2 ... hwmon3/fan2_input ... speed was 2872 now 675 It appears that fan hwmon3/fan2_input is controlled by pwm hwmon3/pwm2 PWM 255 FAN 2842 PWM 120 FAN 1726 PWM 240 FAN 2760 PWM 105 FAN 1553 PWM 225 FAN 2626 PWM 90 FAN 1351 PWM 210 FAN 2532 PWM 75 FAN 1166 PWM 195 FAN 2385 PWM 60 FAN 942 PWM 180 FAN 2295 PWM 45 FAN 789 PWM 165 FAN 2136 PWM 30 FAN 566 PWM 150 FAN 2002 PWM 0-28 FAN ~490 PWM 135 FAN 1849 Exit with Ctrl+C or answer n to skip remaining channels once you\u0026rsquo;ve found the one controlling your target fan.\n3. Create the Fixed-Speed Script The script resolves the hwmon device by name at runtime, so it survives reboots and kernel updates without changes.\ncat \u0026gt; /root/pve-fan-fixed.sh \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; #!/bin/bash HWMON=$(grep -l nct6798 /sys/class/hwmon/hwmon*/name | grep -oP \u0026#39;hwmon\\d+\u0026#39;) [ -z \u0026#34;$HWMON\u0026#34; ] \u0026amp;\u0026amp; exit 1 echo 1 \u0026gt; /sys/class/hwmon/\u0026#34;$HWMON\u0026#34;/pwm2_enable echo 225 \u0026gt; /sys/class/hwmon/\u0026#34;$HWMON\u0026#34;/pwm2 EOF chmod +x /root/pve-fan-fixed.sh pwmN_enable values: 1 = Manual, 2 = Thermal, 5 = BIOS/ACPI (default)\n4. Set Up the systemd Service cat \u0026gt; /etc/systemd/system/pve-fan-fixed.service \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; [Unit] Description=Set fixed fan speed After=systemd-modules-load.service [Service] Type=oneshot ExecStart=/root/pve-fan-fixed.sh [Install] WantedBy=multi-user.target EOF systemctl enable --now pve-fan-fixed.service 5. Adjusting the Speed sed -i \u0026#39;/pwm2_enable/! s/echo [0-9]*/echo 225/\u0026#39; /root/pve-fan-fixed.sh systemctl restart pve-fan-fixed.service Or just nano /root/pve-fan-fixed.sh and change the number on the last line.\nPWM to RPM Mapping Data measured from your actual hardware via pwmconfig. Noise description is approximate.\nPWM RPM Noise 255 2842 Full speed 225 2626 High ← Current 180 2295 Medium-high 150 2002 Medium 120 1726 Medium-low 105 1553 Quiet 80 ~1300 Quiet 60 942 Very quiet 30 566 Extremely quiet 0-28 ~490 Minimum Uninstall systemctl disable --now pve-fan-fixed.service rm /etc/systemd/system/pve-fan-fixed.service /root/pve-fan-fixed.sh ","date":"2026-07-23T00:00:00+08:00","image":"/homelab/pve/assets/pve-fan-control.jpg","permalink":"/post/homelab/pve/pve-fan-control/","title":"Fan Control on PVE"},{"content":"PVE 磁盘健康检测 一、快速查看磁盘状态 1. SMART 检测 smartctl -A /dev/sdX # 查看属性摘要 smartctl -H /dev/sdX # 查看健康状态（PASSED/FAILED） 也可通过 PVE Web UI 查看：选中节点 → 磁盘 → 选择磁盘 → SMART 状态。若显示\u0026quot;未知\u0026quot;，先在命令行启用：\nsmartctl -s on /dev/sdX 实际输出：smartctl -A /dev/sda smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.8.12-25-pve] (local build) Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 195 051 Pre-fail Always - 1 3 Spin_Up_Time 0x0027 220 216 021 Pre-fail Always - 1983 4 Start_Stop_Count 0x0032 098 098 000 Old_age Always - 2523 5 Reallocated_Sector_Ct 0x0033 193 193 140 Pre-fail Always - 31424 7 Seek_Error_Rate 0x002e 200 198 000 Old_age Always - 0 9 Power_On_Hours 0x0032 043 043 000 Old_age Always - 42059 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1594 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 365 193 Load_Cycle_Count 0x0032 010 010 000 Old_age Always - 572990 194 Temperature_Celsius 0x0022 096 092 000 Old_age Always - 51 196 Reallocated_Event_Count 0x0032 001 001 000 Old_age Always - 384 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 77 二、SMART 数据解读 判断标准：VALUE 范围 1~253（越大越好），低于 THRESH 标记 FAILING_NOW。RAW_VALUE 为原始计数值。\n以下是关键属性说明，以及上面 smartctl -A /dev/sda 输出中对应的实际数据和风险评估：\nID 属性名 含义 实际值 警戒值 风险评估 5 Reallocated_Sector_Ct 已重映射扇区数 31424 \u0026gt; 0 需警惕，\u0026gt; 100 建议换盘 🚨 极高：备用区大量消耗 196 Reallocated_Event_Count 重映射事件次数 384 持续增长说明盘面加速劣化 ⚠️ 384 次，持续分批出现 197 Current_Pending_Sector 待稳定扇区 0 \u0026gt; 0 说明存在不稳定扇区 ✅ 正常 198 Offline_Uncorrectable 无法纠正的扇区 0 \u0026gt; 0 说明存在物理坏道 ✅ 正常 1 Raw_Read_Error_Rate 原始读取错误率 1 VALUE 持续下降说明磁头/盘面有问题 ✅ 正常 7 Seek_Error_Rate 寻道错误率 0 VALUE 大幅下降说明机械臂异常 ✅ 正常 9 Power_On_Hours 通电时间 42059 机械盘一般寿命 3~5 万小时 ~4.8 年 193 Load_Cycle_Count 磁头加载/卸载次数 572990 WD 盘额定约 30~60 万次 🚨 接近寿命极限 194 Temperature_Celsius 温度 51°C 建议 \u0026lt; 45°C，\u0026gt; 55°C 加速老化 ⚠️ 偏高 磁盘经历过大量坏道（3 万+），目前虽已被固件重映射、读写正常，但备用区消耗殆尽、负载周期接近寿命极限，健康状况堪忧。\n快查指令 smartctl -A /dev/sdX | grep -E \u0026#34;^( 5|197|198)\u0026#34; # 5=0, 197=0, 198=0 → 良好 # 5\u0026gt;0, 197=0, 198=0 → 旧坏道已被重映射，看数量判断风险 # 个位数：可监控使用，两位数及以上：建议换盘，持续增长中：立即换盘 # 197\u0026gt;0 或 198\u0026gt;0 → 当前存在坏道，需处理 三、深入扫描检测 SMART 只是磁盘固件记录的日志，如果需要确认实际扇区状况，做深度的全盘扫描。\n1. SMART 长测试 smartctl -t long /dev/sdX # 提交测试，由磁盘固件后台执行，立即返回 查看测试结果：\nsmartctl -l selftest /dev/sdX # 查看自检记录 smartctl -l error /dev/sdX # 查看 I/O 错误日志 实际输出 # 提交长测试（耗时约 6 小时，后台执行，立即返回） smartctl -t long /dev/sda === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: \u0026#34;Execute SMART Extended self-test routine immediately in off-line mode\u0026#34;. Drive command \u0026#34;Execute SMART Extended self-test routine immediately in off-line mode\u0026#34; successful. Testing has begun. Please wait 371 minutes for test to complete. Test will complete after Wed Jun 3 19:12:06 2026 CST Use smartctl -X to abort test. # 查看自检记录 smartctl -l selftest /dev/sda === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed: read failure 90% 42079 1427497600 # 2 Extended offline Completed: read failure 90% 42066 1427497600 # 查看 I/O 错误日志 smartctl -l error /dev/sda === START OF READ SMART DATA SECTION === SMART Error Log Version: 1 No Errors Logged 结果解读 #2（LifeTime 42066h） — 第一次测试，等了约 6 小时后查到的结果，Remaining 90% 说明测试仅执行了约 10% 就遇到读取错误并终止 #1（LifeTime 42079h） — 第二次提交后立即就查询到结果，因为同一 LBA 仍在报错，固件在相同位置再次中止测试 同一 LBA（1427497600）两次测试均报错 — 确认该扇区存在可复现的物理缺陷，非偶发性 No Errors Logged — 自检发现的错误记录在 selftest 日志中，与 -l error（记录主机 I/O 层面的读写错误）是两套独立的日志；自检报错不代表一定有主机 I/O 错误 后续操作 # 确认重映射扇区数是否增加 smartctl -A /dev/sda | grep -E \u0026#34;^( 5|196|197|198)\u0026#34; 5 Reallocated_Sector_Ct 0x0033 193 193 140 Pre-fail Always - 31424 196 Reallocated_Event_Count 0x0032 001 001 000 Old_age Always - 384 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0 重映射数未增加，所有属性值与初始检测时一致。说明：\n固件已知该 LBA 有问题（长测试两次确认），但未分配备用扇区进行重映射 最可能的原因：备用区已耗尽（31424 个），无可用扇区 Current_Pending_Sector 仍为 0 是因为长测试报的是读取失败，而非等待重映射的待稳定状态，两者机制不同 2. badblocks 全盘扫描 逐扇区读写校验，是检测坏道最严格的手段（1TB 盘约 4~8 小时），耗时较长用 nohup 后台执行：\n# 只读扫描（不破坏数据） nohup badblocks -sv /dev/sdX \u0026gt; /root/badblocks-scan.log 2\u0026gt;\u0026amp;1 \u0026amp; # 非破坏性读写扫描（写入→校验→恢复，更严格） nohup badblocks -svn /dev/sdX \u0026gt; /root/badblocks-scan.log 2\u0026gt;\u0026amp;1 \u0026amp; # 查看进度 tail -f /root/badblocks-scan.log 扫描结果 Checking for bad blocks in non-destructive read-write mode From block 0 to 1953514583 Testing with random pattern: done Pass completed, 0 bad blocks found. (0/0/0 errors) 全盘约 1TB 范围全部通过，零个坏块。\n3. smartctl 与 badblocks 的区别 两个工具检测的维度和方式完全不同：\nsmartctl badblocks 检测对象 磁盘固件记录的 SMART 日志和属性 实际的磁盘扇区 检测方式 读取磁盘内置的 SMART 数据（由磁盘固件持续记录） 逐扇区读写校验 能否发现已重映射的坏道 ✅ 能，从 Reallocated_Sector_Ct 看出历史累计量 ❌ 不能，坏道已被映射到备用区，读的是好数据 能否发现不稳定扇区 ✅ Current_Pending_Sector \u0026gt; 0 ✅ 读写不稳定会报错 执行速度 毫秒级（读固件数据） 数小时到数天（逐扇区扫描） 影响数据 只读，无影响 -n 模式无影响，-w 模式会破坏数据 主要用途 快速初筛、历史追踪、趋势分析 深度扫描、确认坏道位置、触发重映射 使用建议：\n先用 smartctl -A 快速查看属性，几分钟就能做完初步判断 如果 SMART 数据正常，一般不需要跑 badblocks 如果 SMART 数据异常（Reallocated_Sector_Ct 高、Current_Pending_Sector \u0026gt; 0），再针对性地跑 badblocks 做深度扫描 FAQ 为什么 SMART 差但 badblocks 无坏道？ 磁盘固件已将坏道重映射到备用区，badblocks 读的是备用扇区的好数据，因此不报错。\n逻辑层（badblocks 看到的）: LBA 0 → 正常读取 LBA 1 → 正常读取 LBA 2 → 被重映射 → 实际读取的是备用扇区 → 数据正常 LBA 3 → 正常读取 结论：所有 LBA 都能正常读写 → 0 bad blocks 物理层（盘面实际情况）: LBA 2 对应的物理位置已损坏（坏道） ↓ 固件自动将 LBA 2 映射到盘片深处的备用区（G-List） ↓ 上层（包括 badblocks）读 LBA 2 → 去备用区读 → 一切正常 badblocks 工作在逻辑层，读的是 LBA。坏道已被重映射到备用区，它读到的是好数据，自然报 0 Reallocated_Sector_Ct 不可逆地记录磁盘一生中遇到过的所有物理缺陷 badblocks 通过不代表磁盘健康，必须结合 SMART 综合判断 badblocks 报出坏道的场景 情况 badblocks 结果 磁盘健康 0 bad blocks ✅ 坏道已被固件重映射 0 bad blocks ⚠️（假阴性） 有不稳定扇区但未重映射 报出坏道 备用区已耗尽，新坏道无法重映射 报出坏道 🚨 综合判断 结合上面的数据综合评估：\n指标 数据 结论 Reallocated_Sector_Ct 31424 🚨 备用区大量消耗 Reallocated_Event_Count 384 次 ⚠️ 持续分批出现，盘面加速劣化 Load_Cycle_Count 572990 🚨 接近设计寿命上限 Temperature 51°C ⚠️ 偏高，加速老化 Current_Pending_Sector 0 ✅ 当前无活跃坏道 badblocks 0 bad blocks ✅ 当前读写正常 Power_On_Hours 42059 约 4.8 年 SMART 长测试 两次 read failure 于同一 LBA（1427497600） 🚨 存在可复现的物理缺陷，且重映射数未增加 Reallocated_Sector_Ct（复查） 仍为 31424 🚨 备用区已耗尽，固件无法分配新扇区 结论：磁盘健康状况堪忧，建议尽快替换。 原因不是\u0026quot;当前有坏道\u0026quot;（已被固件挡住），而是备用区已消耗殆尽，一旦下一个坏道出现就可能导致数据丢失。\n","date":"2026-06-03T00:00:00+08:00","image":"/homelab/pve/assets/disk-health.jpg","permalink":"/post/homelab/pve/disk-health/","title":"PVE 磁盘健康检测"},{"content":"LVM 迁移至 LVM-Thin 场景说明 双节点集群，节点名分别为 pve 和 x370：\n节点 系统盘 外挂存储 初始状态 pve 1T NVMe 2T HDD（挂载为 hdd） 有 LVM，无 Thin Pool，运行 VM-104（384G，实际 ~150G）、VM-110（384G，实际 ~276G） x370 500G NVMe 2T HDD（挂载为 hdd） 仅 LVM，无 Thin Pool，无 VM 本文记录的操作：\n在 x370 上移除 swap、缩容 root、创建 LVM-Thin Pool 将 pve 上的 VM-104 和 VM-110 跨节点迁移到 x370 的 LVM-Thin 1. 查看当前存储布局（x370 节点） lvdisplay vgdisplay pvdisplay 输出：\n--- Logical volume --- LV Path /dev/pve/swap LV Name swap LV Size 8.00 GiB --- Logical volume --- LV Path /dev/pve/root LV Name root VG Name pve LV Size \u0026lt;456.76 GiB --- Volume group --- VG Name pve VG Size \u0026lt;464.76 GiB Free PE / Size 0 / 0 # ← VG 已全部用完 --- Physical volume --- PV Name /dev/nvme0n1p3 PV Size 464.76 GiB pvesm status cat /etc/pve/storage.cfg 当前只有 local（Directory 类型，路径 /var/lib/vz），无 local-lvm。\n2. 确认 local 上的数据量 local 实际存储在系统根分区（/dev/pve/root）上：\ndf -h / du -sh /var/lib/vz/* x370 的系统盘非常干净——/var/lib/vz/ 下几乎无数据，root 仅占用 4.4 GiB。\n结合 PVE 系统 + 更新 + 上传 ISO 临时空间，决定缩容 root 到 30 GiB：\n缩容后布局： root 30 GiB ← PVE 系统 thinpool ~434 GiB ← swap 8G + root 释放的 ~426G 上传 ISO 时文件会先写入 /var/tmp（root 分区），30G 留出了约 16G 余量。\n3. 移除 swap（PVE 运行中操作） 3.1 停用 swap swapoff -a swapon --show # 无输出才算彻底关闭 free -h # Swap 行应为 0 3.2 从 /etc/fstab 移除 swap 条目 cat /etc/fstab # 输出： # /dev/pve/root / ext4 errors=remount-ro 0 1 # UUID=AB21-9339 /boot/efi vfat defaults 0 1 # /dev/pve/swap none swap sw 0 0 ← 删掉这一行 # proc /proc proc defaults 0 0 # PARTUUID=... /mnt/pve/mHdd exfat nofail,... 0 0 sed -i \u0026#39;/\\/dev\\/pve\\/swap/d\u0026#39; /etc/fstab 3.3 删除 swap LV lvremove /dev/pve/swap 3.4 验证空闲空间 vgdisplay # Free PE / Size 应显示约 8 GiB 4. Live 环境中缩容 root 并创建 Thin Pool root 是运行中的根分区（ext4），无法在线缩容。以下步骤在 PVE ISO Debug Mode 的 Live 环境中完成。\n4.1 进入 PVE Debug Mode Live 环境 ① 从 PVE ISO 启动，选择：\nAdvanced Options ├── Install Proxmox VE (Graphical, Debug Mode) ← 选这个 └── Install Proxmox VE (Terminal UI, Debug Mode) ← 图形黑屏则选这个 ② 系统启动后会先进入 BusyBox 最小 shell（无 LVM 工具），直接退出：\nexit # 或 Ctrl + D ③ 退出后继续加载，会再次弹出 第二个 debug shell，此时 LVM 工具已就绪。\n4.2 激活 LVM vgscan vgchange -ay lvdisplay # 应输出 /dev/pve/root 4.3 检查文件系统 e2fsck -f /dev/pve/root 4.4 缩小 ext4 到 30 GiB resize2fs /dev/pve/root 30G 4.5 缩小 LV 到 30 GiB lvreduce -L 30G /dev/pve/root 4.6 用空闲空间创建 Thin Pool 此时 VG 中的空闲空间 = swap 释放的 8 GiB + root 缩容释放的 ~426 GiB：\nlvcreate -l 100%FREE -T /dev/pve/thinpool 验证：\nlvdisplay # 应看到： # /dev/pve/root 30G # /dev/pve/thinpool ~434G 4.7 退出 Live 环境 exit # 进入安装界面，选择 Abort → 拔掉 U 盘 → reboot 5. 重启回 PVE 并注册存储 5.1 验证 LVM lvdisplay # 应有 /dev/pve/root（30G）和 /dev/pve/thinpool（~434G） 5.2 向 PVE 添加 LVM-Thin 存储 pvesm add lvmthin local-lvm --vgname pve --thinpool thinpool 参数：\n参数 必填 说明 local-lvm ✅ PVE 中显示的名称 --vgname ✅ 卷组名，这里是 pve --thinpool ✅ 刚创建的 Thin Pool 名 --content ❌ 默认 images,rootdir 验证：\npvesm status # 应看到 local-lvm，类型 lvmthin cat /etc/pve/storage.cfg # 对应配置段： # lvmthin: local-lvm # thinpool thinpool # vgname pve # content images,rootdir 6. 跨节点迁移前置：QEMU 版本对齐 跨节点在线迁移要求两节点 QEMU 版本一致。pve 节点的 PVE 版本较新（QEMU 9.x），而 x370 的 QEMU 还是 8.1.5：\npveversion qemu-system-x86_64 --version | head -1 在 x370 上配置清华源并升级：\n# 配置清华源（以 bookworm 为例） cat \u0026gt; /etc/apt/sources.list \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware EOF # 配置 PVE 社区源 cat \u0026gt; /etc/apt/sources.list.d/pve.list \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription EOF # 禁用企业版仓库（非订阅用户） sed -i \u0026#39;s/^deb/#deb/\u0026#39; /etc/apt/sources.list.d/pve-enterprise.list 2\u0026gt;/dev/null # 更新并升级 apt update \u0026amp;\u0026amp; apt dist-upgrade -y 升级后可能看到以下提示：\nProcessing triggers for initramfs-tools (0.142+deb12u3) ... update-initramfs: Generating /boot/initrd.img-6.8.12-25-pve ... Removable bootloader found at \u0026#39;/boot/efi/EFI/BOOT/BOOTX64.efi\u0026#39;, but GRUB packages not set up to update it! Run the following command: echo \u0026#39;grub-efi-amd64 grub2/force_efi_extra_removable boolean true\u0026#39; | debconf-set-selections -v -u Then reinstall GRUB with \u0026#39;apt install --reinstall grub-efi-amd64\u0026#39; 这不是错误，是 UEFI 可移动启动路径的一次性提醒。按提示修复即可：\necho \u0026#39;grub-efi-amd64 grub2/force_efi_extra_removable boolean true\u0026#39; | debconf-set-selections -v -u apt install --reinstall grub-efi-amd64 注意：升级前先解除 r8169 黑名单（避免失联） 如果 x370 使用 Realtek RTL8125 网卡并安装了第三方 r8125 驱动，apt dist-upgrade 升级内核后需要重新编译 r8125 驱动。\n正确做法：升级后不要立即重启。此时旧内核仍在运行，r8125 驱动正常工作，网络未断开。先解除 r8169 黑名单再重启，确保新内核的备用方案就绪：\n# 重启前解除 r8169 黑名单，让新内核回落为 r8169 sed -i \u0026#39;s/^blacklist r8169/#blacklist r8169/\u0026#39; /etc/modprobe.d/blacklist-r8169.conf update-initramfs -u reboot 重启后新内核加载 r8169 驱动，网络正常连接。通过 SSH 远程完成后续操作：\n# 安装新内核头文件（此时 uname -r 为新内核版本） apt install pve-headers-$(uname -r) -y cd /root/realtek-r8125-dkms ./dkms-install.sh # 恢复黑名单，禁用 r8169，让 r8125 接管 sed -i \u0026#39;s/^#blacklist r8169/blacklist r8169/\u0026#39; /etc/modprobe.d/blacklist-r8169.conf update-initramfs -u reboot 第二次重启后 r8125 驱动正常工作。\n若已重启导致失联，接显示器键盘物理恢复后执行上述步骤。详见 realtek-r8125.md 7. 迁移 VM-104（在线迁移） VM-104：384 GiB 虚拟大小，实际占用 ~150 GiB（Windows，Trim 后）。\nx370 的 thin pool 当前还有 ~434 GiB 剩余空间，远超 VM-104 的虚拟大小，可直接在线迁移。\n7.1 PVE GUI 迁移 x370 Web UI → 选择 pve 节点 → VM-104 → 迁移：\n目标节点：x370 在线迁移（保持 VM 运行） 高级 → 目标存储：local-lvm 在线迁移使用 NBD（Network Block Device）传输数据，不加密，性能相当于纯 TCP 吞吐。\n7.2 验证迁移完成 qm config 104 # scsi0: local-lvm:vm-104-disk-0,... # efidisk0: local-lvm:vm-104-disk-1,... lvs -a | grep thinpool # Data% 应显示约 35%（150G / 434G） 7.3 配置 Discard、SSD 仿真 迁移完成后磁盘默认使用 raw 格式，需要开启 discard 和 ssd 仿真以支持 Trim：\nqm set 104 --scsi0 local-lvm:vm-104-disk-0,cache=writeback,discard=on,iothread=1,ssd=1 qm set 104 --efidisk0 local-lvm:vm-104-disk-1,efitype=4m,pre-enrolled-keys=1 ssd=1 可以在磁盘创建后随时添加，不影响已有数据。Windows 重启后会自动识别为 SSD。\nEFI 盘大小说明 EFI 盘虽然只有 528K，但 LVM-Thin 的最小分配单位是 4 MiB（PE Size）：\n# 日志输出：Rounding up size to full physical extent 4.00 MiB # 下面两种写法效果一样 lvcreate -V 528K -T pve/thinpool -n vm-104-disk-1 # 自动 round up 到 4M lvcreate -V 4M -T pve/thinpool -n vm-104-disk-1 # 直接给 4M 8. Windows VM Trim 配置（VM-104） LVM-Thin 的磁盘是精简置备的，VM 内删除文件后，需要通知底层存储释放已空闲的块，否则物理空间不会被回收。\n8.1 检查磁盘配置 qm config 104 要求配置：\n配置项 要求 总线类型 VirtIO SCSI SCSI 控制器 virtio-scsi-single Discard on SSD 仿真 on 8.2 Windows 内确认驱动 打开 设备管理器 → 存储控制器，应看到 Red Hat VirtIO SCSI pass-through controller。\n如果不是，挂载 virtio-win.iso 更新驱动。\n8.3 手动 Trim 管理员 PowerShell：\n# 普通 Trim（日常回收） Optimize-Volume -DriveLetter C -Verbose # 全盘强制 Retrim（删除大量文件后立即回收，需足够 VM 内存） Optimize-Volume -DriveLetter C -ReTrim -Verbose 全盘 Retrim 需要为磁盘全部空间构建位图，384G 磁盘约需 8G+ VM 内存，不足时报错 40002。\n8.4 验证 Trim 状态 # Trim 是否启用（0 = 启用） fsutil behavior query DisableDeleteNotify # 输出：NTFS DisableDeleteNotify = 0 # 磁盘类型（应为 SSD） Get-PhysicalDisk | Select-Object FriendlyName, MediaType, BusType # MediaType 应为 SSD 8.5 备选：设置每周自动 Trim Windows 通常自带磁盘优化计划任务（每周自动运行），不需要额外配置。如需手动添加备选任务：\nschtasks /Create /SC WEEKLY /D SUN /TN \u0026#34;Trim C Drive\u0026#34; /TR \u0026#34;powershell.exe -Command \u0026#39;Optimize-Volume -DriveLetter C -Verbose\u0026#39;\u0026#34; /RL HIGHEST /RU SYSTEM 8.6 PVE 上验证回收 lvs -a | grep thinpool 关注 Data%——VM-104 虚拟 384G 但 Data% 仅 ~35%，说明精简特性在正常工作。\nlvs 的 LV Size 是虚拟大小（精简置备的上限），不代表物理占用。物理占用看 Data%。\n9. 迁移 VM-110 VM-110：384 GiB 虚拟大小，实际占用 ~276 GiB（Windows，Trim 前）。\n此时 x370 的 thin pool 已有 VM-104 占用 ~150G，剩余约 284 GiB。剩余空间小于 VM-110 的虚拟大小（384G），但大于实际数据（~276G）。\n9.1 第一次尝试：在线迁移（被拒绝） qm migrate 110 x370 --online --with-local-disks --target-storage local-lvm PVE 拒绝执行——qm migrate 在发起前会检查目标 thin pool 的剩余物理空间是否 ≥ 虚拟大小，即使实际数据少得多也会拒绝。\n9.2 第二次尝试：qemu-img convert -W（失败，数据损坏） 绕过在线迁移的限制，将 qcow2 文件拷贝到 x370 的机械硬盘后，直接导入到 LVM-Thin：\n# ❌ 错误方案 qemu-img convert -p -W /mnt/pve/hdd/images/110/vm-110-disk-0.qcow2 /dev/pve/vm-110-disk-0 结果：Thin Pool 写穿至 100%，VM 能启动但系统卡顿、应用损坏。进入 Windows 后执行 Trim 报错：\nVERBOSE: Invoking slab consolidation on (C:)... Optimize-Volume : Failed 执行 chkdsk C: /F 发现文件系统错误（dirty bit 被设置），但修复后系统仍然异常——这不是普通的 dirty bit 问题，是 thin pool 写穿导致的数据错乱。\n原因：-W 的含义是 out-of-order writes（乱序写入）：\n官方文档：Allow out-of-order writes to the destination. This option improves performance, but is only recommended for preallocated devices like host devices or other raw block devices.\nLVM-Thin volume 不是预分配设备，乱序写入导致 thin pool 的 chunk 分配碎片化，384G 虚拟空间被全部实际分配，物理空间耗尽后后续写入被丢弃。\n场景 用 -W？ 预分配设备（厚置备 LVM、物理磁盘） ✅ 乱序写入提升性能 LVM-Thin volume ❌ 不可用，碎片化写穿 管道传输（| ssh dd） ❌ 不可用 qcow2 → qcow2 ❌ 不需要 结论：往 LVM-Thin 写数据永远不要加 -W。\n9.3 恢复：先备份 VM-104，再清理损坏数据 VM-104 已迁移到 x370 且正在正常使用，在清理前先将其备份到 x370 的机械硬盘上：\n# 在 x370 上备份 VM-104 到本地机械硬盘 vzdump 104 --storage hdd --compress zstd # 备份文件保存到 /mnt/pve/hdd/dump/ 备份完成后，删除 x370 thin pool 中损坏的 VM-110 数据（同时清理 VM-104 以腾出空间）：\n# 删除损坏的卷，释放 thin pool 空间 lvremove /dev/pve/vm-104-disk-0 lvremove /dev/pve/vm-104-disk-1 lvs -a | grep thinpool # Data% 应降到正常水平 9.4 迁移策略调整 thin pool 总容量 ~434G，需迁入两个各 384G 的 VM。决定调整顺序：\n先迁 VM-110（实际 ~276G，较大）→ 在线迁移 再迁 VM-104（实际 ~150G，较小）→ 备份恢复 这样 thin pool 在第一步后剩余 ~158G（434 - 276），第二步恢复备份时 VMA 会跳过空洞，~150G 实际数据写入后仍有盈余。\n9.5 在线迁移 VM-110 VM-110 跨节点在线迁移到 x370：\nqm migrate 110 x370 --online --with-local-disks --target-storage local-lvm 迁移完成后：\nqm config 110 lvs -a | grep thinpool # Data% 应约 63%（276G / 434G） 9.6 从备份恢复 VM-104 VM-104 的备份已在 9.3 中完成（在 x370 上备份到机械硬盘）。现在从备份恢复到 thin pool：\n在 x370 节点 的 GUI 上操作：\nDatacenter → x370 → 备份 → 选择备份文件 → 恢复到 local-lvm\nVMA 恢复日志：\nCFG: size: 658 name: qemu-server.conf DEV: dev_id=1 size: 540672 devname: drive-efidisk0 DEV: dev_id=2 size: 412316860416 devname: drive-scsi0 Logical volume \u0026#34;vm-104-disk-0\u0026#34; created. Logical volume \u0026#34;vm-104-disk-1\u0026#34; created. map \u0026#39;drive-efidisk0\u0026#39; to \u0026#39;/dev/pve/vm-104-disk-0\u0026#39; (write zeros = 0) map \u0026#39;drive-scsi0\u0026#39; to \u0026#39;/dev/pve/vm-104-disk-1\u0026#39; (write zeros = 0) progress 1% (read 4123197440 bytes, duration 17 sec) ... total bytes read 412317450240, sparse bytes 272608817152 (66.1%) space reduction due to 4K zero blocks 1.45% 关键数据解读：\ntotal bytes read 412317450240 → 虚拟 384 GiB sparse bytes 272608817152 → 66.1% 被检测为空洞，跳过未写 zero block reduction → 额外 1.45% 零块跳过 实际写入 thin pool ≈ 133 GiB ← 远小于虚拟大小 9.7 最终结果 thin pool 物理: 434 GiB VM-110 实际占用: ~276 GiB ← 在线迁移 VM-104 实际占用: ~133 GiB ← VMA 恢复（66.1% sparse 跳过） ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 实际总计: ~409 GiB ◀ 仍有 ~25 GiB 余量 两种方案对比：\nqemu-img convert -W ❌ VMA 备份恢复 ✅ 稀疏检测 无（-W 乱序写入填满全部） 内置，恢复时自动跳过 66%+ 空洞 写入顺序 乱序（碎片化） 顺序（紧密排列） Thin pool 空间利用 差，写穿 100% 优，仅 ~35% 数据一致性 数据损坏 高（VMA 含校验） 超额配置警告 创建 VM 的 thin volume 时可能看到：\nWARNING: Sum of all thin volume sizes (\u0026lt;770.01 GiB) exceeds the size of thin pool WARNING: You have not turned on protection against thin pools running out of space. 这是正常现象——两个 384G 的虚拟卷总和 768G 远超 434G 物理空间，这正是精简配置的工作方式。只要实际数据量之和不超过物理上限即可。\n如果担心撑爆，可以启用自动扩容（需 VG 有空闲空间）：\n# /etc/lvm/lvm.conf 设置： # thin_pool_autoextend_threshold = 80 # thin_pool_autoextend_percent = 20 LVM-Thin 不支持缩容 若迁移后发现虚拟大小过大，不能像 qcow2 那样缩容：\n存储类型 支持缩容 方式 qcow2 文件 ✅ qemu-img resize --shrink LVM 线性卷 ✅ lvreduce LVM-Thin volume ❌ 不支持 只能新建小卷后复制数据：\nlvcreate -V 300G -T pve/thinpool -n vm-110-disk-0-new qemu-img convert -p /dev/pve/vm-110-disk-0 /dev/pve/vm-110-disk-0-new qm set 110 -scsi0 local-lvm:vm-110-disk-0-new,discard=on,ssd=1 lvremove /dev/pve/vm-110-disk-0 10. 迁移后清理残留卷 迁移完成后，旧存储上的废弃卷可以删除。\n# 确认无其他 VM 引用 grep -r \u0026#34;vm-104-disk-0\\|vm-104-disk-1\u0026#34; /etc/pve/qemu-server/ # 删除残留卷 lvremove /dev/pve/vm-104-disk-0 lvremove /dev/pve/vm-104-disk-1 4MB 大小的卷通常是 EFI 盘，LVM-Thin 最小分配单位显示为 4M，属正常现象。\n参考 Proxmox VE Storage: LVM Proxmox VE Storage: LVM-Thin LVM Administration - Red Hat qemu-img 文档 ","date":"2026-05-28T00:00:00+08:00","image":"/homelab/pve/assets/lvm2thin.jpg","permalink":"/post/homelab/pve/lvm2thin/","title":"LVM 迁移至 LVM-Thin"},{"content":"Background 2.5G网卡，iperf3测速只有1G\nSolution 1. 查询网卡及其驱动信息 # 查询网卡pci编号 lspci | grep RTL8125 # 06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05) # 查询网卡加载的驱动 lspci -s 06:00.0 -k # 06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05) # Subsystem: ASUSTeK Computer Inc. RTL8125 2.5GbE Controller # Kernel driver in use: r8169 # Kernel modules: r8169 2. 安装r8125驱动 GitHub - awesometic/realtek-r8125-dkms: A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. apt update apt install -y dkms pve-headers-$(uname -r) git git clone https://github.com/awesometic/realtek-r8125-dkms.git cd realtek-r8125-dkms ./dkms-install.sh 3. 禁用r8169驱动 # 检查是否仍在加载r8169驱动 lsmod | grep -i r8169 # r8169 114688 0 # 禁用r8169驱动 sudo tee -a /etc/modprobe.d/blacklist-r8169.conf \u0026gt; /dev/null \u0026lt;\u0026lt;EOT # To use r8125 driver explicitly blacklist r8169 EOT # 更新内核初始化文件 (让黑名单生效) sudo update-initramfs -u reboot Reference PVE 8安装 ReakTEK RTL8125B 2.5G网卡驱动 - 知乎 FAQ 1. sudo update-initramfs -u 告警 sudo update-initramfs -u # output update-initramfs: Generating /boot/initrd.img-6.8.12-18-pve Running hook script \u0026#39;zz-proxmox-boot\u0026#39;.. Re-executing \u0026#39;/etc/kernel/postinst.d/zz-proxmox-boot\u0026#39; in new private mount namespace.. No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync. # warning System booted in EFI-mode but \u0026#39;grub-efi-amd64\u0026#39; meta-package not installed! Install \u0026#39;grub-efi-amd64\u0026#39; to get updates. Removable bootloader found at \u0026#39;/boot/efi/EFI/BOOT/BOOTX64.efi\u0026#39;, but GRUB packages not set up to update it! Run the following command: # solution echo \u0026#39;grub-efi-amd64 grub2/force_efi_extra_removable boolean true\u0026#39; | debconf-set-selections -v -u Then reinstall GRUB with \u0026#39;apt install --reinstall grub-efi-amd64\u0026#39; 2. PVE内核升级后网卡驱动失效 apt dist-upgrade 升级 PVE 时可能升级内核，DKMS 安装的 r8125 驱动需为新内核重新编译。\n正确处理方式（避免失联） 升级后不要立即重启。此时系统仍在运行旧内核，r8125 驱动正常工作，网络未断开。\n利用当前网络，先解除 r8169 黑名单，确保新内核的备用方案就绪：\n# 重启前解除 r8169 黑名单，让新内核回落为 r8169 sed -i \u0026#39;s/^blacklist r8169/#blacklist r8169/\u0026#39; /etc/modprobe.d/blacklist-r8169.conf update-initramfs -u reboot 重启后新内核加载 r8169 驱动，网络正常连接。通过 SSH 远程完成后续操作：\n# 安装新内核头文件（此时 uname -r 为新内核版本） apt install pve-headers-$(uname -r) -y cd /root/realtek-r8125-dkms ./dkms-install.sh # 恢复黑名单，禁用 r8169，让 r8125 接管 sed -i \u0026#39;s/^#blacklist r8169/blacklist r8169/\u0026#39; /etc/modprobe.d/blacklist-r8169.conf update-initramfs -u reboot 第二次重启后，r8125 驱动为当前内核编译，正常工作。\n若已重启导致失联（物理恢复） 如果已经重启并断网（r8125 未为新内核编译、r8169 被黑名单屏蔽），需接显示器键盘物理恢复：\n# 临时恢复 r8169 驱动 sed -i \u0026#39;s/^blacklist r8169/#blacklist r8169/\u0026#39; /etc/modprobe.d/blacklist-r8169.conf update-initramfs -u reboot 网络恢复后，执行上述 正确处理方式 中的安装头文件、重装 r8125 驱动、恢复黑名单、重启步骤。\n也可以重启后选旧内核启动（GRUB → Advanced options），进去后网络正常，再为新内核重新编译驱动。\n","date":"2026-04-11T00:00:00+08:00","image":"/homelab/pve/assets/realtek-r8125.jpg","permalink":"/post/homelab/pve/realtek-r8125/","title":"Realtek R8125"},{"content":"Problem dp接口黑屏\nPotential causes NVIDIA Graphics Firmware Update Tool for DisplayPort 1.3 and 1.4 Displays Temporary solution 先用DP转HDMI接口连接，安装好驱动，再换回DP NVIDIA RTX / Quadro Desktop and Notebook Driver Release 470 R470 U18 (475.14) | Windows 11 Curative treatment (Experimental) Update GOP Step 1. Backup VBIOS nvflashk: Flash (almost) any vBIOS to (almost) any nVIDIA GPU - GitHub ./nvflashk.exe --save original.rom 2. Update GOP of VBIOS GOP_Updater_v1.9.6.5.k_mod_v0.5.2 - pCloud 将original.rom直接拖放到GOPupd.bat上，生成xxx_updGOP.rom\n3. Flash VBOIS ./nvflashk.exe --list -L log.txt # 确认显示适配器编号 # -L 将执行日志输出到文件，解决运行结果一闪而过的问题 ./nvflashk.exe --check -L log.txt # 检查显卡bios芯片的容量大小 ./nvflashk.exe --protectoff -L log.txt # 关闭写入保护，解决报错：EEPROM erase failed. Software write protection enabled. ./nvflashk.exe --index=0 xxx_updGOP.rom -L log.txt Reference 搬运一个GOPupd mod版本合集（免安装python环境） - 哔哩哔哩 AMD and Nvidia GOP update (No requests, DIY) - BIOS/UEFI Modding / BIOS Modding Guides and Problems - Win-Raid Forum Result 刷入更新了GOP的VBIOS后，仍旧黑屏，没有效果\nFAQ 1. 刷入报错 ./nvflash.exe --index=0 xxx_updGOP.rom -L log.txt # ERROR: Falcon reset control is disallowed! A system restart might be required before running the utility. Reason nvflash版本太高\nSolution 改用低版本nvflash_5.190.0.1，但仍出现新报错\n# EEPROM erase failed. Software write protection enabled. 改用 nvflashk 2. Windows分辨率设置没有4k选项？ NVDIA 控制面板 =\u0026gt; 更改分辨率 =\u0026gt; 自定义 =\u0026gt; 创建自定义分辨率 =\u0026gt; 水平像素3840，垂直扫描线2160 =\u0026gt; 勾选应用\n3. 应当支持10bit色深，但系统位深度显示为8位？ NVDIA 控制面板 =\u0026gt; 更改分辨率 =\u0026gt; 使用 NVDIA 颜色设置 =\u0026gt; 输出颜色深度 10 bpc\n","date":"2026-03-15T00:00:00+08:00","image":"/hardware/assets/quadro-410.jpg","permalink":"/post/hardware/quadro-410/","title":"Quadro 410"},{"content":"食材 主料 猪瘦肉150克，鸡蛋2个，番茄4个\n配料 蒜瓣，姜片，葱\n调料 盐、冰糖、生抽、料酒、淀粉、油\n切配 在番茄顶部划十字，用开水烫约1分钟，轻松剥去外皮，切成小块。 肉切片，加1勺料酒、1勺生抽、少许盐、1勺淀粉和油抓匀，腌10分钟。 鸡蛋加盐打散。蒜、姜切片，葱切花。 烹饪步骤 1. 炒肉 热锅温油，下肉片滑炒至变色，盛出。\n2. 熬煮番茄 用锅中底油，爆香蒜片、姜片。 倒入番茄块，加盐，中火翻炒并轻压。 不加水，盖盖小火焖2-3分钟至番茄软烂收汁。 加冰糖，炒至融化。 3. 淋蛋花 将肉片倒回酱中炒匀。 保持微沸，转小火，均匀淋入蛋液。 静置5-8秒，再用铲轻推形成蛋花。 4. 出锅 尝味补盐，撒葱花，翻炒两下即可。\n","date":"2026-02-02T00:00:00+08:00","image":"/recipes/vegetable-dish/assets/%E7%95%AA%E8%8C%84%E7%85%AE%E7%8C%AA%E8%82%89.jpg","permalink":"/post/recipes/vegetable-dish/%E7%95%AA%E8%8C%84%E7%85%AE%E7%8C%AA%E8%82%89/","title":"番茄煮猪肉"},{"content":"洗净黑膜、贴骨血，刮鳞，盐腌10分钟，洗净，蒸7分钟，浇葱油\n","date":"2026-02-02T00:00:00+08:00","image":"/recipes/aquatic/assets/%E9%87%91%E9%BC%93%E9%B1%BC.jpg","permalink":"/post/recipes/aquatic/%E9%87%91%E9%BC%93%E9%B1%BC/","title":"金鼓鱼"},{"content":"豆粉洗粘液 蒜蓉豆豉剁烂，加半勺盐、糖、鸡粉，酱油，几勺豆粉、油混合\n","date":"2026-02-02T00:00:00+08:00","image":"/recipes/aquatic/assets/%E7%9B%98%E9%BE%99%E9%B3%9D.jpg","permalink":"/post/recipes/aquatic/%E7%9B%98%E9%BE%99%E9%B3%9D/","title":"盘龙鳝"},{"content":"先焯熟2分钟，捞起放凉 冷油下蒜，出蒜香，下蚝油，煮开关火，浇给\n","date":"2026-02-02T00:00:00+08:00","image":"/recipes/vegetable-dish/assets/%E8%92%9C%E8%93%89%E8%9A%9D%E6%B2%B9%E7%94%9F%E8%8F%9C.jpg","permalink":"/post/recipes/vegetable-dish/%E8%92%9C%E8%93%89%E8%9A%9D%E6%B2%B9%E7%94%9F%E8%8F%9C/","title":"蒜蓉蚝油生菜"},{"content":"丝瓜咸蛋肉片汤 食材（2人份） 丝瓜 1根（约350克） 咸鸭蛋 1个（盐水浸泡的更健康，草木灰腌制的更咸） 瘦肉片 150克（推荐壹号土猪） 葱、姜 切配 丝瓜处理：削去硬皮（不用削得太干净），切滚刀块 咸蛋处理：分离蛋黄和蛋清，蛋黄切成两半（分成四份会太散，煲融化消失） 肉片腌制：加料酒、少许盐、白胡椒粉，腌制10分钟 生姜切片，小葱切段 烹饪步骤 煮水：锅中加两碗矿泉水（预估能没过食材的量），大火烧开 加姜片：水开后放姜片，煮2-3分钟出香味 下肉片：放入腌好的肉片，用筷子轻轻搅散，煮至变色 加蛋黄：放入咸蛋黄，避免搅拌打散 煮丝瓜：加入丝瓜块，煮3-5分钟至变软 加蛋白：倒入咸蛋白，再煮1-2分钟 调味：根据个人口味加盐（注意咸蛋已有咸味），撒白胡椒粉 出锅：撒葱段，滴几滴香油即可 ","date":"2025-10-24T00:00:00+08:00","image":"/recipes/soup/assets/%E4%B8%9D%E7%93%9C%E5%92%B8%E8%9B%8B%E8%82%89%E7%89%87%E6%B1%A4.jpg","permalink":"/post/recipes/soup/%E4%B8%9D%E7%93%9C%E5%92%B8%E8%9B%8B%E8%82%89%E7%89%87%E6%B1%A4/","title":"丝瓜咸蛋肉片汤"},{"content":"鲜虾吊龙河粉 食材（2人份） 鲜活黑虎虾 400g 吊龙牛肉 120g 新鲜沙河粉 400g 葱、姜、蒜 切配 虾的处理 将虾洗净，拧下虾头 关键细节：用剪刀剪去虾头的须和脚，避免煎制时焦糊发苦 虾身保留外壳（防止鲜味流失） 河粉洗净 切葱花、姜片、蒜片 烹饪步骤 煎虾头油与制汤 干煸去水：热锅无油，放入虾头，中火煸炒至水汽蒸发、虾头变红\n原理：去除水汽可防止后续煎炸时油溅，同时激发初始香气 小火压榨：加入冷油与蒜片，转小火。用锅铲持续按压虾头，挤出红油，煎约8分钟至虾头酥脆\n关键：小火慢煎避免焦糊发苦 沸水萃取：沿锅边冲入沸水，转大火煮沸\n原理：沸水能使虾油乳化，汤汁迅速变白 煮粉与调味 食材入锅顺序 鲜虾：先下锅煮2–3分钟，至虾身变红、弯曲 河粉：放入河粉烫1–2分钟，烫熟即可，避免久煮软烂 吊龙牛肉：最后放入，涮30秒–1分钟，肉片变色即捞出 加入盐调味，撒上葱花即可 ","date":"2025-10-24T00:00:00+08:00","image":"/recipes/aquatic/assets/%E9%B2%9C%E8%99%BE%E5%90%8A%E9%BE%99%E6%B2%B3%E7%B2%89.jpg","permalink":"/post/recipes/aquatic/%E9%B2%9C%E8%99%BE%E5%90%8A%E9%BE%99%E6%B2%B3%E7%B2%89/","title":"鲜虾吊龙河粉"},{"content":"Table tennis 搓球 共性 步法 搓球和落脚要同时进行 左腿发力蹬上去，而不是用右腿跨上去，否则容易重心后仰 拍型 根据球的旋转强度调整拍面角度，转放平，不转放立 搓球末段要有把拍面放平，兜住底部摩擦向前切的感觉 拍头朝右前方 击球时机 等球下降期\n击球部位 若无侧旋，搓球的中下部即可\n反手搓球 脚步 踏右脚，向前右方，偏大前\n发力方向 从左后方往前发力，打斜线往右前，打直线往前即可。\n正手搓球 脚步 在反手位准备（正手好顾及，反手难顾及） 踏右脚，向右前方，偏大右 拍型 拍面要展开放平，与桌面夹角小于45度，末段要有拍面放平兜底的感觉\n发力方向 从右后方往前发力，打斜线往左前，打直线往前即可。 要有横向摩擦的感觉？\n挑打 共性 应用场景 上旋，不转\n手型 手往落点靠，手肘尽量贴近球桌 肘关节和身体不要离太远或太近，保持适中距离，大概垂直平行 引拍不要太大，甚至夸张到向后拉。微微即可，以免错失击球时机 前臂发力，手指手腕轻轻带动即可 击球时机 高点期，而不是上升期\n正手挑打 打直线 拍型 手腕向外展，拍面与桌面成90度垂直（正手攻、拉球同理）\n反手挑打 拍型 手到位后，拍面与桌面成90度垂直，拍头朝正左方准备\nReference 乒乓教磕书第31期：不转短球不会进攻？正手短挑打教学！ 打直线 正手 与正手挑打直线同理\n反手 拍型 拍面与前方成45度夹角，往前推，往右转\n发球 共性 步法 发球后，立刻还原 下旋 拍型 由始至终保持拍头、拍面左侧向上翘（虽说上翘，实际下放到腹部击球时，拍面就平了）\n动作手型 全程轨迹类似U型兜住的感觉（代课教练又说不要U型兜，放平即可） 要有吃球的感觉（尽可能延长摩擦时间） 小臂加速砍 砍到面向的正前方即到位（即与端线平行），再往后只是惯性动作 触球瞬间，手腕要用力收紧 末段动作要有意识收住，瞬间刹车产生摩擦 手腕不要太松，不要内旋至180度，导致砍过头 脚步 重心转移顺序：左脚 =\u0026gt; 右脚 =\u0026gt; 左脚\n重心下沉至左脚 抛球，重心略微上升（增加重力势能）并转移至右脚 重心转移回左脚，同时下压，自然地做出踏脚发力 结尾保持重心下沉至左脚 发球方向 通过末段动作身体转向控制（转胯）\n侧旋 发球方向 通过拍面控制\n拉球 共性 握拍 食指较长时，不必定死放太横，可以30度自然斜上放 食指中间关节抵住反胶底部边缘 拇指关节侧面抵住正胶底部边缘 发力点：食指中间关节（亦有说指尖）、拇指关节侧面、虎口（？）\n脚步 先垫步到位再拉球 垫步是底盘往前探，不要直接上半身往前冲\n重心 不要通过屈膝来实现重心下压（伤膝盖），膝盖不要超过脚 而应通过屁股、大腿根下沉来实现\n发力方向 往前，最后拍头指向对方\n正手拉球 右手向下向后引拍，右胯、肩下压 重心足够低到视线略高于球网 末段不要向右顶出跨，保持内收 反手拉球 提前引拍向下收至左腿内侧 左腿、左胯下压 双手内收，发力时再有外扩的感觉 末段动作做到位，可以向外展 腹部内收，屁股往后顶，肩部内收，不要往后仰 ","date":"2025-02-20T00:00:00+08:00","image":"/sport/assets/table-tennis.jpg","permalink":"/post/sport/table-tennis/","title":"Table tennis"},{"content":"WNIC(Wireless network interface card) PVE 开启IOMMU nano /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet intel_iommu=on iommu=pt pcie_acs_override=multifunction\u0026#34; update-grub reboot 设置虚拟化驱动 nano /etc/modules vfio vfio_iommu_type1 vfio_pci # vfio_virqfd # no longer available in PVE 8 update-initramfs -u -k all Reference TUTORIAL - PCI/GPU Passthrough on Proxmox VE 8 : Installation and configuration | Proxmox Support Forum 开启直通 | PVE学习笔记 iStoreOS Install img2kvm /mnt/pve/hdd/template/iso/img2kvm /mnt/pve/hdd/template/iso/istoreos-22.03.6-2024052410-x86-64-squashfs-combined-efi.img.gz 108 local importdisk qm importdisk 108 /mnt/pve/hdd/template/iso/istoreos-22.03.6-2024052410-x86-64-squashfs-combined.img.gz local 不可行，无法加载引导\nFAQ 1. iStoreOS直通后重启，无线网卡变为未激活？ Defect Description 首次直通正常，能识别网卡\n重启后，设备未激活\nSolution 需要关机PVE =\u0026gt; 拔掉网卡 =\u0026gt; 启动PVE =\u0026gt; 关机PVE =\u0026gt; 插入网卡 =\u0026gt; 启动PVE\n关机PVE，完全断电后重启（目的是使无线网卡断电，怀疑被占用）\n改用OpenWrt\nOpenWrt OpenWRT-PVE-AP-MT7922: guide to run OpenWRT on PVE with Access Point through m.2 wifi module MT7922 Setting up the OpenWrt disk gunzip -k /mnt/pve/hdd/template/iso/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img.gz # -k, --keep keep original .gz file qm importdisk 108 /mnt/pve/hdd/template/iso/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img local Install wireless LAN card driver and firmware opkg update opkg install kmod-iwlwifi iwlwifi-firmware-ax210 opkg install kmod-mt7921e cd /lib/firmware/mediatek wget https://github.com/openwrt/mt76/raw/master/firmware/WIFI_MT7922_patch_mcu_1_1_hdr.bin wget https://github.com/openwrt/mt76/raw/master/firmware/WIFI_RAM_CODE_MT7922_1.bin opkg install wpad-openssl reboot wget超时 使用rz\nopkg install lrzsz opkg remove lrzsz FAQ 1. OpenWrt直通后重启，无线网卡is not active 首次直通\n重启后\nSolution restart一次设备即可\n设置开机脚本\nSystem =\u0026gt; Startup =\u0026gt; Local startup\nuci set wireless.radio0.disabled=\u0026#39;1\u0026#39; uci set wireless.default_radio0.disabled=\u0026#39;1\u0026#39; uci commit wireless wifi reload sleep 5 uci set wireless.radio0.disabled=\u0026#39;0\u0026#39; uci set wireless.default_radio0.disabled=\u0026#39;0\u0026#39; uci commit wireless wifi reload Configuration 1. 直通无线网卡 Configure VM =\u0026gt; Hardware =\u0026gt; Add PCI Device\nRaw Device\n设备：MT7922\n所有功能\nPCI-Express\nTest 直通前 ip a lspci -v # 查看pci占用状态 直通后 占用中\nFAQ 1. No IOMMU detected Proxmox VE(PVE)开启IOMMU功能实现硬件直通及直通错误解决_no iommu detected, please activate it.see document-CSDN博客 Solution 开启IOMMU，参考上文\n2. 启动直通VM后，PVE文件系统失联 Defect Description Reason m2固态系统盘与无线网卡处在同一IOMMU组，被连带直通导致文件系统失联\nTroubleshoot 查询IOMMU组\nfor d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf \u0026#39;IOMMU group %s \u0026#39; \u0026#34;$n\u0026#34;; lspci -nns \u0026#34;${d##*/}\u0026#34;; done; SOLVED - Filesystem corruption after PCIe passthrough | Proxmox Support Forum 【折腾踩坑记录】关于EXSI的网卡SR-IOV，以及X520DA2/SR2有什么区别的这档事。 - 哔哩哔哩 Solution 强制IOMMU分组\n方法一. BIOS开启ACS(Access Control Services)\nAMD CBS =\u0026gt; NBIO Common Options =\u0026gt; Enable AER Cap =\u0026gt; ACS Enable\n（华擎主板开启AER Cap后才会出现ACS）\nWhy so few IOMMU groups on ASRock X470 Taichi? - Operating Systems \u0026amp; Open Source / Virtualization - Level1Techs Forums 方法二. ACS补丁\n# /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;... pcie_acs_override=downstream\u0026#34; PCI直通 - Proxmox VE 3. 启动直通VM后，WebGUI失联，物理机终端有响应 Reason 开启ACS后，有线、无线网卡仍在一组，有线网卡被连带直通导致网络失联\nSolution # /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;... pcie_acs_override=multifunction\u0026#34; LKML: Alex Williamson: [PATCH] pci: Enable overrides for missing ACS capabilities PS 查看pve日志\njournalctl -n 10 2. 连接无线热点 Network =\u0026gt; Wireless =\u0026gt; radio0 =\u0026gt; scan\n3. 测试 opkg update \u0026amp;\u0026amp; opkg install curl curl cip.cc curl ip111.cn ","date":"2024-06-13T00:00:00+08:00","image":"/homelab/pve/assets/wnic.jpg","permalink":"/post/homelab/pve/wnic/","title":"WNIC (Wireless network interface card)"},{"content":"Memory Overclock 1. Find max FCLK BIOS default setting\nVDDP: 1.1V\nVDDG(CDD\u0026amp;IOD): 1.1V\nSOC: 1.15V\nFCLK: 2000MHz\n[ 内存超频]AMD内存超频——简单教程[ZEN3/ZEN2均可食用] 2. OC Memory Memory Frequency: 3800MHz\nFCLK: 1900MHz\nMemory timing\nCAS# Latency: 16 Trcdrd: 18 Trcdwr: 18 RAS# PRE Time: 18 RAS# ACT Time: 38 Cmd2T：2T 参数查询工具： ZenTimings 3. Stability test (1) Check WHEA19 error logs a. 图吧工具箱 =\u0026gt; 综合工具 =\u0026gt; HWINFO =\u0026gt; 仅显示传感器 =\u0026gt; 最底下Windows Hardware Errors (WHEA)\nb. 事件查看器 =\u0026gt; Windows日志 =\u0026gt; 系统\n日志名称: System 来源: Microsoft-Windows-WHEA-Logger 日期: 2023/12/26 21:52:16 事件 ID: 19 任务类别: 无 级别: 警告\n描述: 出现已更正的硬件错误。\n由以下组件报告: 处理器核心 错误源: Corrected Machine Check 错误类型: Bus/Interconnect Error 处理器 APIC ID: 0\n详解ZEN3－5800X－超FCLK出现WHEA19不完全解决方法及相关报告~！ - Chiphell (2) TestMem5 图吧工具箱 =\u0026gt; 内存工具 =\u0026gt; TM5\n","date":"2024-02-13T00:00:00+08:00","image":"/hardware/assets/memory-overclock.jpg","permalink":"/post/hardware/memory-overclock/","title":"Memory Overclock"},{"content":" P2V (Physical to Virtual) 1. disk2vhd导出虚拟磁盘 【操作步骤】勾选以下选项\na. Use Vhdx\nb. Use Volume Shadow Copy\nc. 系统盘、保留盘\nFAQ (1) vhd与vhdx区别 vhd：最大容量2T\nvhdx：更新更快，最大容量64TB\n(2) Volume Shadow Copy卷影复制的作用 快照，保证从复制开始到结束时，数据的一致性\n2. 挂载SMB 【操作步骤】数据中心 -\u0026gt; 存储 -\u0026gt; 添加SMB/CIFS\nFAQ (1) 添加失败，错误提示 create storage failed: storage \u0026lsquo;smb\u0026rsquo; is not online (500)\n【解决方法】添加时取消勾选启动，从编辑入口进入再设置启用即可\nCIFS: storage is not online (500) | Proxmox Support Forum 3. vhdx转换qcow2并导入 qm importdisk 100 /mnt/pve/smb/ark.vhdx local --format qcow2 FAQ (1) 只能导入到local-lvm，而导入到local会报错？ storage local does not support vm images\n【解决办法】数据中心 -\u0026gt; 存储 -\u0026gt; local的内容扩充支持磁盘映像\n(2) local和local-lvm的区别？ 佛西博客 - PVE的local和local-lvm (buduanwang.vip) local-lvm属于lvm-thin类型，存储虚拟机时作为块设备，不能直接拷贝\nlocal属于dir类型目录\nlvs cat /etc/pve/storage.cfg 【建议】qcow2足够优秀，且属于文件类型，不建议使用lvm-thin作为其存储底层\n【方案】移除local-lvm并将空间并入local\na. 扩展local内容支持 数据中心 -\u0026gt; 存储 -\u0026gt; 编辑local -\u0026gt; 内容勾选所有\nb. 删除lvm-thin lvremove /dev/pve/data c. 释放空间并入local lvextend -rl +100%FREE /dev/pve/root d. 检查空间 df -h e. GUI移除lvm-thin 数据中心 -\u0026gt; 存储 -\u0026gt; 移除local-lvm\n4. UEFI启动转换为传统BIOS引导 (1) 老毛桃官网下载完整版 ISO模式 -\u0026gt; 一键生成ISO文件\n(2) 上传ISO镜像 local -\u0026gt; ISO镜像 -\u0026gt; 上传\n(3) 挂载ISO VM100 -\u0026gt; 硬件 -\u0026gt; CD/DVD驱动器 -\u0026gt; 使用ISO\n(4) winpe操作 a. 启动VM100，选择启动Win10 X64 PE b. 使用分区工具软件，删除主分区外的其他分区(包括系统保留分区) c. 分区表类型从GPT转换成MBR 磁盘 -\u0026gt; 转换分区表类型为MBR格式\nd. 将主分区设置为活动分区 右键系统盘 -\u0026gt; 激活当前分区\ne. 保存更改 f. 将步骤2释放的空间合并到系统盘 右键系统盘 -\u0026gt; 扩容分区 -\u0026gt; 开始\nFAQ (a) 警告提示 无法修改Windows系统的BCD启动设置，调整Windows系统分区可能导致其无法启动，请进入到该系统中再执行调整命令\n【操作】选择仍然调整，暂未发现异常\n(5) 修复系统引导 使用引导修复软件，修复后使用分区工具检查主分区下是否已生成Boot目录和bootmgr文件\nFAQ a. 修复引导后能正常进系统，但卸载掉pe光盘后启动提示boot failed？ 需按后文步骤(7)调整引导顺序\n(6) 卸载ISO (7) 调整引导顺序 虚拟机 -\u0026gt; 选项 -\u0026gt; 引导顺序 -\u0026gt; 勾选虚拟磁盘并调整排序为首位\n5. IDE磁盘转换为SCSI (1) 挂载virtio-win-0.1.240.iso\n(2) 添加一个SCSI磁盘，大小不重要，只用于安装驱动程序\n(3) 启动VM -\u0026gt; 设备管理器 -\u0026gt; 其他设备 -\u0026gt; 带感叹号的SCSI设备 -\u0026gt; 手动指向驱动目录vioscsi\\2k22\\amd64 -\u0026gt; 关闭VM\n(4) VM硬件设置，删除临时的SCSI磁盘，将IDE磁盘更改为SCSI，cache选择write back，勾选discard\nFAQ a. 性能对比：VirtIO SCSI\u0026gt;IDE IDE VirtIO SCSI 6. 虚拟磁盘扩容 VM -\u0026gt; 点选磁盘 -\u0026gt; 磁盘操作 -\u0026gt; 调整大小 -\u0026gt; 填写增量大小 -\u0026gt; 重启VM\nFAQ （1）Windows扩容C盘，但是右边有一个恢复分区挡住？ Solution 使用CMD（管理员）删除恢复分区\ndiskpart list disk # 查看所有磁盘信息 select disk X # X为包含恢复分区的磁盘编号 list partition # 查看磁盘上的所有分区 select partition Y # Y为恢复分区的编号 delete partition override exit 7. Intel E1000网卡转为VirtIO (1) VM-\u0026gt; 硬件 -\u0026gt; 网络设备 -\u0026gt; 模型Intel E1000改为VirtIO\n(2) 启动VM -\u0026gt; 设备管理器 -\u0026gt; 其他设备 -\u0026gt; 带感叹号的以太网设备 -\u0026gt; 手动指向驱动目录NetKVM\\2k22\\amd64\nFAQ a. 性能对比：VirtIO\u0026gt;Intel E1000 Intel E1000 VirtIO 8. CPU类型性能对比 2690v4 host avx2 kvm64 qemu64 x86-64-v3 aux2 1650v4 x86-64-v3 aux2 FAQ (1) 为什么host反而跑分最低？ 待研究\n(2) kvm64和qemu64下的cpuz无avx2测试项可选？ 可能因为cpu高级设置未勾选aux2特性\n9. 内存Balloon (1) 安装Balloon驱动 设备管理器 -\u0026gt; 其他设备 -\u0026gt; 带感叹号的PCI设备 -\u0026gt; 手动指向驱动目录Balloon\\2k22\\amd64\n(2) 设置最小内存 VM -\u0026gt; 硬件 -\u0026gt; 内存 -\u0026gt; 高级 -\u0026gt; 最小内存\n10. 直通SATA硬盘 pve硬盘直通 (1) 列出硬盘列表 ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part lrwxrwxrwx 1 root root 9 Oct 31 21:40 ata-WDC_WD20SPZX-22UA7T0_WD-WXA1E6962PFE -\u0026gt; ../../sda lrwxrwxrwx 1 root root 13 Oct 31 21:34 nvme-eui.00000000000000008ce38e03006b6199 -\u0026gt; ../../nvme0n1 lrwxrwxrwx 1 root root 13 Oct 31 21:34 nvme-KIOXIA-EXCERIA_SSD_71HA11F9K2V2 -\u0026gt; ../../nvme0n1 lrwxrwxrwx 1 root root 9 Oct 31 21:40 wwn-0x50014ee2670010fa -\u0026gt; ../../sda\nnvme -\u0026gt; m2, ata -\u0026gt; sata\n(2) 设置直通 qm set \u0026lt;vmid\u0026gt; --scsiX /dev/disk/by-id/xxxxxxx qm set 100 --scsi1 /dev/disk/by-id/ata-WDC_WD20SPZX-22UA7T0_WD-WXA1E6962PFE 取消直通\nqm set \u0026lt;vmid\u0026gt; --delete scsiX qm set 100 --delete scsi1 11. WOL Wake On Lan on Debian (1) Install ethtool apt install ethtool (2) Checking the interface ip a enp5s0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000 link/ether 00:e0:4c:ad:e9:7e brd ff:ff:ff:ff:ff:ff\n(3) Temporarily turn on WOL ethtool --change enp5s0 wol g (4) Check WOL status ethtool enp5s0 Wake-on: g\ng -\u0026gt; on, d -\u0026gt; off\n(5) Permanently turn on WOL a. Find ethtool directory which ethtool /usr/sbin/ethtool\nb. Create wol.service in /etc/systemd/system/ [Unit] Description=Enable Wake On Lan [Service] Type=oneshot ExecStart =/usr/sbin/ethtool --change enp5s0 wol g [Install] WantedBy=basic.target c. Enable service systemctl daemon-reload systemctl enable wol.service 12. KSM 調整 PVE 內建 KSM 機制參數 (1) Temporarily turn off KSM 系统 -\u0026gt; ksmtuned -\u0026gt; 停止\n(2) Permanently turn off KSM systemctl disable ksmtuned systemctl status ksmtuned (3) Permanently turn on KSM systemctl enable ksmtuned systemctl start ksmtuned (4) 配置文件/etc/ksmtuned.conf # Configuration file for ksmtuned. # How long ksmtuned should sleep between tuning adjustments # KSM_MONITOR_INTERVAL=60 # Millisecond sleep between ksm scans for 16Gb server. # Smaller servers sleep more, bigger sleep less. # KSM_SLEEP_MSEC=100 # KSM_NPAGES_BOOST=300 # KSM_NPAGES_DECAY=-50 # KSM_NPAGES_MIN=64 # KSM_NPAGES_MAX=1250 # KSM_THRES_COEF=20 # 剩余内存低于20%时激活ksm # KSM_THRES_CONST=2048 # 剩余内存少于2048字节时激活 # uncomment the following if you want ksmtuned debug info # LOGFILE=/var/log/ksmtuned # DEBUG=1 (5) 实测效果与性能损耗 13. Swap (1) Check the current Swap strategy cat /proc/sys/vm/swappiness # or sysctl vm.swappiness # vm.swappiness = 60 # 剩余内存低于60%时，启用Swap (2) Temporary adjustment sysctl vm.swappiness=0 (3) Persistent configuration nano /etc/sysctl.conf # Append at the end vm.swappiness=0 sysctl -p # Reload configuration 14. Backup pve configuration # storage, vm, cluster, user config cp -r /var/lib/pve-cluster /mnt/pve/hdd/pveBackup # restore cp /mnt/pve/hdd/pveBackup/pve-cluster/config.db /var/lib/pve-cluster # boot, modules config mkdir /mnt/pve/hdd/pveBackup/{boot,modprobe} cp /etc/modules-load.d/* /mnt/pve/hdd/pveBackup/modprobe/ cp /etc/default/grub /mnt/pve/hdd/pveBackup/boot/ cp /etc/modules /mnt/pve/hdd/pveBackup/ # restore cp /mnt/pve/hdd/pveBackup/modprobe/* /etc/modules-load.d/ cp /mnt/pve/hdd/pveBackup/boot/grub /etc/default/ cp /mnt/pve/hdd/pveBackup/modules /etc/ update-grub update-initramfs -k all -u # network config cp -r /etc/network /mnt/pve/hdd/pveBackup/ # restore cp -r /mnt/pve/hdd/pveBackup/network/* /etc/network/ systemctl restart networking FAQ 1. VM暂停和休眠的区别 【暂停】保持内存加载，但cpu分配为0\n【休眠】内存保存到磁盘后释放\n2. CPU-X 查询硬件信息 (1) cpu频率、占用、温度\n(2) 内存频率、占用\napt install -y cpu-x cpu-x # 会自动检查是否有显卡，无则启动基于文本的用户界面 3. 查询CPU温度（deprecated） Debian 查看CPU温度 apt install lm-sensors -y sensors-detect # all press Enter sensors 4. 查询内存频率（deprecated） 硬件信息查询工具: lshw, dmidecode, hwinfo, CPU-X\n(1) lshw lshw -short -C memory H/W path Device Class Description /0/0 memory 64KiB BIOS /0/56 memory 136GiB System Me /0/56/0 memory 32GiB DIMM DDR4 /0/56/1 memory 32GiB DIMM DDR4 /0/56/2 memory 32GiB DIMM DDR4 /0/56/3 memory 32GiB DIMM DDR4 /0/62 memory 896KiB L1 cache /0/63 memory 3584KiB L2 cache /0/64 memory 35MiB L3 cache\n(2) dmidecode apt install -y dmidecode dmidecode -t memory | grep \u0026#39;Speed:\u0026#39; Speed: 2400 MT/s Configured Memory Speed: 2400 MT/s\nFAQ 1. 数据是否准确？ 【实测】5条内存只查出4条\n【结论】不准确，可能是寨板魔改的原因\ndo I listen to dmidecode or the manufacturer? 5. 查询固态硬盘写入寿命 (1) Install smartmontools apt install smartmontools -y (2) Query NVMe device ls /dev/nvm* /dev/nvme0 /dev/nvme0n1p1 \u0026hellip;\n(3) Get smart info smartctl -a /dev/nvme0 Data Units Written: 50,632,796 [25.9 TB]\n","date":"2023-10-09T00:00:00+08:00","image":"/homelab/assets/p2v.jpg","permalink":"/post/homelab/p2v/","title":"P2V (Physical to Virtual)"},{"content":"Proxmox VE 安装PVE 下载PVE镜像\nRufus刻录，必须选择DD模式\nPS：笔记本BIOS关闭安全启动模式\n默认登录用户名root\nPVE创建虚拟机 1. 显卡 默认，TODO\n2. 磁盘 性能对比：VirtIO SCSI \u0026gt; SCSI \u0026gt; SATA \u0026gt; IDE\nVirtIO SCSI\nLinux原生支持\nWindows系统，需安装 驱动 硬件 \u0026gt; 添加CD/DVD驱动器 \u0026gt; 挂载 virtio-win-xxx.ios\n3. 机型 决定虚拟机主板的硬件布局\nIntel 440FX Q35（较新，推荐），提供了虚拟PCIe总线，PCIe直通必选 4. BIOS SeaBIOS OVMF（较新，推荐），支持UEFI 5. 可信平台模块（TPM） 某些操作系统（例如Windows 11）要求将此类设备连接到计算机（无论是物理还是虚拟）\n6. CPU host模式（推荐），与主机物理cpu完全一致，拥有最佳性能，最大程度模拟其功能特性（CPU flags） kvm64，具有较少CPU flag，缺少高级指令集（如MMX、AVX、AES），兼容性最好，适合实时迁移vm需求 Host vs Kvm64 ：虽然PVE允许切换虚拟机的CPU类型，但可能导致迁移后崩溃\n7. 内存 设置内存容量 = 最小内存容量\n此时分配固定容量内存\n设置内存容量 \u0026gt; 最小内存容量\n至少分配设置的最小容量内存，并在物理服务器内存占用率达到80%之前根据虚拟机需要动态分配内存，直到达到设置的最大内存分配量\n最小内存容量（需开启ballooning，因此不适合win）\n权重参数shares\n示例：\n总共4台虚拟机，3台HTTP服务器Shares=1000，1台数据库服务器Shares=3000\n总共32GB内存，已使用16GB\n剩余可自动分配内存：32*80%-16=9GB\n数据库可分配内存：9*3000/(3000+1000*3)=4.5GB\nballooning选项\n监控虚拟机的实际内存使用量\nLinux发行版默认安装了balloon驱动\nWindows系统，需手动安装驱动virtio-win-gt-x64.msi\n传闻旧驱动会占用不少cpu资源，影响系统性能，新驱动有所改善。若非内存紧张，不建议win开启balloon\nFixed vs Variable Memory FAQ (1) 当 所有虚拟机占用内存 \u0026gt; 物理内存，PVE会自动kill虚拟机 8. 网卡 性能对比：VirtIO \u0026gt; Intel E1000(千兆) \u0026gt; Realtek 8139(百兆)\n桥接模式 NAT模式 VirtIO 手动安装驱动步骤：\n设备管理器 \u0026gt; 其他设备 \u0026gt; 以太网控制器 \u0026gt; 右键更新驱动程序软件 \u0026gt; 浏览计算机以查到驱动程序软件 \u0026gt; 选择光盘自动搜索安装\nFAQ (1) PVE apt-get update 源失败\nE: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/bullseye/InRelease 401 Unauthorized [IP: 51.79.159.216 443] E: The repository \u0026#39;https://enterprise.proxmox.com/debian/pve bullseye InRelease\u0026#39; is not signed. N: Updating from such a repository can\u0026#39;t be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. 原因：默认存储库为企业存储库，需要PVE 订阅密钥才能访问\n解决方式：配置无订阅存储库\n/etc/apt/sources.list\n# 官方(慢) deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription # 清华源 deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription (2) 使用清华apt软件源\n/etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware /etc/apt/sources.list.d/pve-no-subscription.list deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription LXC 硬件加速 Jellyfin LXC 硬件加速指南 1. 宿主机安装显卡驱动 英伟达驱动 # 显卡驱动前置依赖 apt-get update apt-get install gcc make pve-headers-$(uname -r) -y sh NVIDIA-Linux-x86_64-xxx.xx.run # 报错：Unable to find the kernel source tree for the currently running kernel. Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the \u0026#39;kernel-source\u0026#39; or \u0026#39;kernel-devel\u0026#39; RPM installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the \u0026#39;--kernel-source-path\u0026#39; command line option # 解决方式：必须安装对应内核的头文件 # apt-get install pve-headers-$(uname -r) -y 英特尔驱动（自带）\nvainfo # 检查GPU解码支持 ls -l /dev/dri # 检查GPU设备是否加载 AMD驱动（待实践）\napt-get install mesa-va-drivers # 开源VA-API驱动 # 后续同iGPU 2. 宿主机设置驱动保持 驱动内核自启动\nNVIDIA的驱动在有应用访问显卡的时候才加载内核和设备，但是用docker或者LXC访问宿主的显卡，驱动并不嫩感知。因此需要在系统启动时手动加载内核和设备。\n/etc/modules-load.d/modules.conf\n# /etc/modules-load.d/modules.conf # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with \u0026#34;#\u0026#34; are ignored. nvidia nvidia_uvm 加载驱动\n设置驱动内核加载时，执行加载什么驱动\n/etc/udev/rules.d/70-nvidia.rules\n# /etc/udev/rules.d/70-nvidia.rules # Create /nvidia0, /dev/nvidia1 … and /nvidiactl when nvidia module is loaded KERNEL==\u0026#34;nvidia\u0026#34;, RUN+=\u0026#34;/bin/bash -c \u0026#39;/usr/bin/nvidia-smi -L\u0026#39;\u0026#34; # # Create the CUDA node when nvidia_uvm CUDA module is loaded KERNEL==\u0026#34;nvidia_uvm\u0026#34;, RUN+=\u0026#34;/bin/bash -c \u0026#39;/usr/bin/nvidia-modprobe -c0 -u\u0026#39;\u0026#34; 驱动持久化守护进程\n如果长时间没有应用使用显卡，驱动程序会自动释放设备，因此需要驱动持久化软件。\ngit clone https://github.com/NVIDIA/nvidia-persistenced.git cd nvidia-persistenced/init ./install.sh systemctl status nvidia-persistenced # 检查进程状态 检查显卡驱动设备\nroot@pve:~# ls -l /dev/nv* crw-rw-rw- 1 root root 195, 0 Jun 21 20:54 /dev/nvidia0 crw-rw-rw- 1 root root 195, 255 Jun 21 20:54 /dev/nvidiactl crw-rw-rw- 1 root root 195, 254 Jun 21 20:54 /dev/nvidia-modeset crw-rw-rw- 1 root root 236, 0 Jun 21 20:54 /dev/nvidia-uvm crw-rw-rw- 1 root root 236, 1 Jun 21 20:54 /dev/nvidia-uvm-tools 3. LXC配置 GPU透传\n/etc/pve/lxc/\u0026lt;container-id\u0026gt;.conf（GIDs要与上步查询id对应）\n英伟达 lxc.cgroup2.devices.allow: c 195:* rwm lxc.cgroup2.devices.allow: c 236:* rwm lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file 英特尔、AMD（待实践）\nlxc.cgroup2.devices.allow: c 226:0 rwm lxc.cgroup2.devices.allow: c 226:128 rwm lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file LXC ssh\nLXC默认不开启远程root登陆，需设置允许\n/etc/ssh/sshd_config\nPermitRootLogin yes # 允许root登录 PasswordAuthentication yes # 使用口令验证 systemctl restart sshd # 重启ssh服务生效 ip addr # 查看lxc ip地址，sftp上传驱动安装包 sh NVIDIA-Linux-x86_64-515.76.run --no-kernel-module # --no-kernel-module LXC无需安装内核模块，跳过 nvidia-smi # 检查lxc nv驱动 4. LXC Ubuntu安装Jellyfin 添加Jellyfin apt存储库源后，更新源失败：https证书过期\nErr:5 https://repo.jellyfin.org/ubuntu focal Release Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification 解决方法：\nsudo apt-get install --reinstall ca-certificates 从Jellyfin存储库拉取安装包过慢\nsudo apt install jellyfin 解决方法：设置apt代理\n/etc/apt/apt.conf\nAcquire::http::proxy \u0026#34;http://192.168.1.147:7890/\u0026#34;; Acquire::https::proxy \u0026#34;http://192.168.1.147:7890/\u0026#34;; # https需要代理到http，否则apt update报错 # Could not handshake: The TLS connection was non-properly terminated Jellyfin不支持直接访问smb，改为Linux挂载smb即可\nsudo mkdir /mnt/myFolder sudo apt install cifs-utils -y sudo mount -t cifs -o username=serverUserName //myServerIpAdress/sharename /mnt/myFolder/ 设置开机自动挂载smb /home/.smbAuth\nuser=smb password=myPassword /etc/fstab\n//192.168.1.4/smb /mnt/myFolder cifs uid=0,credentials=/home/.smbAuth,iocharset=utf8,vers=3.0,noperm 0 0 测试\n# 第一条执行无报错证明成功 sudo mount -a sudo umount -a iGPU 设置VAAPI硬解后，播放失败提示：\n播放错误 该客户端与媒体不兼容，服务器未发送兼容的媒体格式\n报错日志：\n[AVHWDeviceContext @ 0x564e13dff940] No VA display found for device /dev/dri/renderD128. Device creation failed: -22. Failed to set value \u0026#39;vaapi=va:/dev/dri/renderD128\u0026#39; for option \u0026#39;init_hw_device\u0026#39;: Invalid argument Error parsing global options: Invalid argument 原因： Jellyfin无直通设备的读写权限 解决方式：chmod 666 /dev/dri/renderD128\nJellyfin 中文字幕显示为方块 下载 Noto Sans SC woff2 字体包 解压出 NotoSansCJKsc-Medium.woff2 文件\n上传到LXC内 /usr/share/fonts/xxx\nJellyfin-控制台-播放，设置备用字体文件路径并启用\nFAQ LVM-thin 动态容量\n虚拟机内的CPU速度不显示睿频？\nVM CPUs\u0026ndash;no turbo boost? | Proxmox Support Forum Linux查询CPU实时频率 /proc/cpuinfo\nwatch -n.1 \u0026#34;grep \\\u0026#34;^[c]pu MHz\\\u0026#34; /proc/cpuinfo\u0026#34; watch -n1 \u0026#34;grep \\\u0026#34;^[c]pu MHz\\\u0026#34; /proc/cpuinfo\u0026#34; linux-cpupower\nsudo apt install -y linux-cpupower cpupower monitor PVE CPU性能模式选择工具 （默认即为Performance）\n虚拟机克隆 与 备份的区别\n克隆：常用于单pve平台跨存储克隆虚拟机\n备份：可用于跨集群还原虚拟机\n","date":"2022-10-06T00:00:00+08:00","image":"/homelab/assets/pve.jpg","permalink":"/post/homelab/pve/","title":"Proxmox VE"}]