使用 Rclone 在 Linux 掛載雲端硬碟

前言

Rclone 是一款可以將各種雲端硬碟掛載或同步到你 Linux 上的程式,我覺得相當方便。你可以直接在 Linux 上使用你常用的命令去變更在雲端上的內容。

這裡將會讓 Rclone 使用「掛載」的模式連線到 Dropbox 作為本篇的範例。

下載安裝

我們需要前往 https://rclone.org/downloads/ 來下載目前最新的版本,依照本文撰寫的時候,最新版為 v1.66.0,且我會在 Debian 上運作他,所以我使用 wget 下載 deb 版本。

sudo wget https://downloads.rclone.org/v1.66.0/rclone-v1.66.0-linux-amd64.deb

使用 dpkg 安裝他。

sudo dpkg -i rclone-v1.66.0-linux-amd64.deb

連結到雲端硬碟

接著,我們需要將其連結到雲端硬碟,他支援的非常多,從常見的 Google Drive、Dropbox、Microsoft OneDrive,到儲存桶類型的 Amazon S3、Backblaze B2 都可以使用。這裡我們使用 Dropbox 作為範例。

開始設定 config。

rclone config

接著他會說他找不到設定檔,因為我們沒設定過嘛。所以我們輸入 n 來建立一個新的。

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

接著他會尋問名字,這就是看你的喜好了,我直接叫他 dropbox

Enter name for new remote.
name> dropbox

接著他會問你要使用哪個雲端平台,由於選項非常多,文章只節錄我將使用的 Dropbox,我這裡就輸入 12

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
12 / Dropbox
   \ (dropbox)
Storage> 12

接著他會詢問你 client_id 以及 client_secret,這個我們可以都先留空,稍後使用 Oauth 的方式接上。最後面的 Edit advanced config 選擇 n 即可。

Option client_id.
OAuth Client Id.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_id> 

Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_secret> 

Edit advanced config?
y) Yes
n) No (default)
y/n> n

授權

接著他會開始詢問你如何開始授權,就像是下方這樣:

Use web browser to automatically authenticate rclone with remote?
 * Say Y if the machine running rclone has a web browser you can use
 * Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.

y) Yes (default)
n) No
y/n> 

這兩種方式的差別,就是看你要從本機授權或是遠端授權。但這裡的本機授權就只能從 127.0.0.1 連入,不能從外部,所以只推薦具有 GUI 介面的 Linux 使用。但如果主機是 Server 版本,沒有 GUI,則推薦使用遠端授權。

本機授權

使用本機的方式就最簡單,他會給你一個網址,使用瀏覽器點一點就好,沒有難度。

2024/05/17 09:17:52 NOTICE: If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=blablablablabla
2024/05/17 09:17:52 NOTICE: Log in and authorize rclone for access
2024/05/17 09:17:52 NOTICE: Waiting for code...

遠端授權

就如前面說的,如果你是 Server 版本的 Linux,我們可能就需要使用遠端的方式來授權,這裡遠端的部分會使用 Windows 來操作。

在選擇 n 之後會出現類似於以下的內容。我們需要將中間的命令複製起來,等等會用到。

Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
        rclone authorize "dropbox" "blablablablablabla"
Then paste the result.
Enter a value.
config_token> 

我們一樣到 https://rclone.org/downloads/ 下載 Windows 版本並解壓縮他。之後不要直接點 exe 檔兩下,因為他是使用命令列來運作的,所以我們需要 cmd 來跟他溝通,將剛剛他給我們的命令貼上並執行。

001.jpg

接著他會彈出瀏覽器,要我們授權 Rclone,就直接點授權就好。

002.jpg

授權後,再次查看你的 cmd,你會發現多出了一串字,我們將他複製貼回 Linux 上並 enter 就完成囉。最後他會問你以下問題。

Keep this "dropbox" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

那當然是 OK 啦,選擇 y。最後到選單的時候,使用 q 來離開就可以了。

開始掛載

依照你的喜好,我們需要建立一個資料夾,這裡的內容之後將會連結到雲端硬碟上,我這邊會將他建立於 /var/rclone/ 底下名為 dropbox

sudo mkdir -p /var/rclone/dropbox/

接著使用 Rclone 的命令,將他掛載起來。(注意:命令執行後,他會卡在那邊是正常的,所以你可以用個 Screen 之類的東西把他丟到背景)

sudo rclone mount dropbox: /var/rclone/dropbox/

而這裡這樣執行的話,會只有具有 sudo 命令的使用者才能訪問,若要允許別人也能訪問,則要在結尾添加 --allow-other

sudo rclone mount dropbox: /var/rclone/dropbox/ --allow-other

接著就可以到 /var/rclone/dropbox/ 底下使用 ls -al,看看有沒有列出東西囉!

root@rclone:/var/rclone/dropbox# ls -al
total 5
drwxr-xr-x  1 root root    0 May 17 09:46 .
drwxr-xr-x 12 root root 4096 May 17 09:46 ..
-rw-r--r--  1 root root    4 May 17 09:46 test.txt
root@rclone:/var/rclone/dropbox# cat test.txt 
123
root@rclone:/var/rclone/dropbox# 

像我在雲端硬碟上只放了一個 test.txt,所以我們可以看到他並將他印出來,所有操作都能使用 Linux 那樣般的直覺。

包成服務

我們目前的方式是直接調用 rclone 命令或是使用 screen 把他丟到背景執行。不過我不覺得這是一個好的方式,所以我們把他包成服務。

以下內容我是參考了這篇 Github Gist 並改寫了一點,可以點連結回到那邊參考。

在我們完成上面的步驟後,我們在 /etc/systemd/system 建立一個檔案 [email protected]

sudo vim /etc/systemd/system/[email protected]

貼上以下內容:

[Unit]
Description=rclone: Remote FUSE filesystem for cloud storage config %i
Documentation=man:rclone(1)
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
ExecStartPre=-/usr/bin/mkdir -p /var/rclone/%i
ExecStart= \
  /usr/bin/rclone mount \
    --config=%h/.config/rclone/rclone.conf \
    --vfs-cache-mode writes \
    --vfs-cache-max-size 100M \
    --log-level INFO \
    --log-file /tmp/rclone-%i.log \
    --umask 022 \
    --allow-other \
    %i: /var/rclone/%i
ExecStop=/bin/fusermount -u /var/rclone/%i

[Install]
WantedBy=default.target

存檔後,使用 systemctl daemon-reload 讓系統重新讀取。接著我們就可以用下面的方式來控制他啦。

sudo systemctl start rclone@dropbox    #啟動服務
sudo systemctl restart rclone@dropbox  #重新啟動服務
sudo systemctl stop rclone@dropbox     #停止服務
sudo systemctl enable rclone@dropbox   #開機自動執行此服務
sudo systemctl disable rclone@dropbox  #開機不執行此服務(預設)

在以上命令中,dropbox 就是我們在 rclone 中替他取的名字。而這項服務就會將掛載的位置放在 /var/rclone/dropbox 中。

常見問題

以下是我在使用 Rclone 的時候有遇到的問題,在這裡列出來給各位做為參考。

找不到 fusermount3

在掛載的過程中,你可能會遇到這樣的狀況:

Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount3": executable file not found in $PATH

這是因為你的 Linux 中缺少了 fuse3 這個套件,把他安裝起來就好囉。

sudo apt-get install -y fuse3

資料夾存取被拒

我有一次在中斷掛載的連線後,發現這個資料夾就存取被拒了。經過上網查才知道是因為沒有斷乾淨,使用以下命令就解決了我的問題。

fusermount -u /var/dropbox