joy-cli/docs/ops/nas.md
feibisi b7fecf7ab0 feat(web): NAS 硬件卡 SSH 探测 + 布局对齐其它主机
采集 Terminal API 与 BatchMode 公钥探测,硬件 tab 主卡精简(IP 常显、
DSM 版本进机身详情),明细用 hwFold;文档同步 SSH 已通与修复入口。
2026-07-10 21:25:50 +08:00

276 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NAS 完整手册DS224+ · feibisi-NAS
> 更新2026-07-10
> 范围设备档案、挂载、DSM API、joy web 硬件采集、SSH、安全与排障
> 凭据:**仅** `~/.config/nas/dsm.env`chmod 600禁止进 git / HANDOFF 明文
---
## 0. 一分钟速览
| 项 | 值 |
|----|-----|
| 型号 / 主机名 | **Synology DS224+** / `feibisi-NAS` |
| LAN | **192.168.1.188**eth0 1Geth1 未接) |
| DSM | **7.3.2-86009 Update 4** · Web `https://192.168.1.188:5001` |
| 存储 | 2× WD80EFPX 8TB · **RAID1** · volume1 **btrfs** · ~7.0T / 用约 37% |
| 协作真源 | **`shared-context`** → Mac NFS `~/mnt/shared-context` · VM NFS `/mnt/shared-context` |
| joy 机身观测 | `collect_nas_dsm``dashboard.infra.nas.dsm`**硬件 → NAS** |
| 账号(观测) | `linuxjoy`administrators 组成员;描述:麟悦 Linux 备份专用) |
| SSH 入站 | **已通**2026-07-10`ssh nas`;运维见 linuxjoy `docs/ops/nas-ssh.md` · `scripts/mac/nas-ssh.sh` |
角色心智NAS = 飞轮**粮仓与驿道**(硬件 tab不是神州公网站、不是神兽 VM。
---
## 1. 网络与服务面
```
┌─────────────────────────┐
Mac / VMs NFS ──►│ DS224+ 192.168.1.188 │
Mac SMB ──────►│ volume1 (btrfs RAID1) │
DSM HTTPS ──────►│ :5001 DSM + API │
SSH :22 ──────►│ enable_ssh=true │ ← ssh nas OK密钥 600 / 无 ACL
└─────────────────────────┘
│ USB
APC UPS
```
| 服务 | 状态(实测) |
|------|----------------|
| NFS | 已开v4 minor 未开Mac/内网有会话 |
| SMB/CIFS | 可用homes / Download / shared-context 可 mount_smbfs |
| DSM Web/API | ✅ |
| SSH | **已通**`ssh nas`);故障剧本见 §5 |
| 套件 | ContainerManager、ActiveBackup、Snapshot、Drive、Git… 等 running |
### 共享文件夹11
| 共享 | 用途(简) |
|------|------------|
| **shared-context** | VM/Mac 集群协作主卷Board、信号、报告… |
| homes | 用户家目录(含 `linuxjoy/.ssh` |
| docker | ContainerManager |
| ActiveBackupforBusiness | 主动备份 |
| Download | 下载 / forgejo 备份脚本等 |
| iCloudPhotos / music / photo / video / web / web_packages | 默认或媒体/Web |
---
## 2. 挂载(内容面)
### 2.1 Mac当前生产形态
```text
192.168.1.188:/volume1/shared-context → ~/mnt/shared-context (NFS)
```
备用 SMB文档历史
```bash
mount -t smbfs //linuxjoy@192.168.1.188/shared-context ~/mnt/shared-context
```
homes / Download 排障用(会话中曾用):
```bash
# 密码 URL 编码后 mount_smbfs
mount_smbfs "//linuxjoy:<urlencoded-pass>@192.168.1.188/homes" ~/mnt/nas-homes
mount_smbfs "//linuxjoy:<urlencoded-pass>@192.168.1.188/Download" ~/mnt/nas-download
```
### 2.2 VM
```fstab
192.168.1.188:/volume1/shared-context /mnt/shared-context nfs rsize=8192,wsize=8192,timeo=14,intr,nofail,x-systemd.automount 0 0
```
**必须** `nofail` + automount避免 NAS 短暂不可达拖死开机。
### 2.3 joy 已有挂载探测
- `collect_infra`devops 上 `/mnt/shared-context` 是否真挂载(过滤 rpc_pipefs 假阳性)
- `collect_mac_host`Mac 侧 `df``nas_pct` / `nas_used` / `nas_total`
- 硬件 NAS挂载三角mac_ok / devops_ok+ 写探针建议
---
## 3. DSM API 与 joy 采集(机身面)
### 3.1 凭据
```bash
# ~/.config/nas/dsm.env (chmod 600)
NAS_HOST=192.168.1.188
NAS_USER=linuxjoy
NAS_PASS=********
NAS_PORT_HTTPS=5001
```
sid 缓存:`~/.config/nas/dsm.sid`(登录成功后自动写)。
### 3.2 代码入口
| 组件 | 路径 |
|------|------|
| 采集 | `joy-cli/src/joy/dashboard/nas_dsm.py``collect_nas_dsm()` |
| 合并 | `collect.py``infra.nas.dsm` |
| UI | `joy-cli/src/joy/web/js/tabs/hardware.js` → section **硬件 → NAS** |
| 摸底笔记 | [`nas-dsm-observe.md`](./nas-dsm-observe.md) |
### 3.3 字段(`infra.nas.dsm`
硬件 tab 在机身卡上展示:**卷 / 挂载 / 温度 / 健康 / 盘 / 池 / 网 / 会话 / SSH / UPS**。
2026-07-10 起增加:
| 字段 | 含义 |
|------|------|
| `terminal.enable_ssh` / `ssh_port` | DSM Terminal API |
| `ssh.ok` / `ssh.target` | Mac `ssh nas` BatchMode 公钥探测 |
复发告警文案指向 `linuxjoy/scripts/mac/nas-ssh.sh fix`
### 3.3.1 字段明细(摘要)
```text
ok, host, model, hostname, dsm_ver, sys_temp_c, temp_warn, uptime,
cpu.{series,cores,load_1m/5m/15m}, mem_pct,
pool.{raid,status,disks[]},
volume.{path,fs,used_gb,total_gb,used_pct,status},
disks[].{name,model,temp_c,smart_status,status,size_gb,serial},
eth0.{ip,speed,status},
ups_usb, fan_mode, nfs_enabled, shares_n,
connections.{total,nfs,http},
terminal.{enable_ssh,enable_telnet,ssh_port},
ssh.{ok,target,error},
health_ok, attention[]
```
实现细节:
- 使用 **curl -sk**`entry.cgi`Python urllib 对本机 DSM TLS 偶发 EOF
- 无凭据 / 登录失败 → 降级为挂载 df并仍做 SSH 探测
- **密码永不进入** dashboard JSON
- SSH 探测:`ssh -o BatchMode=yes nas echo OK`(约 4s 超时)
### 3.4 硬件 UI 展示
- 卷用量DSM 优先Mac df 兜底)
- 挂载通道 mac/devops
- 系统温度 / 健康 / 内存 / load
- 双盘温度 + SMART
- **SSH**(服务开关 + 公钥探测 ✓/✕)
- RAID、网卡、会话数、UPS USB、NFS
- 告警SMART 非 normal、温度高、挂载断、卷 ≥75% 等
---
## 4. 内容面建议(未全做自动 du
| 层级 | 做什么 | 频率 |
|------|--------|------|
| L0 机身 | DSM API已落地 | 15 min |
| L1 通道 | 挂载 + 连接数 + write 探针 | 同轮 |
| L2 内容 | 白名单目录 entry 数 / 日 `du` 缓存 | 日更;**禁止**每轮全盘扫 |
协作相关目录(`shared-context` 下,浅层探测曾成功):
`board` · `ai-context` · `backups` · `reports` · `alerts` · `audit` · `signals` · `vm-control` · `secrets`**只报存在性,不读内容**
---
## 5. SSH已打通 · 2026-07-10
### 5.1 日常
```bash
ssh nas 'hostname' # → feibisi-NAS
# linuxjoy 仓库运维入口(权威)
bash ~/Projects/linuxjoy/scripts/mac/nas-ssh.sh check
bash ~/Projects/linuxjoy/scripts/mac/nas-ssh.sh fix # 再挂时
# 手册
# linuxjoy docs/ops/nas-ssh.md
# linuxjoy docs/ops/nas.md
```
### 5.2 客户端Mac
`~/.ssh/config` Host `nas` / `feibisi-nas` / `ds224``linuxjoy@192.168.1.188`,密钥
`id_ed25519` + `nas_linuxjoy_ed25519`。DSM `enable_ssh=true` 端口 22。
### 5.3 根因(历史)
`authorized_keys` 曾为 **ACL + mode 0777** → OpenSSH 丢弃全部公钥;且 `PasswordAuthentication no`
**不是**「没开 SSH / 漏加公钥」。SMB 写 `.ssh` 易再次打坏权限FileStation Upload 常 error **119**
### 5.4 修复固化
| 组件 | 位置 |
|------|------|
| Mac 入口 | `linuxjoy/scripts/mac/nas-ssh.sh` |
| root 脚本 | NAS `/volume1/Download/joy-fix-ssh-v2.sh`(源:`linuxjoy/scripts/nas/joy-fix-ssh.sh` |
| root 任务 | DSM `joy-ssh-rootfix`(默认 disabled手动 `fix` |
| 日志 | `/volume1/Download/joy-ssh-fix.log` |
| 集群记忆 | cluster-recall **#4744**lesson**#4745**config |
期望权限:`.ssh` **700**`authorized_keys` **600**,无 ACL`synoacltool` → Linux mode
### 5.5 复发时
1. `bash .../nas-ssh.sh check`
2. 失败则 `fix`deploy + root 任务 + 复查)
3. 勿用访达盲写 `authorized_keys`;改密钥用 `ssh nas` / `ssh-copy-id`
4. 可选 `nas-ssh.sh harden` 关闭密码登录
---
## 6. 备份与其它路径
| 路径/任务 | 说明 |
|-----------|------|
| `/volume1/Download/backups/forgejo/pull-backup.sh` | NAS 上定时拉 Forgejo 备份(用户 `linuxjoy` 脚本任务 id=8 |
| `linuxjoy` home `vm-backups` / `disaster-recovery` | 备份相关目录 |
| SnapshotReplication | 共享文件夹快照(含 shared-context |
| ActiveBackup | 业务备份套件 |
kk-pc 二级备份见 linuxjoy `backup-to-kkpc` / ops 文档;**不替代** NAS 本体健康。
---
## 7. 安全
1. **聊天中曾出现过密码** → 建议 DSM 修改 `linuxjoy` 密码,并更新 `~/.config/nas/dsm.env`
2. 观测账号尽量保持:**能读监控 + FileStation**;写操作仅排障
3. 禁止把 `dsm.env`、authorized_keys 私钥、`secrets/` 内容提交 git
4. SSH 打通后优先 **公钥**;不要对公网开密码 SSH
5. joy dashboard **只读**NAS 变更在 DSM
---
## 8. 相关文档索引
| 文档 | 内容 |
|------|------|
| 本文 `nas.md` | **总手册** |
| [`nas-dsm-observe.md`](./nas-dsm-observe.md) | API 摸底与字段草案 |
| linuxjoy `docs/setup/quick-rebuild.md` §8 | VM NFS fstab |
| linuxjoy `docs/infrastructure/nas-device-profile.md` | 设备档案 |
| linuxjoy `docs/ops/nas-ssh.md` / `nas.md` | **SSH 运维权威** + 总览 |
| linuxjoy `scripts/mac/nas-ssh.sh` | check / fix / harden |
| linuxjoy `docs/ops/ops-quickref.md` | 挂载丢失 + SSH 速查 |
| [`joy-shenzhou.md`](./joy-shenzhou.md) | 神州(公网生产)≠ NAS 粮仓 |
---
## 9. 验收清单
- [x] DSM API 可登录,机身字段可采
- [x] joy 硬件 NAS 展示 L0`f6d5b06` 起)
- [x] Mac `Host nas` SSH config + 公钥写入 authorized_keys
- [x] **`ssh nas` 成功**2026-07-10清 ACL + chmod 600 + sshd 重启)
- [ ] 密码轮换 + 可选只读监控用户
- [ ] 可选L1 写探针 + L2 白名单目录体积日更
- [ ] (可选)`nas-ssh.sh harden` 关密码登录docker.sock 授权策略
---
*SSH 与 DSM API 双通道可用;硬件面板走 `collect_nas_dsm`(机身)+ SSH 探测(运维通道);写操作不进 joy。*