在 Linux 上使用 Rclone 將 Google Drive 掛載為本地資料夾完整教學 (含 VSCode Remote 授權與開機自啟)
詳細教學如何在 Linux 伺服器上透過 Rclone 與 FUSE 將 Google Drive 掛載為本地硬碟,涵蓋 VSCode Remote 自動轉發授權、Headless 伺服器驗證、最佳快取參數配置、Systemd 自動掛載與 Token 失效疑難排解。
前言
在 Linux 伺服器管理、資料備份或個人開發環境中,本地磁碟空間有限往往是令人困擾的瓶頸。尤其是當伺服器採用容量較小的高速 SSD 時,大量靜態資源、模型權重或是排程備份檔很快就會耗盡硬碟配額。
透過 Rclone 搭配 Linux 的 FUSE (Filesystem in Userspace) 機制,我們能將 Google Drive 等雲端儲存空間無縫掛載為本地資料夾。掛載後,系統中的所有應用程式、排程腳本甚至 Docker 容器,都能像存取本地原生硬碟一樣自由讀寫雲端檔案。
本文將完整統整並升級這套部署流程,無論您使用的是本機 Linux 桌面、純文字無圖形介面伺服器 (Headless Server),或是現代開發者最普遍採用的 VSCode Remote SSH 環境,都能輕鬆掌握最佳配置與開機自動化掛載技巧。
1. 核心套件與技術原理
在動手配置前,理解底層運作機制有助於後續的日常維護與效能調校:
| 套件 / 組件 | 主要用途 | 核心機制與角色說明 |
|---|---|---|
| Rclone | 雲端儲存管理工具 | 被譽為「雲端儲存界的瑞士刀與 rsync」。負責 Google Drive API 溝通、OAuth2 Token 驗證、檔案傳輸及本地虛擬快取 (VFS) 管理。 |
FUSE (fuse3) | 使用者空間檔案系統 | Filesystem in Userspace。允許非核心層級的應用程式建立自訂檔案系統,將一般的檔案讀寫操作轉發為 API 呼叫。 |
fuse.conf | FUSE 全域安全設定檔 | 控制普通使用者是否具備啟用 --allow-other 參數的權限,將掛載資料夾開放給伺服器上的其他帳號或服務存取。 |
| VFS 快取模式 | 本地快取與相容性層 | 由於 Google Drive 本質為物件儲存,無法直接進行隨機讀寫 (Random Access)。Rclone 透過本地磁碟快取,實現如本地硬碟般的讀寫體驗。 |
2. 環境準備與權限設定
在主流的 Linux 發行版(如 Ubuntu、Debian、CentOS、Rocky Linux)上,請先確保系統套件庫為最新狀態,並安裝 fuse3 與必要工具。
步驟 1:安裝 FUSE3 與 Rclone
# Ubuntu / Debian 體系
sudo apt update
sudo apt install -y fuse3 curl
# CentOS / RHEL / Rocky Linux 體系
sudo dnf install -y fuse3 curl
# 透過 Rclone 官方腳本安裝最新版(自動判斷處理器架構)
sudo curl https://rclone.org/install.sh | sudo bash
安裝完成後,可確認版本:
rclone version
步驟 2:開放全域共享權限(關鍵預備步驟)
預設情況下,非 root 一般使用者所掛載的目錄僅能被該使用者本人存取。若要讓 Docker 容器、Nginx、Samba 或系統中的其他服務共用此資料夾,必須在核心設定中開啟權限:
sudo nano /etc/fuse.conf
在檔案中找到 #user_allow_other,將最前面的 # 註解刪除,修改為:
user_allow_other
存檔並關閉編輯器。這項設定允許在掛載指令中使用 --allow-other 參數。
3. Google Drive 連線建立(rclone config)
執行互動式設定精靈建立連線:
rclone config
設定流程步驟分解:
- 輸入
n:建立新連線 (New remote)。 - 輸入連線名稱:例如
gdrive。 - 選擇儲存類型:輸入
drive或輸入 Google Drive 對應的編號。 - Client ID / Secret:
- 初次測試:可直接按 Enter 留空(使用 Rclone 預設的共用 API Key)。
- 長期生產環境建議:強烈建議至 Google Cloud Console 自行建立 OAuth 2.0 憑證並填入專屬的 Client ID 與 Client Secret,可避免共用配額達到速率上限,並避免憑證因測試狀態每 7 天失效。
- Scope(存取權限範圍):輸入
1(取得完整存取權限 Full Access)。 - Service Account:直接按 Enter 留空。
- Advanced Config:輸入
n(暫不需進階設定)。
三大授權情境實戰比較
連線設定進行到 Use web browser to automatically authenticate? 時,請根據您的伺服器連線情境選擇對應的操作方式:
模式 A:有圖形介面 (GUI 桌面環境)
- 若您的 Linux 具備桌面環境與瀏覽器,直接輸入
y。 - 系統會自動喚起瀏覽器,登入您的 Google 帳號並完成授權即可。
模式 B:VSCode Remote SSH 遠端開發(最推薦、最直覺)
若您是使用本機電腦的 VSCode 透過 Remote - SSH 延伸模組連線至遠端 Linux 伺服器:
- 在
Use web browser to automatically authenticate?提示處輸入y。 - VSCode 會自動偵測遠端監聽並完成 53682 通訊埠轉發 (Port Forwarding)。
- 終端機會輸出一行
http://127.0.0.1:53682/auth?...網址,在 VSCode 終端機中點擊該連結(或複製至本機瀏覽器開啟)。 - 於本機瀏覽器完成 Google 帳號授權後,驗證代碼會直接透過轉發的 53682 埠號回傳給遠端伺服器,完全無須手動複製 JSON Token,流程最為滑順!
模式 C:純文字無圖形伺服器 (Standard Headless Server)
若為傳統終端機或 PuTTY/SSH 連線,且無自動埠號轉發:
- 輸入
n。 - 伺服器終端機會顯示一行指令,格式為:
rclone authorize "drive" "xxxxxxxx..." - 在您本機電腦(Windows / macOS,需事先安裝 Rclone)開啟終端機或 PowerShell,貼上並執行該指令。
- 本機瀏覽器會跳出 Google 登入視窗,點擊允許授權後,本機終端機會輸出一整段長 JSON 字串(包含
access_token與refresh_token)。 - 完整複製該段 JSON,貼回遠端伺服器的
config_token>提示處並按下 Enter 即可完成設定。
4. 執行磁碟掛載與最佳參數配置
完成連線建立後,即可建立本地掛載點並掛載 Google Drive:
步驟 1:建立本地掛載點
mkdir -p ~/google-drive
步驟 2:執行掛載指令
rclone mount gdrive: ~/google-drive \
--vfs-cache-mode full \
--allow-other \
--buffer-size 32M \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G \
--daemon
關鍵參數深度解析:
--vfs-cache-mode full(極度推薦): 這是讓雲端資料夾表現得像本機硬碟的關鍵核心。在full模式下,所有讀寫、修改、追加寫入 (Append) 與隨機存取都會先在本地磁碟快取中完成,再由 Rclone 異步同步至雲端。這能徹底解決檔案被其他程式鎖定或寫入不完整的問題,也是讓 Docker 容器掛載運作不可或缺的參數。--allow-other:允許伺服器上其他使用者與服務存取該目錄(需配合先前在/etc/fuse.conf啟用的設定)。--buffer-size 32M:讀取串流時預先載入的記憶體緩衝大小,有助於提高讀取速度。--vfs-read-chunk-size 64M與--vfs-read-chunk-size-limit 1G:動態分塊讀取機制,避免一次下載整個大檔案浪費頻寬,同時確保大檔讀取順暢。--daemon:讓掛載程序脫離終端機並在背景持續運行。
驗證掛載結果與容量查詢
掛載後執行硬碟檢視指令:
df -h
您會看到掛載點已成功出現:
Filesystem Size Used Avail Use% Mounted on
gdrive: 16E 1.2G 16E 1% /home/username/google-drive
關於 16E 虛擬容量的說明:
df -h顯示容量為16E(Exabytes)是 Rclone 的虛擬檔案系統特性,因為雲端物件儲存沒有固定的本機硬碟幾何結構。若要查詢 Google Drive 的真實雲端剩餘空間,請執行專用指令:rclone about gdrive:輸出將清楚呈現真實的已用空間 (Used)、可用空間 (Free) 與總空間 (Total)。
5. 自動化營運:設定 Systemd 開機自動掛載
使用 --daemon 在伺服器重開機後會失效。為了確保服務高可用性,建議建立 Systemd 系統服務進行管理:
步驟 1:建立服務設定檔
sudo nano /etc/systemd/system/rclone-gdrive.service
步驟 2:填入服務設定內容
請將內容中的 your_username 替換為您在 Linux 上的實際使用者名稱:
[Unit]
Description=Rclone Google Drive Mount Service
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
User=your_username
ExecStart=/usr/bin/rclone mount gdrive: /home/your_username/google-drive \
--config=/home/your_username/.config/rclone/rclone.conf \
--vfs-cache-mode full \
--allow-other \
--buffer-size 32M \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G
ExecStop=/bin/fusermount3 -u /home/your_username/google-drive
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=default.target
(注意:在 Systemd 服務中請不要加入 --daemon 參數,因為 Systemd 本身就是行程守護管理者,搭配 Type=notify 能精確掌握掛載就緒狀態。)
步驟 3:啟用並啟動服務
# 重新載入 Systemd 設定
sudo systemctl daemon-reload
# 啟用開機自啟並立即啟動
sudo systemctl enable --now rclone-gdrive
# 檢查運行狀態
sudo systemctl status rclone-gdrive
若看到綠色的 active (running),即代表開機自動掛載已建置完成!
6. 常見疑難排解與維護技巧 (Troubleshooting)
1. Token 過期或失效 (invalid_grant: maybe token expired?)
- 常見原因:Google OAuth2 權限過期,或是您在建立 Google Cloud 應用程式時同意畫面處於「測試中」,導致未通過驗證的使用者 Token 每 7 天便會被 Google 強制吊銷。
- 快速修復方式:
- 執行重新連線指令:
rclone config reconnect gdrive: - 依據終端機提示重新驗證(若使用 VSCode Remote SSH,直接點擊轉發的 53682 網址授權即可)。
- 授權完成後重啟掛載服務:
sudo systemctl restart rclone-gdrive
- 執行重新連線指令:
2. 錯誤:Fatal error: daemon exited with error code 1
- 常見原因:通常是
--allow-other被系統安全原則拒絕,或是目標掛載目錄內部已有檔案。 - 排查步驟:
- 檢查
/etc/fuse.conf中的user_allow_other是否確實取消註解。 - 暫時拿掉
--daemon參數直接在前景執行,終端機會直接噴出詳細的錯誤原因。
- 檢查
3. 錯誤:Directory is not empty
- 常見原因:掛載目標資料夾中已有本機檔案。
- 解法:清空該資料夾,或於掛載參數中加入
--allow-non-empty(但若非必要,建議保持掛載目錄為空以避免檔案遮蔽混淆)。
4. 如何手動強制取消掛載 (Unmount)?
若網路中斷導致掛載點卡死或無法存取:
# 正常卸載
fusermount3 -u ~/google-drive
# 若被程序占用無法卸載,執行延遲強制卸載 (Lazy Unmount)
fusermount3 -uz ~/google-drive
5. 本地磁碟快取空間管理
使用 --vfs-cache-mode full 時,檔案快取預設存放在 ~/.cache/rclone。若本機系統磁碟空間較吃緊,可透過額外參數限制快取上限與有效期限:
--vfs-cache-max-size 10G:將本地最大快取限制在 10GB 以內,超出時自動清理最少存取的快取檔案。--vfs-cache-max-age 24h:超過 24 小時未讀寫的快取檔案自動自本地清除。--cache-dir /mnt/other_disk/rclone:若有另一顆較大的硬碟,可將快取路徑指定過去。
結語
透過 Rclone 與 FUSE 的結合,我們能夠以極低成本將 Google Drive 龐大的雲端空間化為 Linux 伺服器的延伸儲存。搭配合理的 VFS 快取設定與 Systemd 守護行程,不論是資料備份、媒體串流還是日常檔案同步,都能獲得如同本機磁碟般的穩定體驗。
常見問題
Rclone 掛載後執行 df -h 顯示 16E 容量是正常的嗎? +
這是完全正常的現象。16E (Exabytes) 是 Rclone 虛擬檔案系統 (VFS) 預設呈現的佔位容量,因為部分雲端儲存不直接提供準確的剩餘容量報告。若欲查詢 Google Drive 的真實剩餘空間,可執行指令 `rclone about gdrive:`(將 gdrive 替換為您的連線名稱)。
在無圖形介面 (Headless) 伺服器上該如何完成 Google OAuth 授權? +
若使用 VSCode Remote SSH 連線,VSCode 會自動偵測並轉發 53682 埠號,點擊終端機的授權網址即可直接在本地瀏覽器完成登入;若為標準 SSH 終端機,請在連線設定時選擇 n,並在已安裝 Rclone 的本機電腦執行 `rclone authorize` 指令,將產生的 JSON 授權碼複製貼回伺服器。
掛載時出現 Fatal error: daemon exited with error code 1 該如何解決? +
這通常是因為 `--allow-other` 權限被系統核心阻擋,或是目標掛載目錄非空。請檢查 `/etc/fuse.conf` 是否已將 `user_allow_other` 取消註解;若排查困難,可暫時移除 `--daemon` 參數在前景執行以獲取詳細除錯記錄。
遇到 invalid_grant: maybe token expired? 錯誤時該如何處理? +
這是由於 Google OAuth2 Token 過期或 OAuth 同意畫面仍為「測試中」(導致 Token 僅有 7 天有效期限)。您可以執行 `rclone config reconnect gdrive:` 重新連線授權。若要一勞永逸,建議至 Google Cloud Console 申請自訂 Client ID 與 Secret,並將應用程式發布狀態設為正式運作。