WingsRabbit Blog - wingsrabbit
type: channel
link: https://wingsrabbit.com/index.php/author/1/
description: wingsrabbit
items: 裸金属服务器 2Gbps 带宽劣化排障实施手册（Opus4.6）
items: RouterOS 多节点 VPN 出口方案公开版（GPT5.4）
items: 用docker造一个ConvertX来转换文件
items: 用docker造一个Stirling-PDF
items: 用docker造一个openlist，来把服务器当本地网盘吧。
items: 用docker在linux造一个docker管理web portainer并放给443
items: 反掩码
items: 用docker造一个Termix并开443
items: 一些下载
items: ProxmoxVE创建Cloudinit

裸金属服务器 2Gbps 带宽劣化排障实施手册（Opus4.6）
type: item
date: 2026-04-06T15:47:00+08:00
description: 裸金属服务器 2Gbps 带宽劣化排障实施手册定位：公开版实施操作手册。目标：任何人或 AI 只读这一篇，就能在相同场景下完成诊断、修复、验证和持久化，并避开已确认的坑。 场景：裸金属服务器（非虚拟化），公网 IP 直发（非 NAT），2Gbps 出口带宽随连接数增加出现抖动/下降。 实测环境：Debian 12 + xanmod 6.x 内核, 双路 Xeon (72 逻辑核), 251GB RAM, ixgbe 10GbE 单口 + VLAN 子接口, 中继/转发类业务 ~4 万并发连接。 ⚠️ 安全声明：本文所有 IP、端口、密码、密钥、节点名均为占位符。请替换为你自己的真实值，不要将真实值提交到公开仓库。〇、占位符对照表在执行本手册前，将以下占位符全局替换为你的实际值：占位符含义示例格式<SERVER_IP>服务器公网管理 IP198.51.100.10<SSH_PORT>SSH 端口22<SSH_USER>SSH 用户名root<SSH_PASS>SSH 密码your-password<SSH_HOSTKEY>SSH 主机密钥指纹ssh-ed25519 255 SHA256:xxxxx<SSH_KEY_PATH>本地 SSH 私钥路径D:\keys\id_rsa<NIC>物理网卡名enp130s0 / eth0 / ens5<VLAN_IF>VLAN 子接口名 (如有)enp130s0.100<BIZ_IP_A>业务绑定 IP (主)198.51.100.20<BIZ_IP_B>业务绑定 IP (副, 如有)198.51.100.21<GW_A>策略路由网关 A198.51.100.1<APP_BIN>业务进程二进制名my_relay_server<APP_PID>业务进程 PID12345<INSTANCE_A>业务实例名 Arelay-primary<INSTANCE_B>业务实例名 Brelay-secondaryWindows 端 SSH 辅助函数 (PowerShell + plink)$HK = '<SSH_HOSTKEY>' function rvps($c) { plink -ssh <SSH_USER>@<SERVER_IP> -P <SSH_PORT> -hostkey $HK -pw '<SSH_PASS>' -batch $c 2>&1 }坑 #1 (PowerShell 转义)：plink 传递复杂 bash 命令时，$() / $(()) / awk '{}' 会被 PowerShell 解析。对超过一行的命令，必须用 here-string 写成脚本 → 管道上传 → 远程执行，不要试图在 rvps() 的引号里硬塞。示例见「上传脚本模式」。上传脚本模式$script = @' #!/bin/bash echo "hello from remote" whoami '@ $script | plink -ssh <SSH_USER>@<SERVER_IP> -P <SSH_PORT> -hostkey $HK -pw '<SSH_PASS>' -batch "cat > /tmp/myscript.sh && chmod +x /tmp/myscript.sh && echo ok" # 然后执行 rvps "bash /tmp/myscript.sh"一、诊断阶段（只读，不改任何东西）1.1 环境摸底uname -a # 内核版本 lscpu # CPU 拓扑、NUMA 节点 free -h # 内存 ip link show # 网卡列表 → 记录 <NIC> 和 <VLAN_IF> ip addr show # 确认 IP 绑定 ip rule show # 策略路由 ip route show table all | head -50确认业务进程：ps aux | grep <APP_BIN> ls /proc/<APP_PID>/fd | wc -l # fd 数 cat /proc/<APP_PID>/status | grep -E 'Threads|VmRSS' top -bn1 -p <APP_PID> | tail -1 # CPU% ss -s # 连接总览1.2 网卡硬件层ethtool <NIC> # 链路速率 ethtool -i <NIC> # 驱动名+版本 ethtool -g <NIC> # ★ Ring Buffer 当前值 vs 最大值 ethtool -S <NIC> | grep -iE 'drop|error|miss|over|fifo' # ★ 硬件丢包计数 ethtool -l <NIC> # 多队列数 ethtool -c <NIC> …

