SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-13

Seafile 與 Nextcloud 檔案同步比較

比較 Seafile 與 Nextcloud 的檔案同步:Seafile 以平均約 8 MB 區塊儲存,Nextcloud 以一般檔案寫入磁碟,並整理速度、RAM、備份與加密差異。

Seafile 與 Nextcloud:簡短結論

Seafile 與 Nextcloud 的差異,取決於檔案到達伺服器後的儲存方式。Seafile 會將每個檔案切分成區塊,並儲存在只有 Seafile 能讀取的物件儲存中,因此同步速度快,但備份會變成兩個部分的工作。Nextcloud 會將檔案以一般檔案形式寫入磁碟,並把同步視為整個平台的一項功能;該平台也提供行事曆、聯絡人、文件與分享連結。請先決定這項差異,因為其他選擇都由此延伸。

截至 2026 年 8 月,Seafile 為 13.0 系列,Nextcloud 為 34 系列。兩者都已相當成熟,近期都不會改變其儲存模型。

Seafile 如何儲存檔案

Seafile 將 library 的模型設計得類似 git 對 repository 的模型。管理員手冊將內部模型列為 Repo、Commit、FS 和 Block,並指出 repo 也稱為 library。每個檔案會透過內容定義分塊(CDC,一種根據資料本身決定區塊邊界的演算法)切割成長度不固定的區塊;手冊指出,區塊平均大小約為 8 MB。區塊會以其內容命名,因此同一個大型檔案的兩個版本可以共用所有未變更的區塊,兩個 library 也能共用相同的區塊。

關聯式資料庫只儲存少量 library 中繼資料。其餘內容,也就是 commits、目錄物件與 blocks,都位於資料目錄下。在 12 和 13 系列使用的 Docker 版面配置中,該目錄是 /opt/seafile-data/seafile/seafile-data。在該目錄執行 ls 沒有實用資訊,因為你看到的是充滿雜湊名稱的目錄,而不是 Invoices/2026/march.pdf

同步也遵循相同模型。用戶端會向伺服器詢問變更內容,接收區塊雜湊清單,然後只擷取本機尚未持有的區塊。因此,Seafile 在大型 library 上仍能維持良好效能:傳輸的位元組數取決於變更的區塊,而不是包含這些區塊的檔案大小。

Nextcloud 如何儲存檔案

Nextcloud 會將檔案儲存在預期的磁碟位置。路徑 data/<username>/files/ 會對應使用者在 Web 介面中看到的結構。資料庫資料表 oc_filecache 也會對應相同的目錄樹,並記錄檔案大小、修改時間與 etag;Nextcloud 會以資料表為準,而不是直接以磁碟內容為準。

桌面用戶端會透過 HTTPS 使用 WebDAV(web distributed authoring and versioning)。每個檔案至少需要發出一個請求,因此 Nextcloud 增加了批次上傳 API:開發人員手冊說明,上傳大量小檔案時,網路頻寬無法充分利用,速度會低於預期,所以系統會將小檔案封裝在一起。大型檔案則改用 chunking API;桌面用戶端的預設區塊大小為 5 MiB(OWNCLOUD_CHUNK_SIZE 預設為 5242880 bytes)。

將檔案儲存在磁碟上的好處,是你現有的各種工具都能讀取資料。代價是 Nextcloud 不會自動察覺外部變更。若直接將檔案複製到 data directory,檔案會持續隱藏在 Web 介面中,直到執行掃描:

sudo -E -u www-data php occ files:scan --all -vv

管理員手冊列出需要重新掃描的情況:直接將檔案複製到 data directory 後、完成移轉後,以及調查 file cache 不一致問題時。

哪一個同步大型資料庫較快?

Seafile 在兩種最容易造成差異的情況下較快:數萬個小檔案,以及反覆編輯大型檔案。其機制是區塊層級的重複資料刪除,因此 4 GB 的磁碟映像檔只要中間部分變更,就只需上傳數個區塊。Nextcloud 可透過批次上傳縮小小檔案的差距,但無法消除大型檔案的差距,因為其傳輸單位是完整檔案。

