2026年3月20日 星期五

WSL 移轉問題

 我的wsl 有docker-desktop與ubuntu,如今我將ubuntu備份後刪除,然後還原到d:槽,因為c槽還有docker-desktop 這樣我進入wsl 他會抓到ubuntu嗎?

你這樣做是完全可行的,關鍵在於「Ubuntu 發行版的名稱」跟「WSL 啟動行為」的關係。你只要注意命名和預設設定,就不會被 docker-desktop 干擾。


1. 你會不會抓到 Ubuntu?

重點是:
wsl 启動時預設會進入「目前設定的預設發行版」,跟 C 槽、D 槽沒關係,只跟你自己之後用 wsl --set-default 設定的是哪一個有關係。

以你目前的情況:

text
NAME STATE VERSION * Ubuntu Stopped 2 docker-desktop Stopped 2

代表你現在的「預設發行版」是 Ubuntu,而你把它備份後搬到 D 槽,用 wsl --import 匯入時,可以有兩種做法:

情況 A:匯入成「同名 Ubuntu

powershell
wsl --import Ubuntu D:\wsl\ubuntu D:\backup\ubuntu.tar wsl --set-default Ubuntu
  • 這時會存在一個新的 Ubuntu 發行版,存放在 D 槽,WSL 會抓到這個新的 Ubuntu,不會去抓舊的 C 槽那個(你已經刪除舊的)。

  • $ wsl 就會進到 D 槽的 Ubuntu,docker-desktop 依然在 C 槽,兩者並存且互不影響。

情況 B:匯入成「不同名字,例如 Ubuntu-Home

powershell
wsl --import Ubuntu-Home D:\wsl\ubuntu D:\backup\ubuntu.tar
  • 這時會多一個 Ubuntu-Home,你原本 Ubuntu 名稱沒有被覆蓋,你用 wsl 進的還是舊的 Ubuntu(如果還沒刪除)。

  • 進入方式就會變成:

    • wsl → 預設發行版(舊 Ubuntu 或 docker-desktop,看你設定)

    • wsl -d Ubuntu-Home → 進入你備份還原的那個 D 槽版本。


2. 你真正要問的是「進到那個 Ubuntu 嗎?」

  • 只要你:

    1. wsl --unregister Ubuntu 刪掉舊的

    2. wsl --import Ubuntu D:\wsl\ubuntu ... 用 同一個名字 Ubuntu 匯入

    3. 必要時再 wsl --set-default Ubuntu

  • 那之後你打 wsl 或開 Windows Terminal 的「Ubuntu」頁籤,就會進到 D 槽那個新的 Ubuntu。

  • 這個動作跟 docker-desktop 完全無關,docker-desktop 會保留在 C 槽,繼續當它的 docker-desktop 發行版,不影響你用 Ubuntu。


3. 推薦操作順序(給你這種重度使用者)

powershell
# 1. 先看目前狀態 wsl -l -v # 2. 備份 C 槽的 Ubuntu wsl --export Ubuntu D:\backup\ubuntu.tar # 3. 刪掉舊的 Ubuntu(移除 C 槽的發行版) wsl --unregister Ubuntu # 4. 把 Ubuntu 匯入到 D 槽,用同樣名字 wsl --import Ubuntu D:\wsl\ubuntu D:\backup\ubuntu.tar # 5. 設定為預設發行版 wsl --set-default Ubuntu # 6. 驗證:應該看到 Ubuntu 在 D 槽,docker-desktop 仍在 C 槽 wsl -l -v # 7. 進去 Ubuntu,確認 /home/你的帳號、Docker、工具等都正常 wsl -d Ubuntu

這樣之後你進 wsl、Windows Terminal 的 Ubuntu 標籤,都會進到 D 槽的那個 Ubuntu,docker-desktop 會照樣在旁邊乖乖跑,不會互相「抓錯」。

沒有留言:

張貼留言