運維指南

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 數量。

遷移完成後的日誌說明

當 rsync 進入收尾階段後,腳本不會立刻結束。它會先把舊的 Docker 資料目錄備份成帶時間戳的目錄,再重新啟動 Docker,確認新的 data-root 已經生效,最後把舊資料目錄和 daemon.json 的備份位置列出來。

這段輸出裡最關鍵的一行是 `Verification passed. Docker Root Dir is now /data/docker-data`。這代表遷移已經不只是檔案複製完成,而是 Docker 已經成功從新目錄啟動,新的資料目錄也已正式接管。

CentOS 7 上 docker-data-move.sh 遷移完成後的終端輸出截圖
一次成功完成的遷移日誌,包含舊目錄備份、Docker 重啟以及新 data-root 的最終校驗。
  • `99%` 且 `to-chk=0`,代表複製階段實際上已完成
  • `Backing up current Docker data dir` 代表舊目錄已被保留下來,方便回滾
  • `Starting Docker service` 代表真正的切換階段已開始
  • `Verification passed` 是最值得放進教學與運維交接文件裡的成功標誌

適合寫進教學的操作步驟

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

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

相關專題

CentOS 7 維運恢復

面向仍在運行 CentOS 7 的遺留主機,集中處理 yum 源失效、鏡像倉庫 404、Docker 資料遷移等維運恢復場景。

查看專題

問題頁面

CentOS 7 上如何遷移 Docker data-root

在根分割區或 home 分割區告急前,把 Docker 資料目錄遷移到更大的掛載點。

打開頁面