如何安全地將 Nextcloud 資料夾移轉到外部硬碟

將 Nextcloud 資料資料夾移至更大的外部硬碟聽起來像是簡單的複製編輯操作,但實際上並非如此。關鍵在於 Nextcloud 透過磁碟上的絕對路徑來識別本機儲存。如果路徑被隨意更改,伺服器可能會將這些檔案視為不同的儲存位置,導致檔案記錄重複或孤立、元資料損壞或共享關係遺失。

因此,對於現有安裝而言,最安全實用的方法是保持 Nextcloud 的資料目錄路徑不變,同時將實際資料位元組移至外部磁碟。 Nextcloud 目前的管理手冊明確建議先移動目錄,然後從原始路徑建立指向新位置的符號連結。手冊還警告說,直接更改目錄datadirectory路徑需要修改資料庫,因此不屬於受支援的遷移方法。請參閱Nextcloud 資料目錄故障排除指南。

開始之前:哪些內容已驗證,哪些內容取決於您的設定?

問題實際答案
我可以自己編輯datadirectory嗎config.php?單獨這樣做並不安全。 Nextcloud 文件指出,更改本機儲存的絕對路徑可能會破壞資料庫關係。建議使用符號連結來保留原始路徑。
我需要完整備份嗎?是的。 Nextcloud 的備份文件包含了配置、資料目錄、資料庫以及相關的自訂應用程式/主題資料。不要將舊磁碟作為唯一的回滾備份。
外接硬碟必須是 ext4 檔案系統嗎?本流程並未強制要求使用任何特定的檔案系統。以下範例使用 ext4 檔案系統,因為其所有權和權限行為在 Linux 系統中較為簡單明了。其他檔案系統可能需要不同的掛載選項。
files:scan --all我之後要跑步嗎?通常不用於保留路徑的移動操作。僅在文件快取中實際缺少文件,或文件複製到 Nextcloud 外部的資料樹中需要立即重新掃描時才使用此功能。
USB硬碟和內建硬碟一樣可靠嗎?這取決於硬碟盒、線材、電源、檔案系統和主機。可移動硬碟不可用會帶來可用性風險,因此請確保掛載點持久化,並在啟動 Nextcloud 之前進行驗證。

1. 將外部驅動器掛載到穩定的路徑

首先確定設備和檔案系統。在 Linux 系統中,可以使用 `fstab` 和 `fstab` 等指令lsblk -f顯示blkid檔案系統的 UUID。避免使用類似 `/dev/fstab` 這樣的裝置名稱來建立永久配置/dev/sdb1;Linux 裝置名稱可能會在新增硬體或偵測順序變更時變更。 Linux fstab 手冊建議使用 UUID 或 LABEL 識別碼來設定永久掛載點。

lsblk -f
sudo blkid /dev/sdb1
sudo mkdir -p /mnt/nextcloud-data-storage

新增一個合適的條目/etc/fstab。將範例中的 UUID 和檔案系統類型替換為您自己磁碟上的值:

UUID=YOUR-FILESYSTEM-UUID  /mnt/nextcloud-data-storage  ext4  defaults  0  2

然後先測試掛載點,再進行 Nextcloud 的相關操作:

sudo mount -a
findmnt /mnt/nextcloud-data-storage
df -h /mnt/nextcloud-data-storage
Linux 終端機顯示了 lsblk、blkid、fstab UUID 條目、mount -a 和 findmnt 指令對外部 Nextcloud 磁碟機的執行結果。

在移動任何 Nextcloud 檔案之前,請透過 UUID 驗證外部磁碟並確認其掛載點。

常見誤解:目錄名稱/mnt/nextcloud-data-storage並不能證明磁碟已掛載到該位置。如果磁碟機不存在,掛載點目錄仍然可能存在於系統磁碟上。解決方法:每次測試遷移以及重新啟動後都應使用`git log`findmnt或`git log` 指令。mountpoint

2.備份Nextcloud並停止寫入