不要只相信我對差距大小的說法,也不要直接採信廠商的基準測試。請建立一個與你的資料庫相似的資料庫並計時:

mkdir -p ~/synctest && cd ~/synctest
for i in $(seq 1 20000); do head -c 4096 /dev/urandom > "file_$i.bin"; done
du -sh ~/synctest

將該目錄放入每台伺服器上的同步資料夾,並監看用戶端完成同步。可靠性與速度同樣重要。Seafile 用戶端會先上傳區塊,最後才寫入參照這些區塊的提交內容,因此上傳中斷時,資料庫會維持在上一個提交版本,而不會留下部分寫入的目錄樹。

小型 VPS 各自需要的資源

Seafile 文件要求「至少 2G RAM 與 2-core CPU(> 2GHz)」。Nextcloud 則以每個 PHP process 的記憶體說明需求:最低每個 process 需要 128 MB,建議每個 process 使用 512 MB。計算時,先乘以 worker 數量,再加上資料庫、快取與預覽產生所需的資源。以下是我會給小型團隊採用的起始配置。這些是起點,不是實測數據。

ChartStarting point for about five users, and SQL databases per stack
The data behind this chart
[
  {
    "label": "Seafile CE 13",
    "start_ram_gb": 4,
    "start_cpu_cores": 2,
    "sql_databases": 3
  },
  {
    "label": "Nextcloud 34",
    "start_ram_gb": 4,
    "start_cpu_cores": 2,
    "sql_databases": 1
  },
  {
    "label": "Syncthing 2",
    "start_ram_gb": 1,
    "start_cpu_cores": 1,
    "sql_databases": 0
  }
]

兩者都屬於同一級距,均使用 4 GB RAM 與 2 個核心,因此資源占用不是決定因素。Syncthing 可在 1 GB RAM 與 1 個核心上執行,這才是考慮它的實際原因。兩者的組成差異比記憶體需求更大。Seafile 會使用 3 個 SQL 資料庫,Nextcloud 則使用 1 個。Seafile 的預設 Docker 部署會從你先下載的檔案啟動 server、MariaDB、Memcached、SeaDoc 與 Caddy:

mkdir /opt/seafile
cd /opt/seafile
wget -O .env https://manual.seafile.com/13.0/repo/docker/ce/env
wget https://manual.seafile.com/13.0/repo/docker/ce/seafile-server.yml
wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/13.0/repo/docker/caddy.yml
nano .env

.env 中設定 SEAFILE_SERVER_HOSTNAME、MySQL root 與資料庫密碼、初始 admin 帳戶,以及 JWT_PRIVATE_KEY。手冊要求該金鑰使用至少 32 個字元的隨機字串。系統會在首次啟動時讀取該金鑰,因此請在啟動 stack 前先產生:

openssl rand -base64 40
docker compose up -d

首次啟動會建立 3 個資料庫與 admin 使用者。Nextcloud 的對應設定,包括 TLS 與反向代理,請參閱 Nextcloud on a VPS:使用 Docker、TLS 與備份的指南

備份有何不同?

這是使用者最容易低估的面向,也是兩項產品差異最大的地方。

對 Seafile 而言,順序不可更改。手冊規定先備份 SQL,再備份資料目錄。如此一來,資料庫中的每筆記錄都有有效的物件可供參照,library 不會損毀。反過來做時,資料庫資料列可能會指向快照未擷取的區塊。

docker exec -i seafile-mysql mariadb-dump -uroot -p"$MYSQL_ROOT_PASSWORD" --opt ccnet_db > ccnet_db.sql
docker exec -i seafile-mysql mariadb-dump -uroot -p"$MYSQL_ROOT_PASSWORD" --opt seafile_db > seafile_db.sql
docker exec -i seafile-mysql mariadb-dump -uroot -p"$MYSQL_ROOT_PASSWORD" --opt seahub_db > seahub_db.sql
rsync -az /opt/seafile-data/seafile /backup/data/

這幾行有兩個細節。請使用 mariadb-dump,因為 Seafile 隨附的 MariaDB image 已將 mysql 系列命令標記為 deprecated。將 docker exec 重新導向至檔案時,請移除 -t flag,因為 TTY 會改寫換行字元,導致 dump 損毀。