RouterOS 多节点 VPN 出口方案公开版（GPT5.4）
type: item
date: 2026-03-17T18:05:00+08:00
description: RouterOS 多节点 VPN 出口方案公开版：L2TP/IPsec、IKEv2、WireGuard 接入，广州中转，香港默认出口，可切日本出口这是一份公开版实施规范，不是凭据备份。目标只有一个：让人或 AI 只读这一篇，就能在相同架构下完成部署、验证、切换和排障，并避开已经确认过的坑。本文所有公网地址、端口、账号、PSK、密钥、节点名都必须替换为你自己的真实值；不要把真实值公开到网站。1. 文档目标本文描述的是一套三层结构的 VPN 出口网络：广州 RouterOS 负责接入。香港 RouterOS 作为默认互联网出口。日本 Debian 作为可选出口，由香港侧开关切换。需要同时满足以下要求：支持 L2TP/IPsec、IKEv2/IPsec、WireGuard 三种接入方式。客户端接入广州后，默认经广州转发到香港出网。可以按协议分别把出口从香港切换到日本。可以为少量目标地址做“广州直出”例外，不跟随默认香港出口。后续 AI 执行同类任务时，只要读到这篇文档，就知道应该先做什么、哪里最容易错、错了看什么。2. 适用场景本文适用于以下场景：RouterOS v7。至少两台 RouterOS 节点，其中广州节点负责 VPN 接入，香港节点负责默认出口。可选第三个日本节点，系统为 Debian，作为 WireGuard 出口。广州和香港之间同时具备公网与数据中心内网可达性。需要把远程接入客户端的全流量导出到香港或日本。需要明确记录实施顺序、验证步骤和排障决策，降低 AI 自行脑补设计的空间。本文不直接覆盖以下场景：纯站点到站点 IPsec。证书版 IKEv2。ROS v6 老版本。只做单节点本地拨号、不经过中转节点的简单 VPN。3. 先给结论：这套方案里必须遵守的规则这部分最重要，后续实施和排障都以它为准。3.1 RouterOS v7 上，源地址策略路由优先用 routing rule，不要优先用 mangle mark-routing如果你做的是“指定客户端、指定地址池、指定 LAN 主机走某条 VPN 出口”，在 RouterOS v7 上优先使用：routing table/ip route/routing rule不要把 mangle mark-routing 当成默认方案。原因很简单：它更容易引入局域网访问异常。它更容易引入回程非对称。在 L2TP/IPsec 这类隧道场景下，可能出现“小包能过，大流量极差，上传为 0，网页半残”的问题。如果你已经遇到这些现象，先停掉 mangle PBR，再改成 routing rule，通常比继续给 mangle 打补丁更接近根因。3.2 如果数据中心内网不转发 10.x / 172.x 之外的业务源地址，不要直接在 GZ 和 HK 之间裸跑客户端地址池如果广州和香港之间的内网只愿意转发它自己认可的源/目的地址，而你的客户端地址池是独立的 10.255.x.x，那么最稳妥的做法不是强行让这些地址穿过内网，而是：在 GZ 和 HK 之间先建立一条 WireGuard 传输隧道。隧道外层用数据中心认可的内网地址通信。客户端地址池作为隧道内层载荷传输。3.3 L2TP 和 IKEv2 共存时，IKEv2 必须用独立命名的 IPsec 对象不要为了 IKEv2 去乱改 RouterOS 的 default profile、default proposal、default peer。L2TP 的 use-ipsec=yes 会依赖默认 IKEv1 逻辑。正确做法是：L2TP 继续使用 RouterOS 默认的 L2TP/IPsec 机制。IKEv2 使用独立命名的 profile、proposal、peer、identity、mode-config、policy group。3.4 每个出口点都必须有对应的 NAT只要某个地址池可能从某个接口出互联网，就必须在那个出口接口上为该地址池准备 srcnat/masquerade。不能只在接入侧做 NAT。3.5 MTU 与 MSS 的处理顺序不能反正确顺序是：先确认路由正确。再确认 NAT 正确。再确认回程正确。最后再调 MTU/MSS。如果路由本身是错的，单纯把 MSS 一路压到 1200 也救不回来。3.6 RouterOS WireGuard peer 的 allowed-address 既是允许列表，也是回程路由线索只要返回流量需要经过某个 peer，那个 peer 的 allowed-address 就必须覆盖需要回去的地址池。否则会出现握手有了、单向通、回包丢失这类问题。4. 公开文档里必须保留的变量，而不是必须公开的秘密公开版文档不应该包含真实凭据，但必须把实施所需的变量列全。后续 AI 或运维执行时，先收集这些变量，再替换到模…

