修正 Nextcloud “事務性檔案鎖定未設定”錯誤

如果 Nextcloud 顯示警告,提示事務性檔案鎖定未配置或已停用,則檔案操作可能難以抵禦並發寫入和中斷傳輸。通常的解決方法是配置受支援的​​鍵值儲存(例如 Redis 或 Valkey)來實現鎖定。首先要確定 Nextcloud 的安裝方式,然後同時設定快取服務和 Nextcloud;單獨安裝 Redis 並不能消除此警告。

Nextcloud 目前的管理手冊指出,事務鎖定預設使用資料庫。資料庫後端雖然可以工作,但會增加資料庫負載。 Redis 或 Valkey 可以提供專用的鎖定後端。具體的警告文字因 Nextcloud 版本而異:目前文件列出的是「事務文件鎖定已停用,這可能會導致競態條件問題」。單獨的記憶體快取警告與此問題不同。請參閱官方的事務文件鎖定指南和管理頁面警告參考。

更改伺服器之前

以下步驟假設您是 Nextcloud 主機的管理員。以下命令使用 Debian 或 Ubuntu 系統,並採用常規軟體包安裝方式;其他 Linux 發行版的軟體包名稱、服務名稱、PHP 版本和配置路徑可能有所不同。如果您使用的是 Nextcloud AIO、Docker、Snap、TrueNAS 或託管服務提供者提供的映像,請依照該部署的說明安裝和重新啟動服務。在主機上安裝 PHP 軟體包可能不會更改容器或裝置內部的 PHP 環境。

  • 找到 Nextcloud 的 Web 根目錄及其活動狀態config/config.php。
  • 在編輯文件前,請務必先進行安全備份。該文件可能包含資料庫憑證和其他機密資訊。
  • 確認 Nextcloud 使用的是單一 Web 伺服器還是多個 Web 伺服器。多節點架構需要一個共享的 Redis/Valkey 伺服器或集群,且每個 Nextcloud 節點都必須能夠存取該伺服器或叢集。
  • 如果您的用戶依賴不間斷的文件上傳,請安排一個較短的維護視窗。

步驟 1:確認警告和安裝類型

以管理員身份登入並開啟管理設置,然後查看安全性和設定警告的概述。記錄下完整的警告資訊。如果頁面僅顯示未配置記憶體緩存,則需要進行不同的檢查;請根據需要配置本機快取(例如 APCu),但不要假設它會提供交易鎖定。 Nextcloud 文件指出,必須在配置中明確啟用快取設定config.php。

在傳統的 Linux 安裝中,使用 shell 來識別部署路徑並檢查設定文件,而無需將敏感資訊列印到共用終端日誌中。例如,在伺服器上:

cd /var/www/nextcloud
ls -l config/config.php

請替換/var/www/nextcloud為您的實際路徑。對於容器,請確定容器及其掛載的配置,而不是編輯執行實例不使用的主機端檔案。

步驟 2:安裝並啟動鍵值存儲

對於 Debian 或 Ubuntu 系統,傳統的 Redis 後端通常使用 Redis 服務和 PHP Redis 擴充。請安裝與 Web 伺服器所使用的 PHP 版本相符的軟體包:

sudo apt update
sudo apt install redis-server php-redis
sudo systemctl enable --now redis-server
sudo systemctl status redis-server

狀態輸出應顯示服務已啟動。確認執行 Nextcloud 的 PHP 運行時可以載入 Redis 擴充功能。在標準安裝中,php -m | grep -i redis可以透過命令列介面 (CLI) 快速檢查,但 CLI PHP 和 Web PHP 可能使用不同的版本或設定檔。如果 Web 執行時期中缺少該模組,請安裝或啟用對應的軟體包,然後重新啟動 PHP-FPM 或 Web 伺服器。

Nextcloud 34.0.2 及更高版本還提供了一個捆綁的KeyValueCache後端,用於相容於 Redis 的儲存。它不需要 PHP Redis 擴充。當託管環境無法安裝 PHP 模組,但仍需要執行 Redis 或 Valkey 服務時,這非常有用。目前的Nextcloud 記憶體快取指南對這兩種方法都有詳細說明。請從下方選擇一種後端配置,而不是同時新增兩種配置。