這兩個部分是分開擷取的,因此可能彼此偏離。每次還原後,先檢查 store,再確認資料可用:

docker exec -it seafile bash
cd /opt/seafile/seafile-server-latest
./seaf-fsck.sh

如果有內容遺失,工具會顯示物件名稱:

Block 650fb22495b0b199cff0f1e1ebf036e548fcb95a is missing.
Repo ca1a860d HEAD commit is corrupted, need to restore to an old version.

也要規劃 garbage collection。Deduplication 會讓已刪除的檔案與 library 持續占用其區塊,直到你從同一個目錄執行 ./seaf-gc.sh;執行結果會回報找到的內容,例如 GC finished. 507 blocks total, about 507 reachable blocks, 0 blocks can be removed.。如果一年不執行,備份會持續保存使用者已刪除的資料,並增加儲存成本。

Nextcloud 也有相同的兩部分問題,但形式不同,因為資料目錄與資料庫必須描述同一棵樹:

sudo -E -u www-data php occ maintenance:mode --on
rsync -Aavx /srv/nextcloud/ /backup/nextcloud-dirbkp/
mariadb-dump --single-transaction --default-character-set=utf8mb4 -u nextcloud -p"$DB_PASS" nextcloud > /backup/nextcloud-sqlbkp.bak
sudo -E -u www-data php occ maintenance:mode --off

保留 config folder、data folder、所有自訂 apps 與 theme,以及該 dump。從同一時間點還原這兩個部分。如果 data directory 比資料庫新,使用者會看到 file cache 不知道的檔案,此時 occ files:scan --all 會修復問題。如果資料庫較新,cache rows 會指向已不存在的檔案,而 occ files:cleanup 會移除 storage table 中沒有相符項目的 cache entries。

無論哪一種情況,都需要能處理大量小檔案並保留歷史版本的備份程式;這正是 restic 與 BorgBackup 的差異

桌面與行動裝置上的用戶端

Seafile 提供兩個桌面程式。同步用戶端會在本機保留您所選取的資料庫副本。Drive 用戶端(SeaDrive)會將資料庫掛載為虛擬磁碟,並在存取時下載內容:在 Windows 上使用 Microsoft 的 cloud files API,在 macOS 上自 3.0 版起為 Finder extension,在 Linux 上則自 3.0.12 起以 AppImage 提供,並掛載至 ~/SeaDrive。加密資料庫支援全部三種桌面平台。行動應用程式的用途是存取檔案,功能僅限於此。

Nextcloud 的桌面用戶端也提供虛擬檔案,而其行動應用程式則涵蓋平台的其他功能,因此行事曆、聯絡人、Talk 與筆記都會與檔案存取功能一併提供。如果您的使用者主要透過手機操作,且需要的不只是檔案,這會在日常使用上形成明顯差異。

規劃時應注意 Seafile 的一項細節:資料庫同時是分享、同步、權限與加密的單位。在將 500 GB 資料載入單一資料庫前,請先決定資料庫的配置。因為在不同資料庫之間移動資料時,實際操作是複製後刪除,而不是重新命名,所以檔案的歷程不會隨之移轉。

加密:每種加密實際保護的內容

Seafile 的加密資料庫採用用戶端加密。密碼不會儲存在伺服器上。系統會將由密碼與資料庫 ID 衍生的 magic token 儲存在資料庫中,讓用戶端在同步前驗證密碼。系統使用 AES 256/CBC,透過密碼衍生出 key 與 IV(initialisation vector),再以該 key 加密檔案資料。

請閱讀文件中列出的限制,因為這些限制經常被忽略。加密資料庫只會加密檔案內容。資料夾與檔案名稱不會加密,檔案大小及編輯記錄也不會加密。在網頁瀏覽器中瀏覽加密資料庫並非端對端加密:您輸入密碼後,伺服器會使用密碼解密檔案 key,並將密碼快取在記憶體中 1 小時。文件也明確指出,加密資料庫不保證完整性,因為伺服器管理員可以修改檔案部分內容,而用戶端無法偵測這類修改。