用docker造一个ConvertX来转换文件
type: item
date: 2025-10-19T04:29:07+08:00
description: 这个用8011，IP用 172.18.4.2/24docker network create --subnet=172.18.4.0/24 convertx-network官方docker运行docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx我直接进行更改，懒得查了。docker run -d \ --name convertx \ --restart=always \ --network convertx-network \ --ip 172.18.4.2 \ -p 8011:3000 \ -v /data/wwwroot/convert.wingsrabbit.com/files:/app/data \ ghcr.io/c4illin/convertx:latest 直接就好了，访问IP+8011。NGINX反代。不想写了。实际用起来对中文bug比较多，让copilot帮忙整了点别的。1.专门针对 Convertx 做增强：加上 Java、常见西文字体和中文字体（思源黑体、文泉驿），这样 LibreOffice/Calibre 在处理 PDF → Word/Docx 时成功率会高很多。FROM ghcr.io/c4illin/convertx:latest # 安装 Java 和常见字体（西文 + 中文） RUN apt-get update && \ apt-get install -y --no-install-recommends \ default-jre \ fonts-dejavu \ fonts-liberation \ fonts-noto-cjk \ fonts-wqy-zenhei \ fonts-wqy-microhei \ && rm -rf /var/lib/apt/lists/* # 设置 Java 环境变量（LibreOffice 有时需要） ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ENV PATH=$JAVA_HOME/bin:$PATH # 保持原有启动命令 CMD ["bun", "run", "start"] 在服务器上新建一个目录，比如 123456，把上面的内容保存为 Dockerfile。docker build -t convertx-custom .运行容器。完成。

用docker造一个Stirling-PDF
type: item
date: 2025-10-19T03:29:10+08:00
description: 好吧，继续造。今天用8010，IP用 172.18.3.2/24造网络docker network create --subnet=172.18.3.0/24 stirling-pdf-network官网docker run，要是担心的话就跑一下再说。docker run -d \ --name stirling-pdf \ -p 8080:8080 \ -v "./StirlingPDF/trainingData:/usr/share/tessdata" \ -v "./StirlingPDF/extraConfigs:/configs" \ -v "./StirlingPDF/customFiles:/customFiles/" \ -v "./StirlingPDF/logs:/logs/" \ -v "./StirlingPDF/pipeline:/pipeline/" \ -e DISABLE_ADDITIONAL_FEATURES=true \ -e LANGS=en_GB \ docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest 我这里就不跑了，直接上修改版。（有点好奇啊，这东西就不能-v个数据库？算了到时候再说）docker run -d \ --name stirling-pdf \ --restart=always \ --network stirling-pdf-network \ --ip 172.18.3.2 \ -e SERVER_PORT=8010 \ -e DISABLE_ADDITIONAL_FEATURES=true \ -e LANGS=en_GB \ -p 8010:8010 \ -v /root/StirlingPDF/trainingData:/usr/share/tessdata \ -v /root/StirlingPDF/extraConfigs:/configs \ -v /root/StirlingPDF/customFiles:/customFiles/ \ -v /root/StirlingPDF/logs:/logs/ \ -v /root/StirlingPDF/pipeline:/pipeline/ \ docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest 直接就好了，访问IP+8010。NGINX反代。注释掉这些东西# root /data/wwwroot/docker.wingsrabbit.com; # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { # expires 30d; # access_log off; # } # location ~ .*\.(js|css)?$ { # expires 7d; # access_log off; # }在localtion well know之后加这一段。#Nginx-443-Start location / { proxy_pass http://127.0.0.1:8010; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }

