想要同步雲端硬碟檔案又不想裝一堆客戶端?
你的雲端硬碟供應商沒有提供Linux版桌面客戶端嗎?
Rclone一個工具搞定!
Rclone是受Rsync所啟發的軟體,開發者Nick Craig-Wood稱其為"rsync for cloud storage"
Rclone特色功能如下:
- 比Rsync效能更好,加入多執行緒支援
- 開源軟體,不會蒐集使用者資料
- 跨平台支援Linux/Windows/macOS
- 使用靈活,可以用純文字指令操作,也有網頁圖形介面
- 支援許多雲端硬碟,例如Google Drive、OneDrive、Dropbox、pCloud、MEGA、NextCloud、Amazon S3、Backblaze B2等等。
- 因為能連線到多個雲端硬碟,所以能在不同雲端之間同步檔案
- 支援本機加密後再上傳檔案
- 透過FUSE掛載雲端到到本機,直接修改遠端檔案。
- 支援掛載遠端FTP、WebDAV伺服器、檔案系統,當作Rsync備份檔案之用。
本文Ivon示範如何在Linux安裝rclone,討論如何連線到Google雲端硬碟,並將其掛載到本機硬碟。最後介紹rclone排程備份的作法。
其他家雲端的操作概念大同小異。
1. 安裝Rclone#
- 參照 安裝指示,x86_64架構的Linux直接下載最新版的執行檔(如果用套件管理員安裝可能會裝到舊版)
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone
sudo mkdir -p /usr/local/share/man/man1
sudo cp rclone.1 /usr/local/share/man/man1/
sudo mandb
- Linux設定檔位置用指令
rclone config file
查看,通常位於~/.config/rclone/rclone.conf
另外,RClone也可以用Docker部署,參見 https://hub.docker.com/r/rclone/rclone
2. 啟動Rclone圖形界面#
Rclone最近的版本加入了React寫成的網頁,讓一些基本操作可以用圖形界面完成。
WebUI所做的變更會自動寫入rclone.conf
,所以指令和WebUI二者可以交替使用。
使用以下指令啟動WebUI,設定帳號為admin,密碼為password
rclone rcd --rc-web-gui --rc-user=admin --rc-pass=password --rc-addr localhost:5572
之後使用瀏覽器開啟http://localhost:5572
。
3. 連線到Google雲端硬碟#
你可以直接在Rclone WebUI管理Google雲端的檔案。
根據 Rclone官方文件,如果你直接用RClone的OAuth ID登入Google雲端,就是跟其他RClone用戶共享帳號,可能會被限制流量。建議用量大的用戶,手動給自己的Google雲端硬碟申請OAuth ID。
到 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. 掛載Google雲端硬碟到本機#
讓Google雲端可以用Linux檔案管理員存取。
- Rclone的這個功能是透過FUSE實現的,確認Linux的FUSE套件版本:
fusermount -V
- 新增Google雲端硬碟的掛載點,並將權限設定為目前的使用者(我的使用者為
user
,屬於user
群組)
sudo mkdir /run/media/user/GoogleDrive
sudo chown user:user /run/media/user/GoogleDrive
在Rclone WebUI的Mount界面新增Google Drive,輸入掛載點
這樣就能夠用Linux的檔案管理員開啟Google雲端的目錄了,直接新增檔案。惟網速影響可能載入速度會慢些。
5. 排程備份本機目錄到Google雲端#
如果要自動定期將某個目錄備份到雲端呢?FUSE有點太慢了,此時就得使用Rclone指令。
參見 Rclone Commands,Rclone提供 rclone copy以及 rclone sync兩種指令,copy指的是上傳檔案,不刪除多餘檔案;sync則是讓遠端與本機目錄的檔案同步,有多餘的檔案會刪除。
所以我們使用copy上傳檔案。至於排程備份部份,我使用Systemd Timer。
- 下面的指令,是將本機的目錄
/hom/user/Documents
上傳到Google雲端的/Backup
目錄。
rclone copy -v "/home/user/Documents" "GoogleDrive:/Backup"
rclone copy是複製一個目錄下的全部內容,假設
Documents
下有複數個檔案和目錄,那麼上傳到Backup
的就是那些檔案,目錄結構亦會保留,但不包含Documents
這個目錄。為目前使用者新增Systemd Unit
vim ~/.config/systemd/user/rclonebackup.service
- 填入以下內容
[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/rclonebackup.timer
- 設定為每一小時執行一次
[Unit]
Description=Rclone backup
[Timer]
OnUnitActiveSec=1h
Unit=rclonebackup.service
[Install]
WantedBy=multi-user.target
- 啟用服務
systemctl --user daemon-reload
systemctl --user enable --now rclonebackup.timer