步驟 3:在 Nextcloud 中設定鎖定

編輯目前啟動的配置config/config.php數組,並將選定的條目新增至現有$CONFIG數組。請保留 PHP 語法和逗號。不要建立第二個配置數組或重複鍵。除非您清楚為何需要更改,否則請保留所有現有的快取設定。

方案 A:使用 PHP Redis 擴充的 Redis

當 Web PHP 運行時環境phpredis安裝了受支援的擴充功能時,請使用此選項。監聽 6379 連接埠的本機 Redis 伺服器可以使用以下設定:

'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
    'host' => '127.0.0.1',
    'port' => 6379,
    'timeout' => 0.0,
],

如果 Redis 需要身份驗證,請設定正確的密碼config.php並保護檔案權限。不要將 Redis 公開。將其綁定到本地主機或受保護的私人網絡,並在適當情況下使用 Unix 套接字。

方案 B:使用 Redis 或 Valkey 的鍵值緩存

如果您的 Nextcloud 版本支援捆綁的 Redis 提供者,並且您不想安裝 PHP Redis 擴展,請使用此選項。對於監聽 6379 連接埠的本機服務,最小範例如下:

'memcache.locking' => '\OC\Memcache\KeyValueCache',
'memcache.kvstore' => [
    'server' => [
        'host' => '127.0.0.1',
        'port' => 6379,
    ],
],

如果您的服務使用了驗證、TLS、套接字、Sentinel 或叢集設置,請新增文件中記錄的相應設定。請勿從範例中複製憑證。有關詳細參數和支援的拓撲結構,請參閱官方快取配置參考文件。

步驟 4:檢查連接性和多伺服器設置

Nextcloud 必須能夠使用與服務相同的主機、連接埠、套接字和憑證存取已設定的快取伺服器。一個常見的錯誤是localhost在每個 Nextcloud Web 節點上都進行設置,而 Redis 卻只運行在一個獨立的主機上。在多伺服器部署中,應將所有 Web 節點配置為使用同一個 Redis 伺服器或叢集。限制對 Nextcloud 節點的網路訪問,並使用適當的身份驗證和防火牆規則保護 Redis。

對於 Unix 套接字,請確認 PHP/Web 伺服器帳號擁有對該套接字的讀寫權限。權限或群組變更因作業系統而異,因此請遵循 Redis/Valkey 和發行版文檔,而不是應用諸如全域可寫存取權限之類的寬泛權限。即使配置金鑰存在,連線拒絕、驗證錯誤或套接字權限錯誤也可能導致 Nextcloud 無法使用鎖定提供者。

步驟 5:重啟相關服務

儲存配置後,如果 Redis 服務的設定發生更改,請重新啟動 Redis 服務,然後重新啟動為 Nextcloud 提供服務的 PHP 執行時間。例如,Apache 安裝可能需要重新啟動 Apache 服務,而 PHP-FPM 安裝則需要重新啟動對應的 PHP-FPM 服務。在某些發行版中,服務名稱包含 PHP 版本號。對於容器環境,請透過部署支援的方法重新建立或重新啟動相關服務。避免在生產伺服器上盲目重啟不相關的服務。

如果 Nextcloud 傳回設定或語法錯誤,請還原備份並檢查是否有缺少逗號、引號不符、重複鍵或編輯錯誤等情況config.php。 PHP 陣列設定必須保留在現有配置結構中。

步驟 6:驗證設定並測試檔案操作

刷新管理員概覽並檢查事務文件鎖定警告是否已消失。如果您配置了本機快取但仍看到記憶體快取警告,請單獨檢查本機快取;Nextcloud 建議在許多單一伺服器部署中使用 APCu 進行本機緩存,而 Redis 則負責處理鎖定和分散式快取。請勿預設將 Redis 新增為本機緩存,尤其是在多伺服器設定中。

您也可以使用 Nextcloud 的命令列工具檢查有效的鎖定設定。請occ以 Web 伺服器帳戶身分從 Nextcloud 目錄執行該工具;在 Debian/Ubuntu 系統上,該帳戶通常為www-data:

sudo -u www-data php occ config:system:get memcache.locking

