OpenClaw 模型路由与 Guardian 交接:从手动切换到 Fail-Closed 闭环
#OpenClaw #Guardian #模型路由 #FailClosed 记录 OpenClaw、llama-server、路由 controller 与 GPU Guardian 之间的职责拆分、交接协议和真实恢复闭环。基础安装与 provider 配置见《OpenClaw 配置续集》,当前任务状态见《OpenClaw 后续功能规划》。 一、问题边界 desktop 的 RTX 5080 同时服务本地推理和桌面应用。OpenClaw 默认访问 192.168.2.10:11435 上的 llama-server,但游戏、图像生成和模型测评会占用显存。这里需要解决的不是简单的“进程启停”,而是: 停模型前先把 OpenClaw 切到允许的备用 provider,并排空在途请求; 恢复本地前确认端口、进程、模型身份和上下文参数均正确; 任一步失败都保持云端或停止继续动作,不能留下半切换状态; 人工关闭模型不能被 Guardian 擅自重新拉起。 二、组件职责 组件 唯一职责 明确禁止 Guardian 观察 GPU、冷却时间、所有权和维护窗 ...
OpenClaw Exec 审批与生命周期治理:最小权限、等待状态与微信回传
#OpenClaw #Exec审批 #最小权限 #微信 记录 OC-05 的生产审批基线、D2b 审批等待缺陷和 OC-22 微信文本式审批边界。基础插件配置见 《OpenClaw 配置续集》,无审批日常能力见《OpenClaw 本地记忆落地与无审批能力边界》。 一、为什么不能用“始终允许”解决 OpenClaw 的 exec 能触达 shell、网络、Docker 和宿主机文件。把下载或邮件中的一个审批问题转化为通用 shell 放行,会让自然语言、网页内容和 prompt injection 获得远超任务所需的能力。 当前原则是: 123信息获取与固定只读快照 → 无审批有限参数、可验证、可回滚的动作 → 精确 allowlist外发、删除、系统变更和通用执行 → 人工确认 审批模型或语义分类器只能补充风险提示,不能替代确定性的权限策略。 二、生产审批基线 实际生效文件位于 OpenClaw 的容器数据挂载中,而不是顶层历史配置。生产基线已统一为: defaults、main、download、heartbeat:allowlist / on-miss / deny;...
SDSC6001 作业 1:覆盖数泛化界
SDSC6001 作业1:覆盖数泛化界 问题:证明覆盖数界并通过模拟验证 背景(给定) 设 H\mathcal{H}H 是从 X\mathcal{X}X 映射到 Y⊆R\mathcal{Y} \subseteq \mathbb{R}Y⊆R 的函数族。我们考虑平方损失: ℓ(h(x),y)=(h(x)−y)2\ell(h(x), y) = (h(x) - y)^2 ℓ(h(x),y)=(h(x)−y)2 设 DDD 是 X×Y\mathcal{X} \times \mathcal{Y}X×Y 上的未知分布。对于 h∈Hh \in \mathcal{H}h∈H,定义真实风险和经验风险: R(h)=E(x,y)∼D[(h(x)−y)2],R^S(h)=1m∑i=1m(h(xi)−yi)2R(h) = \mathbb{E}_{(x,y)\sim D}[(h(x) - y)^2], \quad \hat{R}_S(h) = \frac{1}{m}\sum_{i=1}^{m}(h(x_i) - y_i)^2 R(h)=E(x,y)∼D[(h(x)−y)2],R^S(h)=m1i=1∑m...
SDSC6001 Assignment 1: Covering-Number Generalization Bound
SDSC6001 Assignment 1: Covering-Number Generalization Bound Problem: Prove a covering-number bound and verify it by simulation Background (given) Let H\mathcal{H}H be a family of functions mapping X\mathcal{X}X to Y⊆R\mathcal{Y} \subseteq \mathbb{R}Y⊆R. We consider the squared loss ℓ(h(x),y)=(h(x)−y)2\ell(h(x), y) = (h(x) - y)^2 ℓ(h(x),y)=(h(x)−y)2 Let DDD be an unknown distribution over X×Y\mathcal{X} \times \mathcal{Y}X×Y. For h∈Hh \in \mathcal{H}h∈H, define the true risk and empirical risk...
OpenClaw 微信安全下载体系:确定性 Gate 与 qB 隔离
#OpenClaw #qBittorrent #最小权限 #网络隔离 记录 OC-23:让微信里的“帮我下载 X”能够进入自动化流程,同时不把网页文本、模型判断或一个 magnet 直接等同于下载权限。 相关笔记:《OpenClaw 本地记忆落地与无审批能力边界》 · 《OpenClaw Exec 审批与生命周期治理》 · 《OpenClaw 后续功能规划》 · 《N100 安全事件响应与 fail2ban 加固》 一、问题不在 qB API,而在权限兑换 qBittorrent 的新增、暂停、恢复和删除接口并不复杂。真正危险的是这条隐含链路: 1网页内容 → 模型相信它 → 直接调用下载接口 搜索结果和网页正文都可能包含 prompt injection,也可能指向内网、重定向到不同主机,或提供与页面描述不一致的 torrent。仅靠 system prompt 要求模型“注意安全”,不能形成可审计的权限边界。 因此这轮把流程拆成三个角色: 1download-discovery → download coordinator → deterministic Gate → ...
OpenClaw 本地记忆落地与无审批能力边界
#OpenClaw #本地Embedding #执行审批 #最小权限 记录 OC-21 的最终结果:恢复 Web 检索与容器网络,部署纯本地 embedding,并重新评估 OpenClaw 在不弹出 exec 审批时能否覆盖日常使用。 相关笔记:《OpenClaw 后续功能规划》 · 《OpenClaw 配置续集》 · 《OpenClaw Exec 审批与生命周期治理》 · 《N100 安全事件响应与 fail2ban 加固》 · 《OpenClaw 微信安全下载体系:确定性 Gate 与 qB 隔离》 一、这轮解决了什么 1. Web 检索与代理恢复 替换过期代理节点后,清理了重复导入项,并把 Docker 网桥使用的代理 forwarder 从临时 Python 进程改为受 systemd 管理的用户服务。DuckDuckGo 插件完成两组独立合成检索,web_fetch 也通过公开网页验收。 Node 24 需要显式启用环境代理。微信 API 走代理,而局域网 llama-server 使用 NO_PROXY 中的精确主机 192.168.2.10 直连。这里不能只...
个人健身预约系统:从业务建模到 Alpha 验收
#FastAPI #Vue #PostgreSQL #Docker #预约系统 #软件测试 记录一个面向个人健身教练的预约系统如何从网页版 Demo 演进到可公开测试的 Alpha:业务角色、预约与履约状态、敏感数据、日程可视化、验收数据和部署安全。 一、目标与边界 项目先交付移动优先的网页版,未来再迁移到微信小程序。首版不接入付费短信、在线支付和跨教练调度,登录使用账号密码;微信版本再切换到微信认证。 核心角色分为: 学员:注册、预约、取消、查看训练记录、上传饮食记录; 教练:发布时段、设置休息、代客预约、确认履约或爽约、维护学员档案; 管理员:审批教练、管理人员绑定、维护课程和全局配置; 多身份用户:不退出登录即可切换教练与管理员工作区。 技术栈最终采用 Vue 3、FastAPI、PostgreSQL、Docker Compose 和 nginx。相比 Flask, FastAPI 的类型模型、请求校验和自动生成 OpenAPI 的能力更适合接口较多、准备迁移到小程序的项目;生产环境则关闭公开 API 文档。 二、核心实体关系 主要实体包括用户、角色...
OpenClaw 微信文件投递踩坑:iLinkai API 大小写陷阱
#OpenClaw #微信 #调试踩坑 记录一次通过微信发送文件附件(xlsx)时遭遇的连环报错,以及最终定位到 iLinkai API 大小写敏感问题的全过程。 本系列:部署实录 · 配置续集 · 公网访问 · Headroom 接入 · 后续规划 背景 用 OpenClaw Agent 生成了一份评分标准表格(.xlsx),希望通过微信渠道直接投递给对话方,无需额外步骤。整个流程应该是: Agent 调用 message 工具,指定 media 参数(文件路径) openclaw-weixin 插件将文件上传到 iLinkai CDN CDN 地址写入微信文件消息,发送给对方 听起来很顺,实际踩了好几个坑。 一、连环报错 报错 1:sendMessage ret=-3 errmsg=invalid arguments 1[tools] message failed: sendMessage ret=-3 errmsg=invalid arguments 原因:指定了错误的 accountId——两个机器人账号中,目标用户只与其中一个有聊天记录,用了另一...
OpenClaw 后续功能规划与待办任务
#OpenClaw #规划 #待办 记录 OpenClaw 当前运行状态,以及后续可以接入的功能、待解决问题和扩展方向。本文随进展持续更新。 待办维护约定(2026-07-23):当前待办统一维护在跨设备共享的家庭实验室 TODO 源;本文保留规划背景与面向阅读的快照。新事项必须有优先级、状态、依赖、下一步与验收标准,完成后从活动列表移出,避免从旧博客或聊天记录反推状态。 分流/审核状态(2026-07-27):OC-06 的下载/非下载窄分类已用于 OC-23,通用分类改为优先复用 desktop 常驻 35B 做影子调用;OC-07 仍仅为候选,不能替代显式审批。生产状态以共享 TODO 为准。 本系列:部署实录 · 配置续集 · 模型路由与 Guardian · Exec 审批治理 · 公网访问 · Headroom 接入 · 本地记忆与无审批能力边界 · 微信安全下载体系 一、当前状态(截至 2026-06-29) 项目 状态 备注 OpenClaw 容器 运行中 N100, network_mode: host, :18789 公网 HT...
milin_desktop(RTX 5080 16GB)本地 LLM 选型分析
#本地推理 #Ollama #GGUF #RTX5080 #模型选型 硬件背景 组件 规格 GPU NVIDIA GeForce RTX 5080(16GB GDDR7,Blackwell 架构) CPU AMD Ryzen 7 9800X3D(8 核,3D V-Cache) 内存 32GB DDR5 使用场景:为 openclaw agentic 框架 提供本地 LLM 后端,主要执行工具调用、长文档处理、代码生成与分析。对输出速度要求不高(15-30 tok/s 即可),优先质量与上下文长度。 硬件特点: Blackwell 架构原生支持 MXFP4 硬件加速(OpenAI GPT-OSS 专属优势) 9800X3D 的 3D V-Cache 使 CPU 推理带宽远优于同级处理器,CPU offload 惩罚较小 16GB VRAM + 32GB RAM 可做 GPU+CPU 混合推理,允许运行超出 16GB 的模型 完整硬件配置与环境搭建详见 《RTX 5080 新主机环境配置实录》。 候选模型分析 GPT-OSS 20B ...
Claude Code 记忆同步进阶——canonical 软链、白名单 .stignore 与跨工作区 skill
#ClaudeCode #Syncthing #开发环境 #服务器运维 上一篇用 Syncthing 打通了三端 ~/.claude/,但直接同步各工作区的 memory/ 目录会遇到一个坑:不同设备的工作区路径编码不一样。本文记录把记忆层重构成 canonical _shared/ + 软链、把 .stignore 从黑名单改成白名单,并新增两个跨工作区 skill 与记忆治理约定的过程——一次完整的"开发环境梳理"。 一、上一版留下的坑:per-encoding 路径错位 Claude Code 把每个工作区的记忆存在 projects/<路径编码>/memory/ 下,而路径编码含绝对路径: Mac:projects/-Users-lin-infra/memory/ Windows:projects/C--Users-milin-infra/memory/ 同一个 ~/infra 工作区,两台机器编码不同。若直接同步 projects/*/memory,两端各写各的目录,记忆根本对不上,同步等于白做。 二、方案:canon...
OpenClaw 配置续集:网络修复、邮件插件与 Ollama 接入
#OpenClaw #Docker #Ollama #邮件插件 #网络排障 接上篇 《N100 自托管 OpenClaw + Hermes Agent 部署实录》,记录第二阶段的配置与踩坑;后续任务见 《OpenClaw 后续功能规划与待办任务》。 一、修复 Docker 容器无法访问公网 WAN TCP 现象 容器内 ping 1.1.1.1 正常(ICMP 通),但 curl https://api.deepseek.com 超时。导致 DeepSeek / Anthropic API 全部失败,日志输出: 1Error: All models failed (2): deepseek/deepseek-chat: LLM idle timeout (120s) 根本原因 N100 使用 WiFi(wlp2s0)上网。Docker bridge 模式下,NAT/MASQUERADE 规则在某些 WiFi 驱动上对 TCP 转发有问题——ICMP 能通(路由层),WAN TCP 超时(NAT 层)。 修复:改用 network_mode: host 12345678910...
milin_desktop v2rayA 点启动弹错——孤儿 core 占端口排查
#v2rayA #Windows #nssm #服务器运维 milin_desktop 上的 v2rayA 突然用不了,Web UI 点"启动"就弹报错。排查发现既不是网络问题也不是后端挂了,而是上一次残留的 xray-core 进程变成孤儿、一直霸占入站端口,导致新 core 起不来。记录定位过程与用 nssm 事件钩子防复发的做法。 环境 主机:milin_desktop(Windows 11,192.168.2.10) 安装:D:\Program Files (x86)\v2raya\,以 nssm 注册成服务 v2raya(--lite --v2ray-bin ...\v2ray.exe) core:实为 xray-core 2.4.6 Web UI:http://192.168.2.10:2017 日志:安装目录 v2raya-stdout.log / v2raya-stderr.log(nssm 重定向) 配置/资产目录:C:\Users\milin\AppData\Roaming\v2rayA 一、症状与初判 ...
Claude Code 多设备记忆同步——Syncthing 方案实录
#ClaudeCode #Syncthing #Windows #开发环境 #服务器运维 同一用户在 Mac、N100、Windows 三台设备上使用 Claude Code CLI,各自的 ~/.claude/ 完全独立,导致跨设备会话反复重建上下文、浪费 token。本文记录用 Syncthing 打通三端记忆层的完整方案,以及在会话中主动向同步体系注入信息的方法。 一、问题描述 Claude Code 的跨会话记忆存储在 ~/.claude/ 下,核心是各项目的 memory/ 目录: 123456789~/.claude/ projects/ -Users-lin-Documents-MyBlog/ memory/ MEMORY.md ← 索引 project_homelab_infra.md ← 设备拓扑、服务配置 feedback_openclaw_*.md ← 排查经验 settings.json ← 全局设置 plugi...
5080 主机重装系统快速恢复手册
#Windows #重装恢复 #Ollama #CUDA #SSH #Docker 配套 《RTX 5080 新主机环境配置实录》。记录所有组件的安装目录与可持久化路径,以及重装系统后的最短路径恢复方案。目标:重装后 30 分钟内恢复 SSH + CUDA + Ollama,其余开发工具按需补装。 一、安装目录全览 1.1 C 盘(重装后丢失) 组件 安装路径 重装后 NVIDIA Driver C:\Windows\System32\DriverStore\... 丢失,重装 CUDA Toolkit 12.8 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8 丢失,重装 cuDNN 9.x 同 CUDA 目录(复制进去) 丢失,重装 Ollama 应用 C:\Users\milin\AppData\Local\Programs\Ollama 丢失,重装 Git C:\Program Files\Git 丢失,重装 Node.js C:\Program Files\nodej...
RTX 5080 新主机环境配置实录
#Ollama #RTX5080 #CUDA #Windows #OpenClaw #开发环境 新 9800X3D + RTX 5080 主机组装完成,v2rayA 代理已配置。本文记录完整的环境搭建流程:CUDA 推理栈、开发环境、Docker、SSH,以及接入现有 AI 推理生态(Ollama + OpenClaw)。 一、整机信息与网络架构 项目 值 CPU AMD Ryzen 9 9800X3D GPU NVIDIA RTX 5080 (Blackwell GB203) 系统 Windows 11 局域网 IP 192.168.2.10(WLAN,需设为 Private 网络配置文件) SSH 别名 milin_desktop 代理 v2rayA ✅ 已完成 1234567891011121314151617MacBook Air M1 (192.168.2.13) └── ssh milin_desktop → 192.168.2.10N100 (192.168.2.14) └── Docker: openclaw → ...
家庭服务子域名 HTTPS 改造:frp 复用 + nginx 路由 + Let's Encrypt
#nginx #frp #HTTPS #反向代理 #Docker #服务器运维 背景:N100 上跑了若干 Docker 服务,一直通过 VPS:裸端口 访问。本文记录将它们改造为子域名 HTTPS 访问的完整过程,以及途中遇到的两个坑(certbot 依赖冲突、chicken-and-egg 证书问题)。 一、现状与目标 改造前:每个服务对外暴露一个裸端口,访问方式不统一,无法用标准 443 HTTPS。 服务 原访问方式 MT Photos https://x.x.x.x:18063 WebDAV https://x.x.x.x:4455 qBittorrent https://x.x.x.x:19090 改造后:每个服务对应一个子域名,统一走 443 HTTPS。 服务 新访问方式 MT Photos https://mtphotos.your.domain.example WebDAV https://dav.your.domain.example qBittorrent https://qbt.your.domai...
MT Photos 语义检索接入 RAG 可行性分析
#MTPhotos #RAG #N100 #家庭服务器 记录 N100 上 MT Photos + mt-photos-ai 的部署现状,并分析在现有家庭服务网络架构下,把"文字搜图"升级为完整 RAG(检索+生成)是否有意义、该怎么落地。 相关:N100 网络重构与服务修复记录 · Docker 数据迁移至 HDD 方案 · N100 部署 OpenClaw 与 Hermes Agent 实录 一、当前部署状态(2026-07-20) N100(MyUbuntuLocal, 192.168.2.14)上以容器形式部署: 容器 镜像 状态 挂载 mt-photos — 运行中 /nfs(照片库) mt-photos-ai mtphotos/mt-photos-ai:onnx-latest(8f6709818fe1) Up 34h,python3 server.py,:8060 — mt-photos-ai 提供 CLIP(文字-图片语义匹配)+ InsightFace(人脸识别/聚类),实现"文字搜图"式的场景...
Headroom — AI Agent 上下文压缩层调研
Headroom (headroomlabs-ai/headroom) — 调研与接入方案 项目概览 Headroom 是一个 LLM 上下文压缩层,在 AI Agent 的请求到达大模型之前,对工具输出、日志、文件内容等进行智能压缩。 仓库:github.com/headroomlabs-ai/headroom 最新版本:v0.28.0 核心语言:Rust(附 Python/TypeScript SDK) 协议:Apache 2.0 核心能力 能力 说明 内容压缩 检测内容类型(代码/JSON/文本),选择合适的压缩器,减少 60-95% token 可逆压缩 (CCR) 原始内容本地缓存,LLM 需要时可恢复 跨 Agent 记忆 共享存储,自动去重 输出 token 缩减 减少模型回复中的冗余内容 学习机制 从失败会话中提取模式自动写入配置 工作模式 Headroom 提供四种接入方式: 1. Library 模式 代码中直接调用 compress() 函数,适合开发者集成。 2. Proxy 模式(推荐) 启动本地代...
N100 网络重构与服务修复记录
#Docker #WebDAV #frp #Samba #openclaw #服务器运维 背景 路由器设备更换,局域网网段从 192.168.0.0/24 整体迁移至 192.168.2.0/24。N100 重启后各服务需要恢复,同时处理 openclaw 权限修复遗留的路径问题、WebDAV 公网访问故障及 LLM 连接问题。 本文涉及的 openclaw 权限修复遗留问题,源自 《N100 安全事件响应:OpenClaw SSH 暴力破解与 fail2ban 加固》。 一、磁盘检查与挂载恢复 btrfs RAID1 健康验证 123# 只读检查(不修改数据),双盘 RAID1 只需指定其中一块sudo btrfs check --readonly /dev/sdc1# 结果:no error found ✅ 两块盘共享同一 fsid(RAID1 特性),num_devices: 2。btrfs check 会自动找到另一块盘,无需手动指定两个设备。 开机挂载验证 重启后确认两个挂载点均正常: 12/dev/sdc1 on /nfs type btrfs (rw,noat...
N100 安全事件响应:OpenClaw SSH 暴力破解与 fail2ban 加固
#安全 #fail2ban #frp #N100 #运维 背景 排查 N100(Ubuntu 22.04)开机卡死问题时,发现系统存在持续 11 天的 SSH 暴力破解,来源为内部 Docker 容器(openclaw),同时 frp 内网穿透服务将 SSH 端口暴露在公网,导致来自外部的 SSH 探测。本文记录整个事件的发现、处置和加固过程。 事件时间线 时间 事件 7月4日 N100 正常运行 7月5日 openclaw 容器开始向本机 SSH 发起字典攻击 7月16日 攻击最后记录(7月17日重启后 openclaw 未随 boot 自启) 7月17日 N100 多次开机卡死;排查发现 ext-mount.service 因外接 btrfs 盘状态异常导致内核挂起 7月17日 停止 openclaw 容器;分析 SSH 日志;配置 fail2ban 7月17日 实施 openclaw 容器安全加固(非 root 用户、bridge 网络、SSH wrapper、AGENT.md 信任等级) 7月17日 卸载 Neo4j(端口 7687...
Windows ssh-copy-id:跨平台公钥一键安装脚本
#SSH #Windows #PowerShell #运维工具 背景 Linux/Mac 自带 ssh-copy-id,一条命令把本机公钥安装到远端的 authorized_keys,实现免密登录。Windows 没有这个工具。 日常在 Windows 上需要频繁向 Linux 服务器和其他 Windows 主机推送 SSH 公钥,每次都要手动操作很繁琐,因此写了一个 PowerShell 版本的 ssh-copy-id。 实现思路 难点一:判断远端 OS 传统做法是先 SSH 连上去执行探测命令,但如果是新主机、密钥还没装,连接本身就需要密码,探测和安装成了先有鸡还是先有蛋的问题。 解决方案:用 ssh-keyscan 读取 SSH Banner。Banner 在 TCP 握手阶段就会发送,无需任何认证: Windows:SSH-2.0-OpenSSH_for_Windows_10.0p2 Linux:SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13 难点二:Windows 目标的双重 authorized_keys Windows O...
OpenClaw 接入 Headroom:Claude Code 上下文压缩部署与实测
#OpenClaw #Headroom #ClaudeCode #MCP #上下文压缩 接上篇 《OpenClaw 公网访问:FRP + nginx HTTPS 配置实录》,记录第四阶段:为 Claude Code 会话接入 Headroom 上下文压缩层,并实测不同内容类型下的 token 节省效果。 一、Headroom 是什么 headroomlabs-ai/headroom 是一个本地优先的上下文压缩中间层,工作原理: 12345678910Claude Code / OpenClaw / 任何 AI 代理 │ tool outputs · logs · files · RAG 结果 ▼ ┌─────────────────────────────────────────────┐ │ Headroom Proxy(本地运行,数据不出机器) │ │ ContentRouter → SmartCrusher / Kompress │ └──────────────────────────────────────────...
OpenClaw 公网访问:FRP + nginx HTTPS 配置实录
#OpenClaw #FRP #nginx #HTTPS #公网访问 接上篇 《OpenClaw 配置续集:网络修复、邮件插件与 Ollama 接入》,记录第三阶段:为 OpenClaw 配置公网 HTTPS 访问。 一、整体架构 123456789101112131415用户浏览器 │ HTTPS 443 ▼MyServer(Aliyun 公网,x.x.x.x) └── nginx 反向代理 → 127.0.0.1:17890 │ ▼ frps(已运行,bind_port=6000) │ FRP 隧道 ▼N100(本地,192.168.0.155) └── frpc → 127.0.0.1:18789 │ ▼ OpenClaw 容器(network_mode: host) 关键点: MyServer 已运行 frps(端口 6000,token 已配置),所有隧道复用同一个 frps,无需额外部署 N100 已有 frpc 运行(管理 SSH、W...
Docker 数据根目录迁移至 HDD 方案
#Docker #磁盘管理 #服务器运维 背景 N100 系统盘(117G SSD)长期维持在 85-91% 使用率,Docker 镜像占用约 10 GB,是主要的可迁移项。 当前磁盘布局: 设备 大小 文件系统 挂载点 使用率 sda2 (SSD) 117G ext4 / ~91% sdc1 (HDD) 1.9T btrfs /nfs ~25% sdb2 (HDD) 3.7T exFAT /smb ~52% 性能影响评估 阶段 影响 说明 容器启动 慢 2-5 秒 从 HDD 读取镜像层,仅启动时一次性 容器运行中 无影响 镜像层被 overlayfs 挂入页面缓存,与存储位置无关 容器写入(可写层) 轻微 取决于应用写入频繁程度 结论:mt-photos、qbittorrent、openclaw 等均为长驻服务,启动多几秒可接受,运行性能无损失。 迁移目标选择 ✅ /nfs(btrfs):完整 Linux 文件系统,支持 Unix 权限、符号链接、硬链接,可行 ❌ /smb(exFAT):不支持 Unix 权...
