前言

大概4个月前挂载过谷歌盘到vps,当时在ai的帮助下一次成功。

但是今天挂载谷歌云盘一直无法配置成功。

升级rclone(之前版本1.45)后得以解决。

旧版本rclone在登陆谷歌并授权的时候,返回的链接输入到浏览器出现如下报错:

请求无效

ssh隧道访问方法,也是授权失败

授权失败

下面详细分享下挂载步骤

详细教程

安装rclone

linux

先查看 rclone 版本(如果已经安装过):

1
rclone version

返回如下

1
2
3
4
5
root@racknerd-e4b009:~# rclone version
rclone v1.45
- os/arch: linux/amd64
- go version: go1.11.6
root@racknerd-e4b009:~#

如果还没安装过,使用如下命令安装最新版本的 rclone:

1
curl https://rclone.org/install.sh | sudo bash

再次查看版本

windows

下载 win 版本 rclone

安装必要依赖:

linux

1
sudo apt install fuse3

windows

安装 WinFsp,WinFsp 提供 FUSE 支持

下载地址:
https://github.com/winfsp/winfsp/releases

本文统一命名

为了避免后面命令看着乱,本文统一使用下面这套名字。照着复制命令时,只要记住这几个名字前后一致就行:

用途 统一名称
rclone 远程配置名 gdrive
Linux 挂载目录 /mnt/gdrive
systemd 服务文件 /etc/systemd/system/rclone-gdrive.service
systemd 服务名 rclone-gdrive.service
Windows 临时盘符 O:
Windows 缓存目录 P:\rclone-cache

如果你想换名字,下面所有命令里的 gdrive/mnt/gdriverclone-gdrive.service 要一起改,不要只改其中一个。

添加配置

1
rclone config
  1. 输入 n ,给远程配置命名为 gdrive 然后回车。
    新建远程配置并命名

  2. 找到 Google Drive 选项,存储类型输入 Google Drive 前的序号回车。20不要照抄,不同版本rclone会不一样。
    输入googledrive的存储序号

  3. client_id 和 client_secret 默认回车

  4. scope 输入 1,获取完整权限
    输入1

  5. Edit advanced config,输入 n

  6. Use web browser to automatically authenticate rclone with remote?输入 n

  7. 下载 win 版本 rclone,下载后在 rclone.exe 所在目录进入 cmd
    进入cmd

  8. win 端 cmd 执行 类似 rclone authorize “drive” “eyJzY29wZSI6ImRyagZlIn1”(vps 第 6 步后会出现类似这样的命令)win端输入命令

  9. 执行后会自动打开浏览器,登陆谷歌账号,同意授权授权成功

  10. 授权成功后,回到 cmd 把返回的 token 复制粘贴到 vps 终端回车复制token

粘贴token

  1. Team Drive,输入 no

  2. Configuration complete.输入 y

挂载云盘

linux 一键挂载

完成 rclone config 后,先确认远程配置名存在:

1
rclone listremotes

如果返回里能看到 gdrive:,就执行下面这一段一键脚本。它会自动创建 /mnt/gdrive,写入 /etc/systemd/system/rclone-gdrive.service,并启动开机自启。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
REMOTE_NAME="gdrive"
MOUNT_DIR="/mnt/gdrive"
SERVICE_NAME="rclone-gdrive"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
RCLONE_BIN="$(command -v rclone)"
FUSERMOUNT_BIN="$(command -v fusermount3 || command -v fusermount)"
RCLONE_CONFIG="$(rclone config file | tail -n 1)"

sudo mkdir -p "$MOUNT_DIR"

sudo tee "$SERVICE_FILE" >/dev/null <<EOF
[Unit]
Description=Rclone Mount ${REMOTE_NAME} to ${MOUNT_DIR}
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=${RCLONE_BIN} mount ${REMOTE_NAME}: ${MOUNT_DIR} \\
--config ${RCLONE_CONFIG} \\
--vfs-cache-mode writes \\
--allow-other \\
--dir-cache-time 12h \\
--poll-interval 15s \\
--umask 002
ExecStop=${FUSERMOUNT_BIN} -uz ${MOUNT_DIR}
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now "${SERVICE_NAME}.service"
sudo systemctl status "${SERVICE_NAME}.service" --no-pager

后续管理只记住一个服务名:rclone-gdrive.service

1
2
3
sudo systemctl restart rclone-gdrive.service
sudo systemctl status rclone-gdrive.service -l --no-pager
sudo journalctl -u rclone-gdrive.service -n 200 --no-pager

卸载挂载点:

1
2
sudo systemctl stop rclone-gdrive.service
sudo fusermount3 -uz /mnt/gdrive 2>/dev/null || sudo umount -l /mnt/gdrive

windows

win临时挂载(退出cmd就会掉)

1
rclone mount gdrive: O: --vfs-cache-mode full --network-mode --cache-dir "P:\rclone-cache"

注意:改缓存路径,改成剩余空间足够的盘

文件传输

win端本地文件上传到google盘,如果使用拖拽文件的方式传输文件,win资源管理器显示的速度不是实际上传到挂载盘的速度,是写入到缓存目录的速度。因此win资源管理器结束迁移也不要关闭终端,此时缓存目录的文件还在上传到网盘。

后续同步可以使用如下命令:

1
rclone sync "P:\书籍" gdrive:/calibre/books --local-encoding None --progress --transfers 16 --checkers 32 --retries 5 --low-level-retries 10 --timeout 1h --fast-list -v

需要特别注意的是,对于google盘,rclone 会把文件名中文标点符号全角自动转为半角—local-encoding None参数可以避免文件名中的全角符号被修改成半角,避免数据库索引出现问题导致找不到文件。

增量同步,只传新增文件,不做逐个校验:

1
rclone copy "P:\书籍" gdrive:/calibre/books --local-encoding None --ignore-existing --progress --transfers 16 --checkers 32 --retries 5 --low-level-retries 10 --timeout 1h --fast-list -v

维护命令

1
2
3
4
5
6
7
8
sudo systemctl stop rclone-gdrive.service
sudo fusermount3 -uz /mnt/gdrive 2>/dev/null || sudo umount -l /mnt/gdrive

sudo systemctl daemon-reload
sudo systemctl start rclone-gdrive.service

sudo systemctl status rclone-gdrive.service -l --no-pager
sudo journalctl -u rclone-gdrive.service -n 200 --no-pager