Nextcloud 目前的備份指南指出,可還原的備份包含資料目錄、配置、資料庫以及其他部署特定的內容,例如自訂應用程式和主題。請查閱Nextcloud 官方備份文檔,並確保備份儲存在您即將重新分割或重新利用的磁碟機之外的其他位置。

接下來,從 Nextcloud 安裝目錄啟用維護模式。在 Debian 和 Ubuntu 系統中,Web 伺服器帳號通常為www-data:

cd /var/www/nextcloud
sudo -E -u www-data php occ maintenance:mode --on

遷移指南還指出,遷移期間不應執行任何定時任務,並建議在資料遷移期間停止 Web/應用程式伺服器。具體操作方法取決於部署方式:Apache、Nginx + PHP-FPM、Docker Compose、Snap、AIO 和 Kubernetes 的服務邊界各不相同。

操作:停用 Nextcloud 定時任務或停止相關的定時任務服務,然後在最終複製之前停止 Web/應用程式服務。如果資料集非常大,可以在網站在線時預先將資料寫入外部磁碟,然後進入維護模式,停止寫入進程,並執行最終rsync複製以捕獲變更。

3. 複製整個資料目錄,包括隱藏文件

不要只複製使用者資料夾。資料目錄還包含隱藏文件,例如.ncdata應用程式資料等,這些資料也屬於儲存範圍。 Nextcloud 在其移動過程中會明確指出哪些是隱藏文件/點文件。

假設目前目錄為 `<directory>`,/var/www/nextcloud/data外部磁碟掛載點為 `<external disk>` /mnt/nextcloud-data-storage。建立目標目錄並複製該目錄:

sudo mkdir -p /mnt/nextcloud-data-storage/data
sudo rsync -Aax --info=progress2   /var/www/nextcloud/data/   /mnt/nextcloud-data-storage/data/

Nextcloud 還原文件rsync -Aax以保留目錄樹和元資料為例進行說明。對於非常大的安裝,請在所有寫入器停止後執行第二次恢復,並檢查輸出結果。如果您的來源使用了 ACL、擴充屬性、特殊檔案系統或容器掛載存儲,則所需的特定選項可能會有所不同。

終端機顯示 Nextcloud 已進入維護模式,cron 任務已停止,rsync 正在將包括 .ncdata 在內的整個資料目錄複製到外部磁碟機。

停止後台寫入並複製完整的資料樹,包括隱藏的 Nextcloud 元資料檔。

常見誤解:複製完成後就意味著遷移結束了。並非如此。 Nextcloud 仍然需要預期的路徑,並且 HTTP 用戶必須能夠存取並寫入新位置。建議:在切換路徑之前,請驗證檔案數量或校驗和,並在新儲存裝置通過測試之前保持來源目錄完整。

4. 使用符號連結保留原始資料路徑

這是關鍵的安全措施。假設 Nextcloud 目前使用:

'datadirectory' => '/var/www/nextcloud/data',

請勿變更建議的保留路徑遷移中的該值。而是將舊目錄保留為回滾副本,並將其替換為指向外部磁碟機的符號連結:

sudo mv /var/www/nextcloud/data /var/www/nextcloud/data.old
sudo ln -s /mnt/nextcloud-data-storage/data /var/www/nextcloud/data
ls -ld /var/www/nextcloud/data

Nextcloud 文件中解釋了這種符號連結方法,因為本機儲存是透過絕對路徑來識別的。有了這種鏈接,/var/www/nextcloud/data即使資料實際儲存在外部磁碟上,Nextcloud 也能繼續存取。

在進行大範圍權限變更之前,請先核實所有權:

stat -c '%U:%G %a %n' /var/www/nextcloud/data.old
stat -c '%U:%G %a %n' /mnt/nextcloud-data-storage/data
namei -l /mnt/nextcloud-data-storage/data

HTTP 使用者必須能夠遍歷父目錄並讀寫資料目錄。正確的目錄擁有者因發行版和安裝方式而異。 Nextcloud 的occ 文件指出,HTTP 帳戶通常www-data在 Debian/Ubuntu 和apacheFedora/CentOS 上是相同的,而在其他系統上則有所不同。

