1. 外部存储挂载与卸载
    1. 挂载外部存储
    2. 卸载外部存储
  2. CasaOS Docker 迁移到外部存储
  3. 免密登录
  4. U 盘挂载各类常见问题
    1. Aria2 无法下载到外部存储: Task Status: Error Occurred
    2. Bad magic number in super-block while trying to open
    3. mount: /media/devmon/SDCard4G: wrong fs type, bad option, bad superblock on /dev/mmcblk0p1, missing codepage or helper program, or other error.
    4. dev/mmcblk0 is apparently in use by the system; will not make a filesystem here!
    5. docker volume 已经映射到外部存储, 依然下载到了内部存储?
    6. 开机自动挂载
  5. 内网穿透
    1. Tailscale
    2. Lucky
  6. Aria2
    1. Hints
    2. Server 配置
    3. Client 配置
    4. 示例界面
  7. 媒体服务
    1. WebDAV - nPlayer
    2. SMB - Nova Video Player
  8. 飞跃大气层的魔法 (旧 Clash + YACD)
    1. 配置细节
  9. 飞跃大气层的魔法 (新 V2rayA)

以下基于 Armbian + CasaOS 进行配置

外部存储挂载与卸载

挂载外部存储

# 查看当前的存储设备以及挂载的位置
# 使用 fdisk -l 命令列出所有存储设备及其挂载点
fdisk -l

运行上述命令后,会得到类似如下的输出,从中找到外部存储的路径,例如:/dev/mmcblk0

注意:多次插拔 U 盘后,存储路径可能会发生变化。

Disk /dev/mmcblk0: 28.97 GiB, 31104958464 bytes, 60751872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
# 创建一个目录用于挂载外部存储设备
mkdir /mnt/udisk

# 使用 mount 命令将外部存储设备挂载到刚创建的目录
mount /dev/mmcblk0 /mnt/udisk
# 提示:一般情况下直接使用 mount 命令即可完成挂载

卸载外部存储

# 使用 umount 命令卸载挂载的存储设备
# 记得提前停止相关进程
umount /mnt/udisk

CasaOS Docker 迁移到外部存储

CasaOS Docker 迁移到外部存储

免密登录

# 1. 生成 SSH 密钥对 (使用默认路径和空密码) 
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519 -N ""

# 2. 将公钥复制到远程服务器  
ssh-copy-id username@remote_host

# 3. 验证 SSH 免密登录  
ssh username@remote_host

U 盘挂载各类常见问题

Aria2 无法下载到外部存储: Task Status: Error Occurred

这里有多种情况:

  • 盲猜是读写权限问题
    • 进入外部存储文件夹后, 尝试运行 chmod 777 {PATH} 更改权限
    • 如果上述 chmod 无效, 可能是外部存储的文件系统 (如 FAT32 或 NTFS) 导致的。
  • 外部存储文件系统不支持标准的 unix 权限模型
    • 检查外部存储的文件类型:
      df -T {PATH}
      
    • 示例输出:
      Filesystem     Type 1K-blocks  Used Available Use% Mounted on
      /dev/sda2      vfat    204560 74356    130204  37% /mnt/udisk2
      
    • 如果文件系统类型为 vfat ,基本可以确认是文件系统问题。
    • 解决方法: 一劳永逸格式化
      # 先卸载外部存储, 然后格式化为 `ext4` 文件系统
      umount {PATH}
      sudo mkfs.ext4 {PATH}
      

Bad magic number in super-block while trying to open

重新插拔优盘,可能和重复的挂载 UUID 有关。

mount: /media/devmon/SDCard4G: wrong fs type, bad option, bad superblock on /dev/mmcblk0p1, missing codepage or helper program, or other error.

这种情况通常出现在格式化后的 SD 卡上,建议重新到 CASAOS UI 中格式化后解决问题。

dev/mmcblk0 is apparently in use by the system; will not make a filesystem here!

docker volume 已经映射到外部存储, 依然下载到了内部存储?