該值應與您選擇的後端相匹配,例如` \OC\Memcache\Redis/etc \OC\Memcache\KeyValueCache...

最後,上傳一個小的測試文件,重新命名,下載,並確認桌面或行動用戶端可以同步變更。這些檢查並不能模擬所有並發工作負載,但可以確認更改後常規檔案操作仍然有效。對於繁忙或叢集伺服器,請在正常使用期間監控 Nextcloud 日誌和 Redis/Valkey 的可用性。如果警告仍然存在,請驗證在使用選項 A 時 Web PHP 運行時是否具有擴展名,快取主機是否可訪問,憑證和套接字權限是否正確,以及所有節點是否共享相同的後端。

事務文件鎖定能做什麼,不能做什麼

事務鎖定有助於防止操作重疊時檔案損壞,處理中斷的事務,並協調涉及共用檔案和外部儲存的變更。它不會預留文件以供一人編輯,也不會顯示其他正在編輯的用戶,或合併同時進行的編輯。請將此警告視為伺服器設定問題,然後在後端配置完成後測試正常的上傳和同步功能。對於協作編輯,請使用專為共同創作而設計的應用程序,而不是依賴文件鎖定。

留下評論

10 款最佳 Ping 掃描工具,協助您尋找網路上的設備

10 款最佳 Ping 掃描工具,協助您尋找網路上的設備

比較 10 款 ping 掃描工具,它們可用於快速發現區域網路、跨平台掃描和 IP 位址管理。了解掃描可以告訴您什麼,以及不能告訴您什麼。

用於追蹤效能的 6 款最佳網路管理工具

用於追蹤效能的 6 款最佳網路管理工具

比較六款網路管理工具的效能監控功能,包括 SNMP 覆蓋範圍、映射、警報、部署模型和成本權衡。

適用於 Windows、iOS 和 Android 的最佳 Wi-Fi 分析器

適用於 Windows、iOS 和 Android 的最佳 Wi-Fi 分析器

比較適用於 Windows、iPhone 和 Android 的 Wi-Fi 分析器,包括頻道擁塞、訊號覆蓋範圍、熱圖和網路故障排除工具。

Ping 監控:7 款免費開源的網路可用性工具

Ping 監控:7 款免費開源的網路可用性工具

比較七款免費開源的 ping 監視器,從完整的網路套件到專注於延遲探測的工具,選擇最適合可用性、丟包率和歷史記錄的工具。

網路中的服務品質 (QoS):服務品質的角色和工作原理

網路中的服務品質 (QoS):服務品質的角色和工作原理

了解 QoS 在網路中的意義,DSCP 標記和流量佇列如何對語音、視訊和業務應用程式進行優先排序,以及 QoS 無法解決的問題。

最佳SFTP伺服器軟體,實現安全檔案傳輸

最佳SFTP伺服器軟體,實現安全檔案傳輸

比較適用於 Windows 和 Linux 的可靠 SFTP 伺服器軟體,包括 OpenSSH、Bitvise、SolarWinds 和 SFTPGo。尋找最適合您的安全性和文件傳輸需求的軟體。

適用於網路團隊的 7 款最佳 IP 位址管理工具

適用於網路團隊的 7 款最佳 IP 位址管理工具

比較七款 IP 位址管理工具,包括子網路發現、DNS 和 DHCP 協調、網路清單和開源 IPAM。

網路監控最佳實務:監控哪些內容以及使用哪些工具

網路監控最佳實務:監控哪些內容以及使用哪些工具

建置實用的網路監控,提供清晰的設備覆蓋範圍、有用的效能指標、可操作的警報,並對 SolarWinds NPM、PRTG 和 OpManager 進行比較。

十大最佳網路掃描工具,幫助您發現裝置和 IP 位址

十大最佳網路掃描工具,幫助您發現裝置和 IP 位址

比較網路掃描工具,以實現快速設備發現、跨平台 IP 掃描和企業級 IPAM,並指導如何將每個選項與您的網路相符。

如何使用 Nmap 進行路由追蹤並讀取網路路徑

如何使用 Nmap 進行路由追蹤並讀取網路路徑

使用 Nmap 的 --traceroute 選項將躍點對應到授權主機,了解躍點和 RTT 輸出,並在不進行過度掃描的情況下排查缺失的回應。