用docker造一个openlist，来把服务器当本地网盘吧。
type: item
date: 2025-10-19T02:50:00+08:00
description: 设计要求：用 pan.wingsrabbit.com 访问，同时本地储存，储存在 /data/www/wwwroot/pan.wingsrabbit.com下。先设置目录权限。chown -R 1001:1001 /data/wwwroot/pan.wingsrabbit.com考虑到标准化操作，我们仍然规定端口，端口8009，IP 172.18.2.2/24创建docker网络docker network create --subnet=172.18.2.0/24 openlist-network然后用docker run命令docker run -d \ --name openlist \ --restart=unless-stopped \ -v /data/wwwroot/pan.wingsrabbit.com:/opt/openlist/data \ --network openlist-network \ --ip 172.18.2.2 \ -p 8009:5244 \ -e UMASK=022 \ openlistteam/openlist:latest 这时候应该是可以打开IP+8009了。接下来配置NGINX反代，进/usr/local/nginx/conf/vhost来找到相关配置。说实话，和portainer差不多，区别就是要用http。注释掉这些东西# root /data/wwwroot/docker.wingsrabbit.com; # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { # expires 30d; # access_log off; # } # location ~ .*\.(js|css)?$ { # expires 7d; # access_log off; # } 在localtion well know之后加这一段。#Nginx-443-Start location / { proxy_pass http://127.0.0.1:8009; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 前面因为自定义了 -v /data/wwwroot/pan.wingsrabbit.com:/opt/openlist/data \所以在后台储存这里写/opt/openlist/data建议是mkdir files/opt/openlist/data/files并且chown -R 1001:1001 /data/wwwroot/pan.wingsrabbit.com一下

用docker在linux造一个docker管理web portainer并放给443
type: item
date: 2025-10-19T01:38:00+08:00
description: 注：本文是只在本机建立portainer，并不涉及portrainer agent。换句话说，它只能自己管自己。考虑到之前没有用compose，本文也用docker run先。debian12，oneinstackdocker安装curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh尝试先通过官方一键安装，先创建数据库。docker volume create portainer-data用官方的数据造一下。docker run -d -p 8000:8000 -p 9443:9443 \ --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer-data:/data \ portainer/portainer-ce:latest 来用https来访问一下IP+端口。OK没问题，让他走吧。docker stop portainerdocker rm portainer按照termix的想法，就+1，本地端口用8008，IP用 172.18.1.2，反正内网不缺，就加/24就行了。再来创建个docker网络。docker network create --subnet=172.18.1.0/24 portainer-network如果创建错了可以删掉docker network rm portainer-network看一眼创建好没有。docker network ls也可以用这个来看详细的数据docker network inspect portainer-network还有个问题，就是termix的数据端口是8081-8085。但是我们也要考虑到之后agent的管理端口，我希望管理agent的数据端口要用8086。不过很可惜的是你并不能更改容器内部的通信端口到匹配8086，因为portainer ce没有提供这个环境变量。你可以用iptables转发等方式来实现，不过太麻烦了，等之后遇到问题再说。好了，让我们更改一下官方的docker数据吧。docker run -d -p 8086:8000 -p 8008:9443 \ --name portainer \ --restart=always \ --network portainer-network \ --ip 172.18.1.2 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer-data:/data \ portainer/portainer-ce:latest 看起来这个数据没问题。让我们通过IP+端口8008尝试注册admin，看起来是ok的，那就证明数据库也ok。接下来进入反代，进/usr/local/nginx/conf/vhost来找到相关配置。要做的比termix少的多。注释掉这些东西# root /data/wwwroot/docker.wingsrabbit.com; # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { # expires 30d; # access_log off; # } # location ~ .*\.(js|css)?$ { # expires 7d; # access_log off; # } 在localtion well know之后加这一段。#Nginx-443-Start location / { proxy_pass https://127.0.0.1:8008; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 好了，搞定。

反掩码
type: item
date: 2025-10-13T18:49:00+08:00
description: 子网掩码长度 子网掩码 反掩码 /32 255.255.255.255 0.0.0.0 /31 255.255.255.254 0.0.0.1 /30 255.255.255.252 0.0.0.3 /29 255.255.255.248 0.0.0.7 /28 255.255.255.240 0.0.0.15 /27 255.255.255.224 0.0.0.31 /26 255.255.255.192 0.0.0.63 /25 255.255.255.128 0.0.0.127 /24 255.255.255.0 0.0.0.255 /23 255.255.254.0 0.0.1.255 /22 255.255.252.0 0.0.3.255 /21 255.255.248.0 0.0.7.255 /20 255.255.240.0 0.0.15.255

