跳至主要内容

在檔案系統掛載 R2 儲存體

我的 blog 的圖片使用 Cloudflare R2 來儲存檔案,每次要上傳圖片都得連上 dash.cloudflare.com 讓我覺得很麻煩,而且圖形化接面也沒多好用,這樣會降低我寫 blog 的頻率,所以後來我寫了一個 bash script 腳本放在 /usr/local/bin ,用來自動上傳 webp 到我要的路徑,但這樣又會有打錯路徑的問題,而且我很難查看遠端目前的檔案們。最後我在 ivon 的 blog注意到 Rclone 這個軟體,可以直接把遠端儲存空間掛載到檔案系統。

開始使用 rclone

1. 安裝

sudo -v ; curl https://rclone.org/install.sh | sudo bash

2. 建立 User API 權杖

  • 到 CloudFlare 建立 token

看你要什麼權限就給什麼,我要讀寫(上傳功能)所以選了所有儲存體的系統管理員權限,畢竟我就是系統管理員。

進到下一頁後就會顯示 token ,頁面不要關,下一步要回來複製

3. 寫設定檔

把儲存體的 access key 、secret key、endpoint 都告訴 rclone。下rclone config照著引導完成設定檔。

  • Enter name for new remote. name>
    • 為設定檔命名
  • Option Storage.Choose a number from below, or type in your own value.
    • 選擇連結的儲存體類型,Cloud R2 屬於 S3 ,輸入數字 4
  • Choose your S3 provider.
    • 選擇 S3 提供者,CloudFlare R2 是數字 6
  • Get AWS credentials from runtime
    • Enter AWS credentials in the next step. 輸入剛剛在 CloudFlare 後台拿到的存取金鑰識別碼(access_key_id)、秘密存取金鑰(secret_access_key)和存取端點 endpoint
  • 進階設定
    • 我都按不需要,維持預設

這邊建了一個叫做 cfr2 的設定檔,設定成功就會在頂部出現設定檔的名稱。

$rclone config
Current remotes:

Name Type
==== ====
cfr2 s3

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>

4. 確認設定檔儲存位置

rclone config file

你最好備份這個檔案

5. 創掛載點

我是在 mnt 創一個資料夾 cfr2 當成掛載點,然後把擁有者換成我現在使用的帳號 iach526

sudo mkdir -p /mnt/cfr2
sudo chown iach526:iach526 /mnt/cfr2

6. 測試指令

然後你就可以在終端機測試到底能不能成功掛載了,前面的參數是設定檔的名稱,後面的是掛載點

rclone mount "cfr2:/" "/mnt/cfr2"

如果有就成功,沒有就看 log 除錯

進階玩法-自動掛載

我這樣做兩天就覺得每次要掛載就要開一個終端機執行指令太麻煩了(還不能關掉),我想讓程式在背景自動執行可不可以?可以! systemd 做的到。

寫設定檔開機自動執行

sudo vim /etc/systemd/system/rclone-cfr2.service

建立新檔案然後寫以下內容(你要自己替換使用者名稱和 log 存放的地方)

[Unit]
Description=Rclone Mount for Cloudflare R2 (cfr2)
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/rclone mount cfr2:/ /mnt/cfr2 \
--config=/home/iach526/.config/rclone/rclone.conf \
--vfs-cache-mode writes \
--umask 002 \
--dir-cache-time 1000h \
--log-level INFO \
--log-file /home/iach526/Documents/.log/rclone-cfr2.log
ExecStop=/bin/fusermount -u /mnt/cfr2
Restart=on-failure
RestartSec=10
User=iach526
Group=iach526

[Install]
WantedBy=default.target
備註

--config=/home/iach526/.config/rclone/rclone.conf 這串路徑要在終端打 rclone config file 就會知道你的在哪了

沒有意外的話再執行下面這串指令就會顯示成功了,以後也不需要再手動掛載

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable rclone-cfr2
sudo systemctl start rclone-cfr2