Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 服務器間大量文件高效傳輸技巧總結:tar 管道、nc、ssh、scp 實戰對比

編輯:Linux 系統常見問題解答

日常運維頻繁面臨「幾萬個小文件跨服務器遷移」場景,單純 cp/scp 極慢。本文總結「打包+傳輸+解包」一體化管道技巧,對比 nc、ssh、scp、本地 tar|tar 多種方案優劣,給出最佳實踐建議。

核心原則

  1. 避免逐文件傳輸開銷:大量小文件用 tar 打包成單一數據流,消除元數據操作開銷。
  2. 流式處理,落地即用:tar cf - src | 传输 | tar xf -,無需臨時存儲完整壓縮包,節省磁盤空間與時間。
  3. 選擇合適傳輸層:內網高速用 nc(無加密開銷),公網/需認證用 ssh/scp,本地用管道。

方案對比與命令範例

1. nc (netcat) - 內網極速傳輸(無加密、無認證)

適用: 可信內網、大數據量、追求極致速度。

# 接收端 B (192.168.1.10) 監聽 5555 端口,解包到 /data/dest
nc -l 5555 | tar -xzf - -C /data/dest

# 發送端 A 打包壓縮並發送
tar -czf - /data/src | nc 192.168.1.10 5555
  • -z gzip 壓縮(CPU 換帶寬,千兆網卡通常不壓縮更快)。
  • -l 監聽,-p 指定端口(部分版本)。
  • 單向傳輸,傳完自動斷開。

2. ssh 管道 - 安全、通用、支持壓縮

適用: 所有場景(公網/內網),需 SSH 密鑰免密登錄。

# A 打包發送,B 解包(最常用)
tar -czf - /data/src | ssh user@192.168.1.10 "tar -xzf - -C /data/dest"

# A 打包發送,B 保存為壓縮包(便於校驗/二次分發)
tar -czf - /data/src | ssh user@192.168.1.10 "cat > /backup/src_$(date +%F).tar.gz"

# B 發起拉取(反向,適合 B 權限高、A 只開放 SSH)
ssh user@192.168.1.10 "tar -czf - /data/src" | tar -xzf - -C /data/dest

# 開啟 SSH 壓縮(-C)適合低帶寬
tar -cf - /data/src | ssh -C user@192.168.1.10 "tar -xf - -C /data/dest"

3. scp 管道 - 少見但可行

# A 打包通過 scp 標準輸入傳輸,B 解包
tar -czf - /data/src | scp - user@192.168.1.10:/data/dest.tar.gz
# B 端需手動解包,或配合 ssh 執行遠程命令

不如 ssh 管道靈活,一般不推薦。

4. rsync - 增量同步、斷點續傳、保留屬性王者

# 最推薦的生產級同步命令
rsync -avzP --delete /data/src/ user@192.168.1.10:/data/dest/
# -a 保留屬性 -v 詳情 -z 壓縮 -P 進度/斷點續傳 --delete 目標端刪除源無文件
  • 增量傳輸:僅傳輸差異塊,二次同步極快。
  • 保留權限、時間戳、軟鏈接、設備文件等屬性。
  • 支持帶寬限制 --bwlimit=10000 (KB/s)。

5. 本地目錄間拷貝 - tar 管道 vs cp -a

# tar 管道(保留所有屬性,適合跨文件系統)
cd /src && tar -cf - . | (cd /dest && tar -xpf -)

# cp -a(同文件系統下通常更快,利用 reflink/clone)
cp -a /src/. /dest/

# rsync 本地(同樣優秀)
rsync -aHAX /src/ /dest/

屬性保留參數速查

命令關鍵參數保留內容
cp-a (=-dR --preserve=all)權限、時間戳、擁有者、軟鏈接、擴展屬性、ACL
tar-p (--preserve-permissions)權限、擁有者(需 root 解包保留擁有者)
rsync-a (=-rlptgoD) + -H 硬鏈接 + -A ACL + -X xattr最完整

進度可視化小技巧

# pv (Pipe Viewer) 顯示管道吞吐進度
tar -cf - /data/src | pv | ssh user@host "tar -xf - -C /data/dest"

# 或 rsync 自帶進度
rsync -avzP --info=progress2 /src/ user@host:/dest/

避坑指南

  • nc 無認證加密:嚴禁公網直連,內網也建議配合 stunnel 或 SSH 隧道。
  • tar 絕對路徑陷阱:打包用相對路徑 cd /src && tar -cf - .,解包指定 -C /dest,否則解包還原絕對路徑覆蓋系統文件。
  • 大文件系統限制:單文件 > 2GB 需確認文件系統、tar 版本支持大文件(現代均支持)。
  • 稀疏文件:tar -S、rsync --sparse 處理虛擬機磁盤鏡像等稀疏文件。
  • 驗證完整性:傳輸後雙端 sha256sum 對比,或 rsync -c 校驗和模式。

選型決策樹

是否需增量/斷點續傳/屬性完整保留? → 是 → rsync (首選)
否 → 是否內網極速/臨時一次性? → 是 → nc + tar (無加密最快)
否 → 是否公網/需安全/通用? → 是 → ssh + tar (標準安全)
否 → 本地跨文件系統? → tar | tar 或 rsync -aHAX
否 → 本地同文件系統? → cp -a (最快,支持 reflink)

作者補充: 「在使用一個工具完成任務前,先思考:是否有更適合的工具?工具是否有特殊技巧提效?(查閱 man 手冊常有意外收穫)」

Copyright © Windows教程網 All Rights Reserved