終端顯示所有權檢查結果以及從原始 Nextcloud 資料路徑到外部磁碟機的符號鏈接

保留原始資料目錄路徑名,並使用符號連結將其指向外部磁碟。

常見誤解:遞歸運行通用chmod 777修復命令可以解決權限問題。但這可能會掩蓋真正的問題,同時削弱安全性。正確做法:將新目錄與原始目錄的所有權和權限進行比較,保留已使用的存取控制清單 (ACL),並僅對 HTTP 使用者進行必要的最小修正。

如果你真的想改變呢datadirectory?

Nextcloud確實描述了一種無符號連結的方法,但同一份文件也指出該方法不受支持,並警告說它可能會破壞資料庫。此方法需要同時變更和更新表中的config.php符合條目。local::/old-data-dir/oc_storages

這並非同一操作的另一種語法;它會更改 Nextcloud 內部記錄的儲存識別碼。操作:除非您擁有經過測試的備份、經過測試的復原流程以及移除舊路徑名的具體操作理由,否則請使用符號連結方法。對於全新的 Nextcloud 安裝,請在安裝過程中選擇最終資料位置。 Nextcloud 明確指出,這樣做比之後行動資料容易得多。

5. 重啟,驗證掛載,並恢復 Nextcloud 在線狀態

啟動 Nextcloud 之前,請確認外部檔案系統已正確掛載,且符號連結能夠解析到該檔案系統:

findmnt /mnt/nextcloud-data-storage
readlink -f /var/www/nextcloud/data
sudo -E -u www-data test -r /var/www/nextcloud/data/.ncdata && echo readable

重新啟動 Web/應用程式服務,並使用適合您部署環境的方法重新啟用 Nextcloud cron 作業。然後關閉維護模式並檢查伺服器狀態:

cd /var/www/nextcloud
sudo -E -u www-data php occ maintenance:mode --off
sudo -E -u www-data php occ status

登入並測試以下幾項操作:開啟一個現有文件、上傳一個新文件、重新命名文件、刪除文件、從回收站恢復文件,並確認其他用戶端可以同步該文件。重新啟動主機一次並重複上述步驟;這樣可以在系統故障發生之前findmnt發現無效條目。/etc/fstab

終端機正在驗證 Nextcloud 狀態以及 Nextcloud 檔案介面旁的外部檔案系統掛載點。

切換完成後,請驗證 Nextcloud 中的作業系統掛載和正常檔案操作。

您需要嗎occ files:scan --all?

並非自動執行。 Nextcloud 的文件命令文件指出,files:scan該命令會更新文件緩存,以儲存新增或已更改的文件,這在手動複製文件後或排查緩存不一致問題時非常有用。正確執行的路徑保留移動操作旨在保留相同的檔案和相同的邏輯本機儲存路徑,因此不應將完整掃描作為預設的「以防萬一」步驟。

操作:首先測試使用者介面並核對預期檔案。如果檔案在磁碟上存在但 Nextcloud 中卻找不到,則應進行有針對性的掃描,或在必要時執行其他操作files:scan --all。請注意,對大型安裝進行完整掃描可能需要相當長的時間。

最終遷移清單

  • 目前資料庫、配置和資料備份存在於正在遷移的磁碟之外。
  • 外部檔案系統透過 UUID 或 LABEL 配置了穩定的掛載點。
  • findmnt確認外部驅動器已實際掛載。
  • 在最後一次同步期間,Nextcloud 的寫入和定時任務將停止。
  • 完整的資料目錄(包括.ncdata)已複製。
  • datadirectory透過符號連結保留原始路徑名。
  • HTTP 用戶可以遍歷掛載路徑並讀取/寫入資料。
  • Nextcloud啟動正常,沒有儲存錯誤occ status。
  • 上傳、重新命名、刪除、復原、下載和同步測試均成功。
  • 伺服器已重新啟動一次,以驗證外部磁碟機在啟動時能夠可靠地掛載。
  • 舊資料目錄只有在新系統經過測試並單獨備份後才會刪除。