用docker造一个Termix并开443
type: item
date: 2025-09-29T12:22:00+08:00
description: debian12，oneinstackdocker安装curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh在本地8080尝试安装Termix，先创建数据储存。docker volume create termix-datadocker run -d \ --name termix \ --restart unless-stopped \ -p 8080:8080 \ -v termix-data:/app/data \ -e PORT=8080 \ ghcr.io/lukegus/termix:latest 很好，用HTTP+8080打开，没有问题。关掉，删了他。docker stop termixdocker rm termix考虑了一下，希望本地端口用8007，对docker固定ip 172.18.0.2，方便后面nginx反代。docker本身用了 172.17.0.1/16，那我们就创建 172.18.0.0/24 分隔。先创建个docker网络docker network create --subnet=172.18.0.0/24 termix-network如果创建错了可以删掉docker network rm termix-network也可以看看网络创建好没有docker network ls再运行docker run -d \ --name termix \ --restart unless-stopped \ --network termix-network \ --ip 172.18.0.2 \ -p 127.0.0.1:8007:8080 \ -v termix-data:/app/data \ -e PORT=8080 \ ghcr.io/lukegus/termix:latest 我们可以看到-p这里，这是因为指定网络和IP，并映射端口8007了，之后只需要在Nginx配置中反代这个443就行了。注意，这个-p 127.0.0.1是因为我不希望从别的地方可以访问，不加这个的话，你就可以从HTTP+IP+8007访问了。这里可以通过删掉-p下的127.0.0.1，来通过 localhost:8007 看一眼，数据库不报错就ok了。你可能会报错，提示The container name "/termix" is already in use by container这时候用docker ps -adocker rm -f termix好了，接下来配置nginx，因为基于oneinstack，所以正常配置后，进/usr/local/nginx/conf/vhost来找到相关配置。之前的server{}都不用管，我们只看location。在所有location块前面加location ~ ^/assets/ { proxy_pass http://127.0.0.1:8007; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 在所有location块最后加 location / { proxy_pass http://127.0.0.1:8007; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 好了，用 nginx -t 检测一下，没问题的话用 nginx -s reload 就可以了。可以通过域名访问了。在创建的时候遇到了一些问题，一个是，在nginx一开始通过普通匹配的时候，会报错404，找不到文件。究其原因，是因为原始配置如下location /assets/ { # 普通前缀匹配 proxy_pass http://127.0.0.1:8007/assets/; } location ~ .*\.(js|css)?$ { # 正则匹配 expires 7d; access_log off; } 普通匹配没有正则优先级高，所以请求被第二个location处理了，没有代理到termix。另一个是可能出现502 b…

一些下载
type: item
date: 2025-09-28T16:10:00+08:00
description: 用这个来进入pve的backup页面cd ../var/lib/vz/dump 这是debian12，但是如果没有网或者网不好开机巨几把慢。wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian12-2025-cloudinit/vzdump-qemu-500-2025_09_29-14_58_32.log wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian12-2025-cloudinit/vzdump-qemu-500-2025_09_29-14_58_32.vma.zst wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian12-2025-cloudinit/vzdump-qemu-500-2025_09_29-14_58_32.vma.zst.notes 这是debian11，2024年的版本了，但是开机巨几把快。wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian11-2024-cloudinit/vzdump-qemu-499-2025_09_30-15_15_07.log wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian11-2024-cloudinit/vzdump-qemu-499-2025_09_30-15_15_07.vma.zst wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian11-2024-cloudinit/vzdump-qemu-499-2025_09_30-15_15_07.vma.zst.notes 这是debian13，不知道什么玩意。wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian13-2025-cloudinit/vzdump-qemu-501-2025_09_30-15_28_49.log wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian13-2025-cloudinit/vzdump-qemu-501-2025_09_30-15_28_49.vma.zst wget https://wingsrabbit-1319758772.cos.ap-hongkong.myqcloud.com/debian13-2025-cloudinit/vzdump-qemu-501-2025_09_30-15_28_49.vma.zst.notes pve上开simple httppython3 -m http.serverdocker-master.zip

ProxmoxVE创建Cloudinit
type: item
date: 2025-09-28T12:44:00+08:00
description: mkdir cloudinitcd cloudinit下载相应的qcow2并且检查qcow2是否完好。wget https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-10-20250923.0.x86_64.qcow2qm create 500 --cores 4 --memory 4096 -name cloudinit --net0 virtio,bridge=vmbr0qm importdisk 500 CentOS-Stream-GenericCloud-10-20250923.0.x86_64.qcow2 local-lvmqm set 500 --scsi0 local-lvm:vm-500-disk-0qm set 500 --ide0 local-lvm:cloudinitqm set 500 --serial0 socketqm set 500 --boot c --bootdisk scsi0qm set 500 --ciuser root --cipassword xxxqm set 500 --ipconfig0 ip=192.168.1.1/24,gw=192.168.1.1注意你qm importdisk进去之后，可以的话最好去web上面改。更改qcow2配置virt-filesystems -a CentOS-Stream-GenericCloud-10-20250923.0.x86_64.qcow2查看位置，例如 /dev/sda2guestmount -a CentOS-Stream-GenericCloud-10-20250923.0.x86_64.qcow2 -m /dev/sda2 /mnt这样就挂载到 /mnt 了。用完之后umount /mnt