比如 QBittorrent 或者 Aria2 之类的, 明明已经在 CASAOS 的 Docker Volume 中映射了外部存储, 但是下载的时候依然占用内部存储, 这可能是因为:

  1. Volumes 写错了呗, 可能自己傻傻地选择了一个并没有挂载 USB 的目录
  2. 外部存储根本没有 mount, 尝试执行 lsblk 查看当前挂载情况:
    lsblk
    
    NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    mmcblk0      179:0    0    29G  0 disk # 如果你的 USB 这里没有路径, 那就说明没有挂载
    mmcblk1      179:16   0   7.3G  0 disk 
    ├─mmcblk1p1  179:17   0   256M  0 part /boot
    └─mmcblk1p2  179:18   0   6.9G  0 part /
    mmcblk1boot0 179:32   0     4M  1 disk 
    mmcblk1boot1 179:48   0     4M  1 disk 
    zram0        253:0    0 496.6M  0 disk [SWAP]
    zram1        253:1    0    50M  0 disk /var/log
    
    这时候就重新挂载一下外部存储:
    mount /dev/mmcblk0 /media/devmon/MyUSB01
    
    然后更新一下 QB 和 Aria2 的 Volumnes 配置, 下载个文件试试, 应该就不会占用内部磁盘的空间了

开机自动挂载

fstab 配置格式

UUID=设备 UUID 挂载点 文件系统类型 挂载选项 备份 检查

关键参数详解

挂载选项 (mount options)
参数作用说明
defaults默认选项使用系统默认的挂载选项
user用户挂载允许普通用户挂载/卸载设备
noauto不自动挂载系统启动时不会自动挂载此设备
nofail容错处理如果设备不存在,系统启动不会失败
ro只读以只读模式挂载
rw读写以读写模式挂载

实际配置示例

❌ 错误配置(不会自动挂载)
UUID=132a1111-b10b-411e-ae14-3dad111105d4 /media/devmon/usb_32G auto defaults,user,noauto 0 0
✅ 正确配置(会自动挂载)
UUID=132a1111-b10b-411e-ae14-3dad111105d4 /media/devmon/usb_32G auto defaults,user,nofail 0 0

配置步骤

  1. 获取设备 UUID

    sudo blkid /dev/mmcblk0
    
  2. 创建挂载点

    sudo mkdir -p /media/devmon/usb_32G
    
  3. 编辑 fstab

    sudo nano /etc/fstab
    
  4. 添加配置行

    UUID=你的设备 UUID /media/devmon/usb_32G auto defaults,user,nofail 0 0
    
  5. 测试配置

    sudo mount -a
    

常见问题

  • Q: 为什么 sudo mount -a 显示 "ignored"?
    • A: 因为配置中包含了 noauto 参数,系统会忽略此配置。
  • Q: 如何确保设备不存在时系统不会启动失败?
    • A: 使用 nofail 参数替代 noauto
  • Q: 为什么要使用 UUID 而不是设备路径?
    • A: UUID 是唯一的,不会因为设备插入顺序变化而改变。

总结

  • 移除 noauto 参数才能实现自动挂载
  • 使用 nofail 参数提高系统稳定性
  • 使用 UUID 确保设备识别准确
  • 测试配置使用 sudo mount -a 命令

内网穿透

我常用的两种:

  • Tailscale/Zerotier 等 Private VPN 方法
    • 虚拟网络, 虚拟局域网
    • 多设备支持
    • 每个设备都要客户端
    • 在服务商方面集中管理
  • DDNS-GO/Lucky 等 Reverse Proxy 方法
    • 通过动态域名解析 (DDNS) 将内网设备或者 Web 服务的地址绑定到一个固定的域名, 方便外网访问.
    • 配合反向代理工具可以实现内网穿透
    • 一般需要一个公网域名
    • 适合需要长期稳定访问的场景, 例如搭建个人博客, NAS 文件共享等.

TL'DR: 想要虚拟局域网选 Tailscale , 想要通过网站访问家里内网的服务选 Lucky

Tailscale

安装: Using Tailscale with Docker

只需要两个环境变量:

  1. 用户配置页面 生成一个 Auth Key
  2. 需要广播的路由: TS_ROUTES:
    • 192.168.1.0/24 会将内网 192.168.1 开头所有 IP 广播到虚拟网络
    • 简而言之: 我在其他设备上输入 192.168.1.100 就能访问到内网 192.168.1.100 的服务

