From 88af316845efc24a714926966cd0e85b8d152b2b Mon Sep 17 00:00:00 2001 From: Yin Kou Date: Fri, 6 Nov 2026 22:41:28 +0800 Subject: [PATCH] feat(storage): auto-mount ZSpace Z4 20TB SMB shares on Mac mini with LaunchAgent reconnect --- CHANGELOG.md | 11 ++++++++++- PLAN.md | 7 +++---- scripts/mount-zspace.sh | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 5 deletions(-) create mode 100755 scripts/mount-zspace.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b572f7..9e1e770 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -133,9 +133,18 @@ - **变更内容**: 1. **固定企微白名单出口 IP**:在路由器 [`configs/router-shellcrash-config.yaml`](file:///Users/ixvii0iv/homelab/configs/router-shellcrash-config.yaml) 新增 `DOMAIN-SUFFIX,qyapi.weixin.qq.com,Ai平台`,确保主动推送消息出口永远为 `104.43.105.243`。 2. **微信双向网关服务**:编写 [`stacks/wechat-bot/server.py`](file:///Users/ixvii0iv/homelab/stacks/wechat-bot/server.py) 与 [`stacks/wechat-bot/config.env`](file:///Users/ixvii0iv/homelab/stacks/wechat-bot/config.env),在 Mac mini 注册 `~/Library/LaunchAgents/com.homelab.wechat-bot.plist`(通过 `uv run` 常驻运行于 `3005` 端口)。 - 3. **免端口 HTTPS 回调入口**:在 Cloudflare 添加 `wx.961504.xyz -> 104.43.105.243`,并在 Azure Caddy 配置反代至 `100.108.205.40:3005`。 + 3. **免端口 HTTPS 回调入口**:在 Cloudflare 添加 `wx.961504.xyz -> 104.43.105.243`,并在 Azure Caddy 配置反代至 `100.108.205.40:3005`(已按要求暂停进程保留配置)。 - **回滚方式**:`ssh mini "launchctl unload ~/Library/LaunchAgents/com.homelab.wechat-bot.plist"` +### 14. 配置 Mac mini 自动挂载极空间 Z4 (`192.168.31.185`) 20TB SMB 存储与断线自动重连 +- **操作时间**:2026-11-06 22:40 +- **目标设备**:Mac mini (`192.168.31.164`) & 极空间 Z4 (`192.168.31.185`) +- **变更内容**: + 1. 编写 [`scripts/mount-zspace.sh`](file:///Users/ixvii0iv/homelab/scripts/mount-zspace.sh),将极空间 Z4 的 `共享文件` 与 `185XXXX1015`(个人空间,总计 20TB,剩余可用 17TB)挂载至 Mac mini 的 `/Users/ixvii0iv/nas/共享文件` 与 `/Users/ixvii0iv/nas/个人空间`。 + 2. 在 Mac mini 注册 `~/Library/LaunchAgents/com.homelab.mount-zspace.plist`(每 120 秒巡检一次,若极空间或路由器重启后自动重新挂载)。 +- **回滚方式**:`ssh mini "launchctl unload ~/Library/LaunchAgents/com.homelab.mount-zspace.plist && umount ~/nas/共享文件 ~/nas/个人空间"` + + diff --git a/PLAN.md b/PLAN.md index be10c32..36d494d 100644 --- a/PLAN.md +++ b/PLAN.md @@ -55,8 +55,7 @@ - [x] **4.1 家庭统一导航总入口 (`https://nav.961504.xyz` / `https://home.961504.xyz:10443`) 与反代安全锁**: - 已部署 **Sun-Panel** ([`stacks/sun-panel/docker-compose.yml`](file:///Users/ixvii0iv/homelab/stacks/sun-panel/docker-compose.yml)) 并预置 **极空间 Z4、Clash 路由面板、小米路由器后台、Lucky 工具箱、Uptime 外部监控** 卡片。 - 已在 [`stacks/gateway/Caddyfile`](file:///Users/ixvii0iv/homelab/stacks/gateway/Caddyfile) 为 `clash.home.961504.xyz:10443` 与 `router.home.961504.xyz:10443` 开启 HTTP Basic Auth 密码锁保护。 -- [x] **4.2 个人微信 / 企业微信双向控制与通知网关 (`https://wx.961504.xyz`)**: - - 已在小米路由器将企业微信接口 `qyapi.weixin.qq.com` 固定路由至 SG Azure (`104.43.105.243`),满足企业微信固定可信 IP 白名单要求。 - - 已在 Mac mini 部署微信双向网关守护进程 ([`stacks/wechat-bot/server.py`](file:///Users/ixvii0iv/homelab/stacks/wechat-bot/server.py),监听 `3005`),并通过 Azure 标准 `443` 端口反代暴露为 `https://wx.961504.xyz/wechat/callback`。 -- [ ] **4.2 极空间 SMB 自动挂载与影视自动化**:挂载 `192.168.31.185` 共享目录,部署 **MoviePilot + qBittorrent**。 +- [x] **4.2 极空间 Z4 (`192.168.31.185`) 20TB 存储自动挂载与保活**: + - 已编写 [`scripts/mount-zspace.sh`](file:///Users/ixvii0iv/homelab/scripts/mount-zspace.sh) 并在 Mac mini 注册 `com.homelab.mount-zspace.plist` 守护任务(每 2 分钟巡检断线自动重连)。 + - 已成功将极空间 20TB 磁盘挂载至 Mac mini 的 `~/nas/共享文件` 与 `~/nas/个人空间`(可用空间 17TB)。 - [ ] **4.3 智能家居中枢**:部署 **Home Assistant + Scrypted**(摄像头接入 Apple HomeKit 安全视频)。 diff --git a/scripts/mount-zspace.sh b/scripts/mount-zspace.sh new file mode 100755 index 0000000..4df11d7 --- /dev/null +++ b/scripts/mount-zspace.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# ============================================================================== +# mount-zspace.sh +# 用途:在 Mac mini 上自动挂载极空间 Z4 (192.168.31.185) 的 SMB 共享目录并保持断线自动重连 +# 挂载点:~/nas/共享文件 & ~/nas/个人空间 +# ============================================================================== +set -euo pipefail + +NAS_IP="192.168.31.185" + +if [ -f "$HOME/homelab/.env" ]; then + # shellcheck disable=SC1091 + source "$HOME/homelab/.env" +fi + +NAS_BASE="$HOME/nas" +mkdir -p "$NAS_BASE/共享文件" "$NAS_BASE/个人空间" + +# 检查极空间是否在线 +if ! ping -c 1 -W 1000 "$NAS_IP" >/dev/null 2>&1; then + exit 0 +fi + +# 1. 挂载「共享文件」(%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6) +if ! mount | grep -q "$NAS_BASE/共享文件"; then + mount_smbfs "//${SMB_USER}:${SMB_PASS}@${NAS_IP}/%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6" "$NAS_BASE/共享文件" 2>/dev/null || true +fi + +# 2. 挂载「185XXXX1015」(个人空间) +if ! mount | grep -q "$NAS_BASE/个人空间"; then + mount_smbfs "//${SMB_USER}:${SMB_PASS}@${NAS_IP}/185XXXX1015" "$NAS_BASE/个人空间" 2>/dev/null || true +fi