最重要的概念很簡單:遷移 Nextcloud 資料不只是檔案系統的複製。路徑是 Nextcloud 本機儲存標識的一部分。盡可能保留該路徑,將外部磁碟機設定為可靠的系統掛載點,在最終複製期間停止寫入操作,並保留回滾副本,直到新儲存空間經過應用程式測試和重新啟動驗證。

留下評論

將 Kopano 信箱移轉到 Grommunio 或 Zammad:選擇正確的路徑

將 Kopano 信箱移轉到 Grommunio 或 Zammad:選擇正確的路徑

比較 Kopano、grommunio 和 Zammad 的遷移功能。了解每種方法可以保留哪些郵箱數據,如何試用和驗證結果,以及何時適合使用 IMAP 或自訂匯入。

如何安全地將 Nextcloud 資料夾移轉到外部硬碟

如何安全地將 Nextcloud 資料夾移轉到外部硬碟

將 Nextcloud 資料目錄遷移到外部硬碟,同時保持檔案引用的完整性。安全地使用備份、持久掛載、rsync、權限和符號連結。

修正 Nextcloud Cron 作業無法自動執行的問題(使用 systemd)

修正 Nextcloud Cron 作業無法自動執行的問題(使用 systemd)

透過檢查服務使用者、PHP 和 Nextcloud 路徑、定時器啟動和作業運行歷史記錄,對 Ubuntu 上的 Nextcloud systemd cron 定時器進行故障排除。

如何在 BigBlueButton 中配置 Etherpad 集成

如何在 BigBlueButton 中配置 Etherpad 集成

在 BigBlueButton 4.0 beta.4 或更早版本中啟用 Etherpad 共享筆記。安裝可選軟體包,選擇會議等級或全域預設值,並排查代理問題。

修復 Nextcloud 2GB 上傳限制:如何允許上傳大文件

修復 Nextcloud 2GB 上傳限制:如何允許上傳大文件

透過檢查 PHP、Nginx 或 Apache、反向代理、逾時設定和存儲,修復 Nextcloud 2GB 上傳限制。使用大於原始限制的檔案安全地測試變更。

如何使用 Let's Encrypt 為 ownCloud 伺服器設定 SSL/HTTPS

如何使用 Let's Encrypt 為 ownCloud 伺服器設定 SSL/HTTPS

在 Apache 上為 ownCloud 伺服器設定 Let's Encrypt HTTPS。檢查 DNS 和端口,使用 Certbot 頒發證書,啟用重定向,並測試續約。

修復版本升級後 ownCloud “完整性檢查失敗” 的問題

修復版本升級後 ownCloud “完整性檢查失敗” 的問題

升級後診斷 ownCloud 完整性警告,並為核心檔案不符、檔案缺失、額外檔案或應用程式簽署錯誤選擇安全的修復方案。

如何在 ownCloud 伺服器中限制公共連結的過期日期

如何在 ownCloud 伺服器中限制公共連結的過期日期

為 ownCloud Server 公共連結設定最長過期日期,了解它會影響哪些共享,並在不忽略較舊連結的情況下驗證策略。

如何配置 Zimbra GAL 自動同步並驗證其是否正常運作

如何配置 Zimbra GAL 自動同步並驗證其是否正常運作

設定 Zimbra GAL 自動同步,設定輪詢間隔,強制執行測試同步,驗證時間戳,並追蹤過時的內部或外部 LDAP 聯絡人。

如何在 ownCloud Infinite Scale 中設定 LDAP 身份驗證

如何在 ownCloud Infinite Scale 中設定 LDAP 身份驗證

為 ownCloud Infinite Scale 配置 LDAP 支援的登錄,映射使用者和群組,選擇內建或外部 OIDC,保護憑證,並安全地驗證身份驗證。