启动服务, 然后在其他设备上下载 App, 安装并开启.

这时跑到后台管理页面应该就有一个新设备:

 新的设备
新的设备

下方可以看到有个 subnets 感叹号, 需要到右边三个点里面 Edit route settings 激活一下.

Hints

  • 偶尔有时候不同的 subnet 里面的服务 IP 是相同的会冲突, 这时候一样跑到上面三个点关闭一些 设备的 subnet 就可以了, 多简单
  • 电信的网比移动的访问 Tailscale 明显更卡
  • Auth Key 的有效期最多未 180 天, 因此需要定期更新

Lucky

你需要一个域名

略,懒得写了。

添加动态域名

Vercel 的配置细节, Teram 这个怎么看都是个 Typo 吧
Vercel 的配置细节, Teram 这个怎么看都是个 Typo 吧
  1. 获取域名商提供的 Token
  2. 配置 TeamID :
    • TeamID 是 Vercel 的用户 ID. 一开始以为是某些数字, 后来发现可以直接在 URL 中找到. 例如, 在 https://vercel.com/szhshps-projects/szhshp-blog 中, TeamIDszhshps-projects
  3. 配置完成后, 动态域名解析即可生效
IPV4 和 IPV6 各配置一份, 方便后面根据需要修改
IPV4 和 IPV6 各配置一份, 方便后面根据需要修改

申请证书

需要填写的内容在上一步骤中已经获取:

SSL 证书信息填写的弹窗里,域名列表也一定要添加两行:

  • 一个是 abc.top,这个可以保证主域名在访问时浏览器提示是可信任的
  • 一个是 *.abc.top,这个可以保证二级域名在访问时浏览器提示是可信任的

配置后等待几分钟即可生效.

开启 Web 服务

启动所需的 Web 服务, 并确保其可以通过动态域名访问.

规则组会选择一个主要端口, 我用了 16666

规则组需要开启 TLS.

两种策略访问不同服务:

  1. 多个规则组, 每个设置一个端口:
    • https://filebrowser.szhshp.org:16666
    • https://filebrowser.szhshp.org:16688
  2. 一个规则组多个子规则, 使用子域名区分:
    • https://filebrowser.szhshp.org:16666
    • https://media.szhshp.org:16666
    • https://backup.szhshp.org:16666

我记不住端口, 因此选择 #2 , 子域名更好记.

为每个本地端口的服务添加多个子规则:

配置完成后, 你应该可以通过 https://filebrowser.szhshp.org:16666 访问服务.

端口转发与内网穿透

我的网络状况非常简单, 没有多层 NAT 的情况, 所以我不需要进行额外的端口转发设置

Hints

  1. 证书发放成功后, 使用 HTTPS 协议访问可能仍显示 Not Secure , 通常是刷新延迟, 等待即可.
  2. 外部访问时需永久带上端口, 例如: https://filebrowser.szhshp.org:16666 .
  3. 配置完成后, 记得在外网使用流量测试:
    • 一开始内网访问成功了我还以为就直接搞定了, 当天晚上遛弯儿的时候用手机试了试才注意到外网不行
    • 浏览器 -> 绑定的域名 -> DNS 解析 -> 主机地址 -> 建立 TCP 连接 -> 发送 HTTP 请求 -> 服务器响应 -> 渲染网页
    • 你在内网的话主机就在你身边啊, 当然秒访问啊
    • 就这一点可以直接体会到 Edge Function 和 分布式部署的优势, 离得近就是快啊
  4. 外网无法访问多数是路由器设置问题:
    • 检查 DMZ 主机是否开启, 确保配置后已启用. (配置后忘记开启就很尴尬了)
    • 检查路由器防火墙, 必要时关闭防火墙. (我的一台路由器就是这个问题, 关闭 Ipv4SpiIpv6Spi)

Aria2

核心点就是需要下载 2 个镜像:

  • p3terx/ariang : Client
  • p3terx/aria2-pro : Server

Hints

Server 配置

在配置 Server 时,需要关注以下几个关键点:

  • RPC_SECRET:用于前端连接后端的密码,确保安全性。
  • Volumes 的映射:将文件下载路径映射到外部存储目录。具体操作可参考外部存储挂载与卸载一节。

