# 在 Linux 上挂载

在没有桌面的渲染节点、服务器、CI 机器上，通过 FUSE 把所有空间挂成一个普通文件夹，用令牌和 systemd 服务开机自动挂载。

渲染节点、服务器、CI 机器这类没有桌面的 Linux，用一条命令把你所有的空间挂成一个普通文件夹，任何程序都能直接读写：

```sh
sidespace login you@example.com        # 或者用令牌，见下面“无人值守”
sidespace mount --at ~/SideSpace       # Ctrl-C 或 umount ~/SideSpace 停止
ls ~/SideSpace                          # 每个空间一个文件夹
```

## 怎么工作

- 通过 FUSE 挂载，和 Mac 上的挂载是同一套逻辑。
- 读大文件只取用到的那一段：播放器拖到第 40 分钟，只下载那附近的数据块，不用先把整个文件拉下来。
- 写入先放在本机。文件安静 2 秒后保存成一个新版本，`fsync` 会立刻保存。
- 用临时文件加改名的方式保存，算原文件的新版本，历史不断。
- `mv`、`mkdir` 会同步到空间里。`rm` 把文件放进回收站，30 天内能恢复。`rmdir` 只删空文件夹。
- 别人保存的改动一秒左右就能看到：新文件出现，重新打开文件读到的是新内容。
- 停止时（Ctrl-C、`SIGTERM`、`umount`）先把还没保存的写入存好，再卸载。上次异常退出留下的挂载点，下次启动会自动清掉。
- 以 root 运行不需要额外软件。普通用户需要 `fusermount3`，在 `fuse3` 包里：`apt install fuse3`。
- 默认只有挂载的用户能访问。要让同一台机器的其他用户也能访问，加 `--allow-other`；非 root 运行时，还要在 `/etc/fuse.conf` 里打开 `user_allow_other`。

实测有多快，见[性能](/docs/performance)。

## 无人值守：令牌和开机自动挂载

不想在机器上登录账号，就给这台机器单独做一个令牌，只给它需要的空间和权限：

```sh
# 在你自己的电脑上
sidespace token create render-01 --scope files:read --scope files:write --space "Film A"
```

把令牌放进机器上的 `~/.config/sidespace/mount.env`：

```sh
SIDESPACE_TOKEN=ssp_…
```

安装包里带一个 systemd 用户服务，负责把空间一直挂在 `~/SideSpace`。崩溃会自动重启，停止前会先保存：

```sh
systemctl --user enable --now sidespace-mount
loginctl enable-linger $USER            # 没人登录时也开机挂载
journalctl --user -u sidespace-mount    # 看日志
```

令牌只能看到它被授权的空间。用 `sidespace token revoke` 撤销后，这台机器马上失去访问。

## 安装包

`scripts/package-linux.sh` 在 `rust:alpine` 容器里编译出一个静态的 `sidespace`，不依赖 glibc 版本，各个发行版都能用。产物有两个：

- `sidespace-版本-linux-架构.tar.gz`：二进制、服务文件和这份说明。
- `sidespace_版本_架构.deb`：装到 `/usr/bin/sidespace` 和 `/usr/lib/systemd/user/`，推荐依赖 `fuse3`。

目前还没有公开的下载页：从仓库自己构建，或者找我们要当前的版本。

## 也可以用 NFS

不能用 FUSE 的环境（比如没有 `/dev/fuse` 的容器），可以用 `sidespace mount --nfs`。它会打印对应的 `sudo mount -t nfs …` 命令，需要装 `nfs-common`。
