運維指南

docker-data-move.sh 在真實運維裡最適合的使用場景

一篇面向運維現場的說明,講清楚當 Docker 存儲把系統盤吃滿、手工遷移又有風險時,什麼時候該用 docker-data-move.sh,以及腳本實際在做什麼。

閱讀約 7 分鐘 · 2026-03-13

它解決的核心運維問題

當 Docker 資料目錄不斷膨脹,最終把系統盤壓到接近告警線時,docker-data-move.sh 就很有價值。它特別適合那種「業務已經在跑、磁碟也快滿了、但又不想手工亂搬目錄」的場景。

和在壓力下手改 daemon.json、手工 rsync、自己停服務相比,這個腳本把遷移拆成了更清晰的步驟:先檢測、再選盤、再停服務、再同步資料、最後更新配置並校驗結果。

最適合落地的環境

它最適合那種「最初預設裝在系統盤裡,後來業務長起來才發現該搬家」的長期運行主機。像這次 CentOS 7 主機,Docker Root Dir 在 `/home/docker-data`,而 `/home` 只剩幾百 MiB,這就是很典型的使用場景。

  • 單機服務場景裡,Docker 資料已經明顯超出原始磁碟容量
  • 需要把遷移流程文件化,便於團隊交接和復盤
  • 想避免「臨時 rsync + 手改配置」這種高風險操作
  • 像 Harbor、Registry、私有平台這類長期累積鏡像和 volume 的節點

如何理解 CentOS 7 上這段輸出

從這次 CentOS 7 的輸出可以直接看出幾件事:目前 Docker Root Dir 在 `/home/docker-data`,`/home` 幾乎滿了,而腳本自動選了空間更大的 `/data/docker-data` 作為遷移目標。

當日誌進入 `Syncing Docker data to /data/docker-data ...` 時,代表前面的檢測、選盤和停服務都已完成,現在正在用 `rsync` 複製鏡像層、容器層、volume 與相關 metadata。

CentOS 7 上執行 docker-data-move.sh 時的終端輸出截圖
一次真實遷移執行截圖,腳本已自動選擇 `/data/docker-data` 作為目標路徑。
  • 目前 Docker 已用空間:53.85 GiB
  • 建議目標盤至少可用:61.93 GiB
  • 自動選中的目標目錄:`/data/docker-data`
  • `docker.socket` 的 warning 比較像提示,不代表遷移失敗

預計還要多久

像 `98%` 到 `99%`、`8MB/s` 到 `9MB/s` 這樣的進度,通常代表已進入收尾階段。對這台約 `53.85 GiB` 的主機來說,一般只剩幾分鐘,但如果尾段還有很多小檔與 metadata,要花的時間可能比百分比看起來更久。

比較穩妥的教學寫法是:當輸出已到 `98%` 到 `99%` 時,通常代表大部分資料已完成,剩餘時間大致在幾分鐘到十幾分鐘之間,取決於磁碟效能、檔案碎片和 volume 數量。

適合寫進教學的操作步驟

如果你要把它整理成給運維同學看的教學,建議按「遷移前檢查、執行命令、觀察日誌、遷移後驗證」這四段來寫,最容易理解,也方便現場照著執行。

  • 先執行 `df -PT` 和 `docker info | grep "Docker Root Dir"`,確認目前磁碟與資料目錄位置
  • 執行 `curl -fsSL https://helper.sh/docker-data-move.sh | sudo bash -s -- --auto --yes`
  • 在 `Syncing Docker data ...` 階段耐心等待,不要手工重啟 Docker
  • 腳本完成後再次執行 `docker info | grep "Docker Root Dir"`,確認已切到新目錄
  • 確認業務容器和鏡像倉庫恢復正常,再考慮清理舊備份目錄