Client 配置

在配置 Client 时,需要使用对应 Server 的端口和 RPC_SECRET:1. 打开 AriaNg Setting,进入 RPC 设置页面。2. 配置以下内容:

  • 地址:填写 Server 的 IP 和端口,例如:192.168.1.105:8800
  • 密码:填写 Server 配置的 RPC_SECRET

如果使用了 Lucky 进行端口映射,则需要填写映射到外部的地址和端口,例如:https://aria.server.szhshp.org:16666

示例界面

以下为配置完成后的示例界面:

媒体服务

我不喜欢个人媒体中心, 我听的音乐非常偏门导致基本刮削不出什么信息, 电影也不是经常看. 我觉得折腾很久最后收益只是孤芳自赏, 因此 Jellyfin 之类的我搭建最后都删了

最有用的还是 xiaoya 库, 这里是最方便的安装方式

WebDAV - nPlayer

配置细节:

小雅默认 webdav 账号密码

用户: guest 密码: guest_Api789

端口根据小雅配置端口写

SMB - Nova Video Player

这个配置就简单得多了, 直接写 smb 协议地址即可

飞跃大气层的魔法 (旧 Clash + YACD)

这个方案配置起来比较麻烦, 现在有更好的方案, 见下文

开启穿越大气层魔法需要两个镜像:

  • dreamacro/clash : Client
  • haishanh/yacd : Server

配置细节

准备配置文件

首先需要获取 Clash 的配置文件 (YAML 格式) . 最简单的方法是从 PC 或手机上的 Clash 客户端中导出配置文件.

Clash 配置导出示例
Clash 配置导出示例

导出后, 需要对配置文件进行一些修改, 主要是调整 External Controller 的设置.

修改后的配置文件示例
修改后的配置文件示例

修改内容包括:

  • External Controller 的广播地址改为 0.0.0.0 , 以便允许外部设备访问.
  • 设置 mixed-port , 用于暴露 SOCKS5 代理端口.
  • 启用 allow-lan , 允许局域网设备连接.

将修改后的配置文件保存到路径 /clash/sub.yaml .

YACD 连接配置

在 YACD 中连接 Clash 时, 需要使用刚才修改的 External Controller 地址.

注意:

  • 必须使用实际的设备 IP 地址, localhost 无法用于外部设备连接.
  • 端口号与配置文件中设置的 External Controller 端口保持一致.
YACD 连接示例
YACD 连接示例

其他设备代理设置

在其他设备上进行代理设置时:

  • 使用本地设备的实际 IP 地址.
  • 代理端口为配置文件中设置的 mixed-port (默认值为 7890 ) .

完成以上配置后, 其他设备即可通过代理访问网络.

飞跃大气层的魔法 (新 V2rayA)

TL'DR: V2rayA in Docker, 不用像以前那样安装 Clash + YACD 俩服务了

Compose 文件:

name: cool_antonio
services:
  v2raya:
    cpu_shares: 90
    command: []
    container_name: v2raya
    deploy:
      resources:
        limits:
          memory: 993M
    environment:
      - IPTABLES_MODE=legacy
      - TZ=Asia/Shanghai
      - V2RAYA_LOG_FILE=/tmp/v2raya.log
      - V2RAYA_V2RAY_BIN=/usr/local/bin/xray
    hostname: v2raya
    image: mzz2017/v2raya:v2.2.6.3
    labels:
      icon: v2raya
    ports:
      - target: 2017
        published: "2017"
        protocol: tcp
      - target: 20170
        published: 20170-20173
        protocol: tcp
    privileged: true
    restart: always
    volumes:
      - type: bind
        source: /lib/modules
        target: /lib/modules
      - type: bind
        source: /volume1/docker/v2raya/data
        target: /etc/v2raya
    devices: []
    cap_add: []
    network_mode: host
x-casaos:
  author: self
  category: self
  hostname: ""
  icon: v2raya
  index: /
  is_uncontrolled: false
  port_map: "2017"
  scheme: http
  store_app_id: cool_antonio
  title:
    custom: v2raya

配置完成后, 添加订阅, 启动服务, 然后使用预设的走 HTTP 协议的端口号 {ip}:20171 访问即可.

简单粗暴.