Nextcloud 有兩項名稱容易混淆的功能。伺服器端加密會加密靜態檔案,但 key 仍儲存在同一台伺服器上。因此,它對外部儲存空間中的資料提供的保護,遠高於對伺服器上具有 root 權限者的保護。端對端加密 app 會在用戶端加密指定資料夾;依設計,伺服器無法讀取這些資料夾,因此網頁介面、伺服器端搜尋與預覽也無法查看其中內容。

這兩項產品的加密功能都不能取代加密備份。請另外加密備份。

行事曆、聯絡人、辦公室與應用程式平台

這個面向並不接近。Nextcloud 在核心中提供 CalDAV(透過 WebDAV 的行事曆)與 CardDAV(透過 WebDAV 的聯絡人),可整合 Collabora 或 OnlyOffice 處理文件,並透過 app store 提供其他功能。Seafile 13 提供 SeaDoc,用於協作文件與 wiki 頁面,功能也就到此為止。它沒有行事曆,也沒有通訊錄。

平台功能越多,升級成本越高。你安裝的每個 app 都可能阻擋 Nextcloud 升級,或在升級後發生異常。因此,使用者依賴的功能越多,升級時段就越需要審慎規劃。Seafile 提供的功能較少,因此可能出問題的部分也較少。另請注意,只有 Seafile Professional(不是 Community Edition)在付費授權下提供文件全文搜尋與資料夾層級權限。請確認你所依賴的功能包含在預計執行的版本中。

各自最常見的故障模式

Seafile 會在資料庫與物件儲存之間失去同步時失效。您可能會看到無法開啟的資料庫,或消失的檔案,而 seaf-fsck.sh 會列出遺失的區塊。這裡沒有可手動修復的檔案樹,因此復原時必須依正確順序還原資料庫 dump 與物件儲存。請先在備用 VPS 上測試一次還原,因為從未實際還原過的備份,只能算是推測。

Nextcloud 會在檔案快取與磁碟內容不一致時失效,通常是因為某個程序未通知 Nextcloud 就寫入資料目錄。您可能會看到磁碟上存在某個檔案,但 Web 介面未列出該檔案,或某個資料夾的大小不正確;此時應使用 occ files:scan 修正。它另外兩個常見問題是處理大量小檔案時的通訊協定速度,以及 PHP 記憶體用量;再多 CPU 也無法修復前者。大型圖片與影片的預覽通常會造成記憶體用量暴增,因此請為每個程序保留 512 MB,並在排程工作中產生預覽,而不要在處理請求期間產生。

若只需要檔案同步:Syncthing

如果實際需求只是讓多台機器保持一個資料夾的同步,這兩個產品的功能都超出所需。Syncthing 不需要伺服器,也不需要帳戶。每台裝置都是對等節點,而 VPS 會成為在筆記型電腦休眠時仍持續運作的節點。Syncthing 2 是目前的版本系列,套件可從專案自己的套件庫取得:

sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing

請以一般使用者身分執行,切勿使用 root,讓它寫入的檔案具備合理的擁有權:

sudo systemctl enable --now syncthing@youruser
systemctl status syncthing@youruser

Web 介面預設繫結至 127.0.0.1:8384,因此無法從網際網路連線,這是正確的預設設定。請從筆記型電腦建立 SSH tunnel 來存取:

ssh -L 8384:127.0.0.1:8384 youruser@your-server

接著在筆記型電腦上開啟 http://127.0.0.1:8384。同步本身會透過 TCP 和 QUIC 使用連接埠 22000,本機探索則使用 UDP 21027;這項功能無法跨網際網路運作。在 VPS 上開放 22000,並保持介面關閉:

sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp

你放棄的是所有伺服器功能:無法為未執行 Syncthing 的使用者建立分享連結、沒有 Web 檔案瀏覽器、沒有使用者帳戶,而且除非逐一為資料夾啟用檔案版本控制,否則沒有伺服器端資源回收筒。最常見的意外是衝突檔案。當兩台無法互相連線的裝置同時編輯同一個檔案時,系統會產生名稱類似 notes.sync-conflict-20260806-142233-ABCD1EF.md 的同層檔案。系統不會顯示警告,因此請不時搜尋 sync-conflict

