想要同步雲端硬碟檔案又不想裝一堆客戶端?
你的雲端硬碟供應商沒有提供Linux版桌面客戶端嗎?
Rclone一個工具搞定!
Rclone是受Rsync所啟發的軟體,開發者Nick Craig-Wood稱其為"rsync for cloud storage"

Rclone特色功能如下:
- 比Rsync效能更好,加入多執行緒支援
- 開源軟體,不會蒐集使用者資料
- 跨平台支援Linux、Windows、macOS
- 使用靈活,可以用純文字指令操作,也有網頁圖形介面
- 支援許多雲端硬碟,例如Google Drive、OneDrive、iCloud、Dropbox、pCloud、MEGA、NextCloud、Amazon S3、Backblaze B2等等。
- 因為能連線到多個雲端硬碟,所以能在不同雲端之間同步檔案
- 支援本機加密後再上傳檔案
- 透過FUSE掛載雲端到到本機,直接修改遠端檔案。
- 支援掛載遠端FTP、WebDAV伺服器、檔案系統,當作Rsync備份檔案之用。
本文Ivon示範如何在Linux安裝Rclone,以Google雲端硬碟為例子,示範Rclone的各種用法。
其他家雲端的操作概念大同小異,都是將雲端硬碟的連線方式寫到Rclone設定檔,然後取得授權。有的雲端硬碟只要依照Rclone的指示,登入帳號取得授權或API權杖即可。而Google Drive需要建立OAuth ID才能讓Rclone存取,比較麻煩一些。
1. 安裝Rclone#
- 參照官網指示安裝,像Ubuntu這類非滾動發行版,用套件管理員安裝Rclone可能會裝到舊版,所以建議從官網下載安裝指令稿,取得最新版的執行檔。
sudo -v ; curl https://rclone.org/install.sh | sudo bash
Linux的Rclone設定檔位置用指令
rclone config file
查看,通常位於~/.config/rclone/rclone.conf
另外,RClone也可以用Docker部署,參見https://hub.docker.com/r/rclone/rclone
2. 啟動Rclone圖形界面#
Rclone以前是要用指令操作的,執行rclone config
指令依照畫面上的指示操作。官網文件有全部指令的詳細解說。
最近的版本Rclone加入了React寫成的網頁GUI,讓一些基本操作可以用圖形界面完成。Rclone WebUI所做的變更會自動寫入rclone.conf
,所以指令和WebUI二者可以交替使用。
- 使用以下指令啟動WebUI,rc-user設定帳號為
admin
,rc-pass設定密碼為password
。rc-addr後面參數接的是IP位址,localhost
就是只有本機能存取Rclone WebUI,0.0.0.0
則是開放遠端連線。
rclone rcd --rc-web-gui --rc-user=admin --rc-pass=password --rc-addr localhost:5572 --rc-web-gui-no-open-browser
之後使用瀏覽器開啟
http://localhost:5572
。終端機關掉後Rclone WebUI就會跟著停止。若你要讓Rclone WebUI作為常駐服務執行,請為目前的使用者新增Systemd服務:
vim ~/.config/systemd/user/rclone-gui.service
- 填入啟動WebUI的指令
[Unit]
Description=rclone GUI
After=networking.service
[Service]
Type=simple
ExecStart=rclone rcd --rc-web-gui --rc-user=admin --rc-pass=password --rc-addr localhost:5572 --rc-web-gui-no-open-browser
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
- 然後設定開機自動啟動服務
systemctl --user daemon-reload
systemctl --user enable --now rclone-gui
- 查看服務狀態
systemctl --user status rclone-gui
3. Rclone連線到Google雲端硬碟#
你可以直接在Rclone WebUI管理Google雲端的檔案。
根據Rclone官方文件,如果你直接用Rclone的OAuth ID登入Google雲端,就是跟其他Rclone用戶共享帳號,可能會被限制流量。建議用量大的用戶,手動給自己的Google雲端硬碟申請OAuth ID。
Rclone支援連線到「Google雲端」和「Google相簿」,但是二者是不同的服務,需要分開設定。
到Google Cloud Console,點選左上角新增專案
點選左邊側邊欄→ API程式庫,新增Google Drive API
回到上一頁,點選左邊側邊欄 → 新增OAuth同意畫面,User Type設定為External
應用程式資訊設定為rclone
如圖勾選以下範圍(scope)
把自己的電子郵件加入測試使用者
點選左邊側邊欄 → 憑證 → 建立憑證 → 新增OAuth用戶端ID
之後會得到一組OAuth Client ID和OAuth Client Secret
在Rclone WebUI的Configs界面新增Google Drive,填寫Client Auth和Client Secret,再登入Google帳號。
這樣在Rclone WebUI的Browser界面就可以檢視Google雲端檔案了。
4. 將雲端硬碟掛載為本機檔案系統#
非必要步驟。將雲端硬碟掛載為本機檔案系統,這樣除了WebUI之外,也可以用檔案管理員對雲端檔案進行修改。
掛載指令叫做rclone mount,需注意的是,rclone mount並不會將所有雲端的檔案下載到本機,僅是瀏覽檔案列表而已。除非你將開啟檔案,或者複製到本機的其他目錄,否則檔案不會下載。取消掛載之後,檔案就無法存取了。若要確實將檔案下載到本機,請改用rclone copy指令。
- rclone mount功能是透過FUSE實現的,一般使用者不需要Root權限便能掛載。確認Linux系統的FUSE套件版本:
fusermount -V
- 新增Google雲端硬碟的掛載點,並將權限設定為目前的使用者(我的使用者為
user
,屬於user
群組)
sudo mkdir -p /run/media/user/GoogleDrive
sudo chown user:user /run/media/user/GoogleDrive
在Rclone WebUI的Mount界面新增Google雲端,輸入掛載點
這樣就能夠用Linux的檔案管理員開啟Google雲端的目錄了,檔案直接新增或刪除都行。惟網速影響可能載入速度會慢些。Rclone WebUI程式一停止,這個掛載也會自動失效。
如果你希望Linux系統自動掛載Google雲端的話,就新增Systemd服務:
vim ~/.config/systemd/user/rclone-mount.service
- 填入Rclone掛載Google雲端的指令。注意
ExecStart=
這行,從cat ~/.config/rclone/rclone.conf
指令輸出的結果可以得知,Rclone WebUI自動新增的設定檔應該叫做Google
或GoogleDrive
,所以這裡讀取Google的設定檔,並將Google雲端的根目錄掛載到/run/media/user/GoogleDrive
。最後ExecStop=
設定服務停止後自動取消掛載Google雲端。
[Unit]
Description=Rclone mount service
After=network.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/rclone mount "Google:/" "/run/media/user/GoogleDrive"
ExecStop=/usr/bin/fusermount -u /run/media/user/GoogleDrive
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
- 設定開機自動啟動服務
systemctl --user daemon-reload
systemctl --user enable --now rclone-mount
5. 排程備份本機目錄到Google雲端#
如果要自動定期將某個目錄備份到雲端呢?rclone mount有點太慢了,此時就得使用rclone copy指令。
Rclone提供rclone copy以及rclone sync兩種指令,copy指的是上傳檔案,不刪除多餘檔案;sync則是讓遠端與本機目錄的檔案同步,有多餘的檔案會刪除。
所以我們使用copy上傳檔案,比較不會有誤刪檔案的風險。至於排程備份部份,我使用Systemd Timer控制。
- 請看下面的指令,這是將本機的目錄
/home/user/Documents
上傳到Google雲端的/Backup
目錄。
rclone copy -v "/home/user/Documents" "GoogleDrive:/Backup"
也可以將二者順序反過來,變成將雲端目錄下載到本機目錄。
rclone copy -v "GoogleDrive:/Backup" "/home/user/Documents"
rclone copy是複製一個目錄下的「全部內容」,假設
Documents
下有複數個檔案和目錄,那麼上傳到Backup
的就是那些檔案,目錄結構亦會保留,但不包含Documents
這個目錄。為目前使用者新增Systemd Unit
vim ~/.config/systemd/user/rclone-backup.service
- 填入以下內容,
ExecStart=
這行填入上傳檔案的指令。
[Unit]
Description=Rclone backup
[Service]
ExecStart=/usr/bin/rclone copy -v "/home/user/Documents" "GoogleDrive:/Backup"
[Install]
WantedBy=multi-user.target
- 再新增Timer
vim ~/.config/systemd/user/rclone-backup.timer
- 設定為每一小時執行一次
[Unit]
Description=Rclone backup
[Timer]
OnUnitActiveSec=1h
Unit=rclone-backup.service
[Install]
WantedBy=multi-user.target
- 啟用服務
systemctl --user daemon-reload
systemctl --user enable --now rclone-backup.timer