为何使用docker而不使用安装rclone为系统命令
群晖是一个相对封闭的系统,任何通过 root 自行安装的第三方软件,都有可能造成系统崩溃。而 docker 内的 rclone,虽然也需要到 ssh 里用 root 进行操作,但是使用的都是群晖自带的软件,所以理论上不会造成系统问题。
对于 rclone 这个软件,在黑裙上使用了一年有余,没有出现过任何问题。但是最近由于生产环境的白群晖需要借用到 rclone 的功能,为了避免后续不必要的麻烦,所以就采用了 docker 版的 rclone。
群晖Docker套件
1.1. 群晖自带了 Docker 套件,如果先前没有安装过的话,需要前往套件中心,先行安装 Docker 套件。
1.2. 进入 Docker 套件,安装 rclone 镜像。
1.3. 进入 file station,创建配置文件及挂载文件夹。由于 docker 的便携性,我习惯将一个 docker 所需要用到的所有文件放在一起,方便于测试后打包放去正式环境。(也更便于一键跑路)
这里我在 File Station 能访问到的根目录下,创建了一个 docker 文件夹用于堆放所有 docker 的相关配置文件。其中 rclone 文件夹内就是 rclone 所需要用到的配置文件。
1.4. 这里的配置文件主要有两部分组成
- rclone 本身的配置 (rclone_config 文件夹)
- 这里需要编辑 3 个地方:
- 第一行 "[]" 内的挂载盘名字(示例文件中的
gdmount01
部分) - 第五行 "=" 右边的sa文件路径
- 第六行 "=" 右边挂载盘的ID
.rclone.conf
就是配置文件
- 挂载时所要调用到的sa文件(accounts.0-100文件夹)
这里堆放了自己申请的sa账户,sa的好处这里不在赘述。随便选其中一个sa账户的文件名,rclone配置文件的第五行,示例文件中使用了1.json
作为演示
1.5. 创建挂载团队盘的挂载点
- 这里使用 `mnt/example` 作为演示,成功挂载后,团队盘的根目录会出现在 `mnt/example` 中
连接ssh的后续操作
2.1. 通过 ssh 软件,连接群晖,并通过 sudo -i
升权至 root 账户,过程中会提示输入当前用户密码,此时输入密码不会有任何提示,输入正确密码后,回车即可切换至 root
账户
2.2. 输入以下命令,启动挂载
docker run \ -d \ --name mumiehub-rclone-opencd \ --restart=always \ --cap-add SYS_ADMIN \ --device /dev/fuse \ --security-opt apparmor:unconfined \ -e RemotePath="gdmount01:" \ -e MountCommands="--allow-other --uid 1000 --gid 1000 --umask 022 --default-permissions --allow-non-empty --allow-other --buffer-size 32M --vfs-read-chunk-size=32M --vfs-read-chunk-size-limit 2048M --vfs-cache-mode writes --dir-cache-time 96h" \ -v /volume1/docker/rclone/rclone_config:/config \ -v /volume1/mnt/example:/mnt/mediaefs:shared \ -v /volume1/docker/rclone/accounts.0-100:/mnt/accounts.0-100/ \ mumiehub/rclone-mount:latest
2.3. 大部分人第一次操作会返回 docker ID
并伴随一个错误 linux mounts: path xx is mounted on xx but it is not a shared mount
此时需要输入如下指令使挂载点成为共享挂载点 sudo mount --make-shared /volume1
这里的 volume1 是指挂载点所在的盘,我的挂载点建立在 volume1
所以此处就以 volume1
做范例。
2.4. 如过出现 2.3 中的错误,并按照方法已经处理完,先使用 docker rm <2.3中返回的docker ID>
再使用 2.2 中的命令,重新启动 docker 进行挂载。
2.5. 成功挂载后,会简单的返回一个 docker ID
回到 File Station 内,即可在挂载点内看到所挂载团队盘的内容。
最后,千万不要在群晖套件的docker内对这个挂载docker进行操作,大概率会使挂载出现问题,因为群晖套件的docker部分功能实现并不完整。