如果你要的不是同步資料夾,而是讓應用程式寫入的 bucket,那就是另一類工具:請參閱 自架 S3 相容物件儲存。如需了解更廣泛的選項,自架 Dropbox 替代方案總覽 涵蓋了本次比較未納入的方案。

選擇規則

  1. 如果需求是大規模同步:檔案數量多、檔案容量大、使用多台裝置,而且可接受只有 Seafile 能讀取的資料儲存格式,請選擇 Seafile。
  2. 如果需求是平台:需要行事曆、聯絡人、文件與分享連結,且希望磁碟上保留任何備份工具都能讀取的普通檔案,請選擇 Nextcloud。
  3. 如果需求只是同步鏡像資料夾,沒有其他功能,請選擇 Syncthing。

現在請審慎選擇,因為 Seafile 與 Nextcloud 之間的遷移才是真正的綁定。兩者之間沒有轉換工具。您必須先將所有資料同步到用戶端,再上傳至另一台伺服器;版本歷程與分享連結會留在原系統,同時還要付出頻寬與時間成本。現在依未來三年的需求進行規劃,比在第2年更換系統更省成本。

FAQ

Seafile 同步大型資料庫時,比 Nextcloud 快嗎?

在通常最容易受影響的兩種情況下,答案是肯定的,而且原因可以驗證。Seafile 會將檔案切分為平均約 8 MB 的區塊,只傳輸變更的區塊,因此編輯大型檔案中的一小段內容時,只需傳送少數區塊。Nextcloud 的傳輸單位是整個檔案,因此相同的編輯會重新上傳完整檔案;許多小檔案則至少各自需要一個 WebDAV 請求,這也是其 bulk upload API 會將小檔案集中打包的原因。正式決定前,請先在自己的 VPS 上分別計時,因為 CPU、磁碟與網路連線的重要性不亞於通訊協定。

可以在資料目錄上執行 rsync 來備份 Seafile 嗎?

可以,但必須同時備份資料庫,並依照文件指定的順序執行。Seafile 手冊指出,應先備份 SQL,再備份資料目錄,因為這樣備份中的每筆資料庫記錄都會對應到實際存在的物件。命令 rsync -az /opt/seafile-data/seafile /backup/data/ 會複製 confseafile-dataseahub-data,但單獨執行並不足以完成還原,因為 object store 不包含可讀取的檔案樹狀結構,資料庫才是它的索引。還原這兩部分後,請執行 seaf-fsck.sh,並在確認結果前先閱讀其輸出內容。

如果只想同步檔案,還需要 Nextcloud 嗎?

不需要。Nextcloud 是平台;無論是否使用,行事曆、聯絡人與 app store 都會佔用記憶體,並增加升級維護工作。若只需要基本檔案同步,Seafile 是較輕量且通訊協定較快的產品;Syncthing 更加輕量,因為不需要執行 server side。需要額外應用程式時再選擇 Nextcloud,不要將它當成預設選項。

加密的 Seafile library 會隱藏檔案名稱嗎?

不會。加密的 library 會在 client 上加密檔案內容,密碼也不會傳到 server;但資料夾名稱、檔案名稱、檔案大小與編輯歷程仍會留在 server 上。透過 web interface 開啟加密的 library 時,密碼也會傳送到 server,由 server 解密 file key,並在記憶體中保留密碼 1 小時。如果檔案名稱本身具有敏感性,請避免透過 web interface 使用該 library,並在其他層級進行加密。

在 VPS 上應分配多少 RAM 給 Seafile 或 Nextcloud?

對於只有少數使用者的任一產品,可先配置 4 GB 與 2 個 cores,然後在產生預覽與執行搜尋期間監控記憶體使用量。Seafile 官方文件建議最低使用 2 GB RAM,以及頻率高於 2 GHz 的 2 core CPU。Nextcloud 文件建議每個 PHP process 使用 512 MB,配置時應先乘以 worker 數量,再加上資料庫與 cache 所需的資源。Syncthing 在 1 GB 記憶體下即可穩定執行。