快轉到主要內容

Rclone教學,簡單搞定Linux電腦雲端硬碟同步,支援Google雲端、OneDrive、Dropbox、MEGA

· 民國113年甲辰年
·
切換繁體/簡體
分類   Linux系統 Linux好用軟體 Self-hosting自架
標籤   Rclone Google Drive Nextcloud Amazon Web Services
目錄

想要同步雲端硬碟檔案又不想裝一堆客戶端?

你的雲端硬碟供應商沒有提供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
#

  1. 參照官網指示安裝,像Ubuntu這類非滾動發行版,用套件管理員安裝Rclone可能會裝到舊版,所以建議從官網下載安裝指令稿,取得最新版的執行檔。
sudo -v ; curl https://rclone.org/install.sh | sudo bash
  1. Linux的Rclone設定檔位置用指令rclone config file查看,通常位於~/.config/rclone/rclone.conf

  2. 另外,RClone也可以用Docker部署,參見https://hub.docker.com/r/rclone/rclone

2. 啟動Rclone圖形界面
#

Rclone以前是要用指令操作的,執行rclone config指令依照畫面上的指示操作。官網文件有全部指令的詳細解說。

最近的版本Rclone加入了React寫成的網頁GUI,讓一些基本操作可以用圖形界面完成。Rclone WebUI所做的變更會自動寫入rclone.conf,所以指令和WebUI二者可以交替使用。

  1. 使用以下指令啟動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
  1. 之後使用瀏覽器開啟http://localhost:5572

  2. 終端機關掉後Rclone WebUI就會跟著停止。若你要讓Rclone WebUI作為常駐服務執行,請為目前的使用者新增Systemd服務:

vim ~/.config/systemd/user/rclone-gui.service
  1. 填入啟動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
  1. 然後設定開機自動啟動服務
systemctl --user daemon-reload

systemctl --user enable --now rclone-gui
  1. 查看服務狀態
systemctl --user status rclone-gui

3. Rclone連線到Google雲端硬碟
#

你可以直接在Rclone WebUI管理Google雲端的檔案。

根據Rclone官方文件,如果你直接用Rclone的OAuth ID登入Google雲端,就是跟其他Rclone用戶共享帳號,可能會被限制流量。建議用量大的用戶,手動給自己的Google雲端硬碟申請OAuth ID。

Rclone支援連線到「Google雲端」和「Google相簿」,但是二者是不同的服務,需要分開設定。

  1. Google Cloud Console,點選左上角新增專案

  2. 點選左邊側邊欄→ API程式庫,新增Google Drive API

  3. 回到上一頁,點選左邊側邊欄 → 新增OAuth同意畫面,User Type設定為External

  4. 應用程式資訊設定為rclone

  5. 如圖勾選以下範圍(scope)

  6. 把自己的電子郵件加入測試使用者

  7. 點選左邊側邊欄 → 憑證 → 建立憑證 → 新增OAuth用戶端ID

  8. 之後會得到一組OAuth Client ID和OAuth Client Secret

  9. 在Rclone WebUI的Configs界面新增Google Drive,填寫Client Auth和Client Secret,再登入Google帳號。

  10. 這樣在Rclone WebUI的Browser界面就可以檢視Google雲端檔案了。

4. 將雲端硬碟掛載為本機檔案系統
#

非必要步驟。將雲端硬碟掛載為本機檔案系統,這樣除了WebUI之外,也可以用檔案管理員對雲端檔案進行修改。

掛載指令叫做rclone mount,需注意的是,rclone mount並不會將所有雲端的檔案下載到本機,僅是瀏覽檔案列表而已。除非你將開啟檔案,或者複製到本機的其他目錄,否則檔案不會下載。取消掛載之後,檔案就無法存取了。若要確實將檔案下載到本機,請改用rclone copy指令。

  1. rclone mount功能是透過FUSE實現的,一般使用者不需要Root權限便能掛載。確認Linux系統的FUSE套件版本:
fusermount -V
  1. 新增Google雲端硬碟的掛載點,並將權限設定為目前的使用者(我的使用者為user,屬於user群組)
sudo mkdir -p /run/media/user/GoogleDrive

sudo chown user:user /run/media/user/GoogleDrive
  1. 在Rclone WebUI的Mount界面新增Google雲端,輸入掛載點

  2. 這樣就能夠用Linux的檔案管理員開啟Google雲端的目錄了,檔案直接新增或刪除都行。惟網速影響可能載入速度會慢些。Rclone WebUI程式一停止,這個掛載也會自動失效。

  3. 如果你希望Linux系統自動掛載Google雲端的話,就新增Systemd服務:

vim ~/.config/systemd/user/rclone-mount.service
  1. 填入Rclone掛載Google雲端的指令。注意ExecStart=這行,從cat ~/.config/rclone/rclone.conf指令輸出的結果可以得知,Rclone WebUI自動新增的設定檔應該叫做GoogleGoogleDrive,所以這裡讀取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
  1. 設定開機自動啟動服務
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控制。

  1. 請看下面的指令,這是將本機的目錄/home/user/Documents上傳到Google雲端的/Backup目錄。
rclone copy -v "/home/user/Documents" "GoogleDrive:/Backup"

也可以將二者順序反過來,變成將雲端目錄下載到本機目錄。

rclone copy -v "GoogleDrive:/Backup" "/home/user/Documents"
  1. rclone copy是複製一個目錄下的「全部內容」,假設Documents下有複數個檔案和目錄,那麼上傳到Backup的就是那些檔案,目錄結構亦會保留,但不包含Documents這個目錄。

  2. 為目前使用者新增Systemd Unit

vim ~/.config/systemd/user/rclone-backup.service
  1. 填入以下內容,ExecStart=這行填入上傳檔案的指令。
[Unit]
Description=Rclone backup

[Service]
ExecStart=/usr/bin/rclone copy -v "/home/user/Documents" "GoogleDrive:/Backup"

[Install]
WantedBy=multi-user.target
  1. 再新增Timer
vim ~/.config/systemd/user/rclone-backup.timer
  1. 設定為每一小時執行一次
[Unit]
Description=Rclone backup

[Timer]
OnUnitActiveSec=1h
Unit=rclone-backup.service

[Install]
WantedBy=multi-user.target
  1. 啟用服務
systemctl --user daemon-reload

systemctl --user enable --now rclone-backup.timer

參考資料
#

相關文章

透過Flatpak跑Fcitx5,安裝Linux的中文輸入法
分類   Linux系統 Linux好用軟體
標籤   Fcitx Flatpak Input Method
Sunshine:Linux版Moonlight教學,自架免費雲端串流遊戲服務+遠端桌面
分類   Linux系統 Self-hosting自架 Linux玩遊戲
標籤   Moonlight Cloud Gaming Remote Desktop Steam Linux
Gluetun:讓Docker容器走VPN連線,沒網路就斷線,使用教學
分類   Linux系統 Self-hosting自架
標籤   Docker VPN Torrent

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。