# \[教學2020\] 如何將 WSL Distro (發行版) 安裝至其他硬碟 ==歡迎引用本文,但請標明本網址== --- ## 前言: * **名詞解釋** * ==WSL== * Windows Subsystem for Linux 的簡稱,中譯全名為「適用於 Linux 的 Windows 子系統」,是由微軟開發的 Linux 相容的核心介面,使用的資源少於虛擬化的機器,是目前在 Windows 環境中執行 Linux 軟體的最直接方式。可以於 Windows OS 中操作 Linux,效能極佳。 * ==Distro== * Linux Distribution 的簡稱,WSL 的官方中譯為「**發佈**」,亦有譯為 Linux 的「**發行版**」。(作者認為發行版比發佈更好理解,因此下文皆採用發行版作為 Distro 的中譯) * WSL 可以相容多種發行版,並可透過兩個途徑安裝特定發行版:(1) 使用Windows10 內建的 **Windows Store** (2) 使用 **Docker** * **撰文目的:** 1. WSL 預設的發行版安裝路徑為 C 槽,為了避免套件越裝越多導致容量不足,可以選擇將發行版移動至其他硬碟。 2. 鑑於目前網路上對於如何變更 WSL 發行版安裝位置的教學文錯誤繁多,因此撰寫本文提供完整詳細的中文教學。 3. 本文提供的方法除了能**更改發行版的安裝路徑**,其實也相當於**備份發行版**,由於 Linux 儲存空間是用 Mount (掛載) 的方式,因此原本紀錄的使用者帳戶、已安裝的套件、資料檔案都會跟著搬遷,非常完善。 5. 於 PowerShell 輸入「wsl --help」可以看到軟體的官方參數說明,本文的參數名稱與官方命名稍有變化,用意是使讀者更容易理解指令。 * **限制與狀況** * 若原本的 WSL 發行版是採用 Windows Store 安裝,由於該應用程式似乎是發行版自動安裝檔兼執行檔,裡面的設定無法變更 (無法更改欲啟動的發行版,也無法更改預設的安裝位置),因此即使依照本教學改變 WSL 預設開啟的發行版,如果依舊使用該應用程式開啟 Bash (Bourne-Again SHell),該程式仍會直接啟用原本安裝於 C 槽的發行版 (或自動重新安裝一個發行版至 C 槽)。這部分目前無解,但其實**沒有太過影響 WSL 的使用**,只是捨棄直接從開始列 (Start List) 開啟 Bash,但是**間接透過 PowerShell 開啟發行版的 Bash 是完全沒有問題的,也可以直接使用 Remote VScode 整合的 Bash 進行開發。** ## 操作步驟: 1. 以右鍵「以系統管理員身分執行」開啟 Windows 10 內建的 「**Windows PowerShell**」。 2. 檢查目前 WSL 已註冊的 Linux 發行板名稱 * 輸入以下指令查詢 Distro (發行板): ``` wsl --list ``` 或 ``` wsl -l ``` 您將會看到類似於以下的訊息: > Windows 子系統 Linux 版發佈: > Ubuntu-20.04 (預設值) 意思是目前安裝於電腦的 WSL 發行版只有 「Ubuntu-20.04」這個版本。 * 註 1: 作者當初是直接透過 Windows Store 安裝 Ubuntu-20.04 * 註 2: WSL 預設的發行版安裝路徑為 > C:\Users\<MyUserName>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_xxxx\LocalState * \<MyUserName\> 是您 Windows 的使用者名稱 (User ID),預設為 user。 * CanonicalGroupLimited.Ubuntu20.04onWindows_xxxx 結尾的 xxxx 為變數。 3. 匯出 (將發行版壓縮並備份至指定位置) * 指令格式及參數說明 (共兩個參數) ``` wsl --export <DistroName> <ExportPath><ExportFileName.tar> ``` * **\<DistroName\>**: \<發行版的名稱\>,就是您欲匯出 (備份) 的子系統 (發行版),**如上個步驟查詢到的子系統名字是 Ubuntu-20.04**。若您已安裝多個發行版,請代換為欲匯出的發行版名稱。 * **\<ExportPath\>**: <匯出目的地路徑>,這可以自定義,填入你要存放的資料夾路徑即可。**若欲存放的位置尚未建立資料夾,請先手動建立。** 本範例的路徑為「c:\k_temp\」。 * **\<ExportFileName.tar\>**: <命名匯出檔名>,這也可以自行命名,但副檔名必須為「.tar」,並且這個參數請**直接接續**在\<ExportPath\>後面 (中間不加空格)。 <br> 本範例命名為「wcc-ubuntu-20-04-wsl.tar」。 * 完整的匯出範例指令 ``` wsl --export Ubuntu-20.04 c:\k_temp\wcc-ubuntu-20-04-wsl.tar ``` 輸入後 PowerShell 的 Command Line (命令行) 會持續閃爍底線符號「\_」,**請等待幾分鐘讓系統完成匯出**,當畫面重新出現類似「PS C:\WINDOWS\system32>」的訊息表示匯出完畢,並且在 c:\k_temp 資料夾中可以看到檔案 wcc-ubuntu-20-04-wsl.tar。 4. 匯入 (將發行版備份檔匯入並同時註冊於 WSL) * 指令格式及參數說明 (共三個參數) ``` wsl --import <NewDistroName> <ImportPath> <ExportFilePath> ``` * **\<NewDistroName\>**: <為新的發行版命名>,完成匯入之後,當您再次輸入指令「wsl -l」便會看到此名字。本範例命名為「Ubuntu-20.04-InDiskD」,因為要改放在 D 槽因此用此名稱區分系統。 * **\<ImportPath\>**: <匯入目的地路徑>,可自定義,此範例存放於 D 槽的 wsl 資料夾內。 * **\<ExportFilePath\>**: <匯出檔的路徑>,請填入剛才匯出檔案的檔案路徑。 * 完整的匯入範例指令 ``` wsl --import Ubuntu-20.04-InDiskD d:\wsl\ubuntu-InDiskD c:\k_temp\wcc-ubuntu-20-04-wsl.tar ``` 輸入後同樣請等待數分鐘讓系統完成匯入及檔案註冊,完成後可於 d:\wsl\ubuntu-InDiskD 資料夾找到一個發行版的檔案,本範例的檔名是「ext4.vhdx」,此名稱應與 WSL 預設路徑中存放的檔名相同。 5. 檢查 WSL Distor (發行版) 是否新增成功 再次輸入指令 ``` wsl -l ``` 應會看到此訊息 > Windows 子系統 Linux 版發佈: > Ubuntu-20.04 (預設值) > Ubuntu-20.04-InDiskD 子系統列表中增加了「Ubuntu-20.04-InDiskD」 6. 變更 wsl 的發行版預設 * 指令 ``` wsl --setdefault <DistroName> ``` * **\<DistroName\>**: 請輸入您欲設定為預設版本的發行版名稱,本範例為「Ubuntu-20.04-InDiskD」。 * 範例 ``` wsl --setdefault Ubuntu-20.04-InDiskD ``` 7. 以指定的使用者執行特定發行版本 * 指令 ``` wsl -d <DistroName> -u <wslUserName> ``` * **\<DistroName\>**: 說明同上個指令 * **\<wslUserName\>**: \<wsl的發行版名稱\>,為當初您建立發行版時設定的 Linux 使用者帳戶名稱,本作者的名稱為「kuihao」。 * -d: 指定版本 * -u: 指定使用者 * 範例 ``` wsl -d Ubuntu-20.04-InDiskD -u kuihao ``` 8. 將 C 槽的發行版檔案取消註冊 (刪除 C 槽的發行版) * 指令 ``` wsl --unregister <DistroName> ``` * \<DistroName\>: 填入您要取消註冊的版本名稱,此範例為位於 C 槽的「Ubuntu-20.04」。 * 範例 ``` wsl --unregister Ubuntu-20.04 ``` 輸入之後會看到以下訊息 > 取消註冊中... 完成之後輸入「wsl -l」會發現 Ubuntu-20.04 已刪除,並至原 wsl 預設路徑亦可發現原檔案已刪除。 登入後請記得更新 Linux 套件。 本教學文完畢,祝您開發順利。 ## Reference * "Is this the correct way to Import a WSL export, overwriting “default” installation?," StackOverflow, 2020. \[Online\]. Available: https://stackoverflow.com/questions/63252225/is-this-the-correct-way-to-import-a-wsl-export-overwriting-default-installati * "Exporting and Importing WSL Linux Distributions on Windows 10," Joe Ferguson, 2020. \[Online\]. Available: https://joeferguson.me/exporting-and-importing-wsl-linux-distributions-on-windows-10/ * "適用於 Linux 的 Windows 子系統," WikiPedia, 2020. \[Online\]. Available: https://zh.wikipedia.org/wiki/%E9%80%82%E7%94%A8%E4%BA%8E_Linux_%E7%9A%84_Windows_%E5%AD%90%E7%B3%BB%E7%BB%9F --- ###### tags:`wsl` `Windows10 上適用於 Linux 的 Windows 子系統` `Subsystem for Linux` `Linux 20.04` `Microsoft Store` `PowerShell` `export` `import` `將WSL(Windows上的Bash)根檔案系統移動到另一個硬碟?` `通过wsl命令迁移` `將 WSL Distro 移動到不同磁碟機` `WSL Distro 變更檔案路徑` `Exporting and Importing WSL Linux Distributions on Windows 10` `發行版` `發佈`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.