它解決的核心運維問題
當 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。
- 目前 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"`,確認已切到新目錄
- 確認業務容器和鏡像倉庫恢復正常,再考慮清理舊備份目錄