身為一個 WSL 的重度使用者來說,基本上已經無法脫離 WSL 所帶來的便利,快速的啟動時間,並且任意的在 Windows 與 Linux 環境間自由切換,如需要使用 Linux Only 的工具時,僅需要打開 Windows Terminal 即可直接使用,不用在仰賴 VM,不必等待沉長的開機時間,更不用消耗虛擬機所帶來的資源消耗(CPU、RAM、Disk)。
前言
會使用 WSL2 的原因其實是多重因素下的決定,某天在正常開啟 Windows Termimel 時,發現總是噴了該死的錯誤訊息,這個錯誤訊息大量 Google 都沒有結果,由於忘記紀錄錯誤內容,無法具體說明問題,簡單的多就是只要執行 Linux Bash 就會直接壞掉,並且發現 Windows Serivce 中的 WSL 相關服務無法順利啟動,那段時間公司同事、同校學弟也有發生一樣的問題,初判可能是 Windows Update 在暗中做了某些事情導致…吧?
由於折騰了數天還是無法解決,一氣之下就為了解決該問題重灌電腦,並直接裝 Windows 10 的 2004 版本,至於為什麼不直接升級而選擇使用重灌的方式呢?這就要問微軟為什麼連更新版本都能噴錯,為了升級版本也是耗費了我幾個下班天,最後選擇重灌,聽人家說「Windows 重灌治百病」看起來真的是如此,隨著日積月累的資料量累積與常用應用程式的重新安裝與佈署,也是花了好幾個工作天。
如果需要重灌教學可以參考「重灌教學-系統重灌基礎-windows-8-1-為例」
題外話,Windows 2004 版本還有個新賣點,在 2004 之前的版本,由於在 Windows 想啟用 Docker,需要先啟動 Hyper-V,若啟動就會導致 VM 無法開啟虛擬機器,而在 2004 版本開始支援 Docker 與 VM 兼容使用。
使用 WSL2 後,發現 Vmmem
的記憶體使用量特別高,幾乎把所有記憶體都吃光…,如果同時間要使用 VMware、VirtualBox 等…虛擬機,很容易直接開不起來,並顯示記憶體不足。
於是設置 .wslconfig
來控制記憶體用量。但小於一定的量後就會造成 Docker Desktop WSL distro stopped 問題,該錯誤僅造成 Docker 無法使用,而 WSL 則不受影響。
設備規格
這邊補充站長的設備規格,是公司發配的工作機,型號為 DELL Latitude 3400,基本上都可以滿足工作上的所有需求,RAM 也有 16GB 大小,但在大量使用 VM 與滲透測試的同時,仍略顯不足。
什麼是 WSL
WSL 全名為 Windows Subsystem for Linux,主要就是在 Windows 環境底下的 Linux 子系統,在 Windows PE 環境底下實作 Linux 而非使用 VM 虛擬機的方式運作(WSL1),而目前有兩個版本,兩個版本皆可以共用 Distro (Distribution),所以使用上差異並不大。
功能比較
既然差異不大,為什麼還要升級至 WSL2 之後後悔降回 WSL1 呢?這部分可以先參考微軟官方網站的 WSL1 與 WSL2 比較表談起,如下圖所顯示的,WSL2 看似更完整、更強大一些,但卻沒有指出底層的更動。
若簡單扼要的點出兩個版本差異,WSL1 像是一隻程式,而 WSL2 則是一台 VM,可以控制的東西 WSL2 大於 WSL1,就如同前言所提到的,WSL2 支援 GPU 運算、控制核心數、記憶體大小、SWAP 大小等…。
網路問題
最先困擾我的是 WSL2 的網路問題,WSL2 預設網路會使用 Bridge,導致將一些 Service 架設在 WSL2 上後,則無法像 WSL1 本機無法使用 127.0.0.1 來存取服務 WSL2 上的 Service,雖然可以透過 .wslconfig
來控制 CPU、RAM 用量與網路連線模式,但這仍是我熟知 WSL2 以前第一個困擾點。
檔案存取問題
第二個困擾點在於檔案的模式,WSL1 在檔案存放很直接的放在 C:\Users\{UserName}\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\
底下,當 Windows 要操作 WSL1 的檔案內容相當容易,雖然有時候會有 Lock 住的情形(通常發生在 Windows 下直接編輯 WSL1 的檔案內容),但整體還是方便許多,相較於 WSL2 的檔案內容直接封裝成一個虛擬硬碟,操作僅能夠在 WSL 底下透過 /mnt/{C|D|E|F}
等方式進行操作。
- 小弟是 Vim 苦手,已經習慣 GUI 介面操作,大大們請鞭小力一點QQ”
WSL2 GUI
但其實 WSL2 其實已經開始支援 GUI,但整理實作方式就像是一台 VM 一樣,可以參考 The Windows Subsystem for Linux BUILD 2020 Summary 一文,WSL1 技術上有別於 VM,而 WSL2 卻更像 VM,使用 WSL2 除了啟動速度以外,若需要 GUI 還不如使用 VM 來的方便,許多技術難題還需要時間來克服,若 GUI 可以直接兼容在 Windows 下繪製介面,到那個時候可能才會符合我心中的 GUI 吧。
如何降回 WSL1
根據 How to Set Linux Distribution version to WSL1 or WSL2 in Windows 10 一文,可以透過幾個簡單指令快速控制版本。
查看版本
wsl --list --verbose
調整版本
wsl --set-version <distribution name> <versionNumber>
Set Version to 2:
wsl --set-version Ubuntu 2
Reference
https://docs.microsoft.com/ z h – t w / w i n d o w s / w s l / c o m p a r e – v e r s i o n s
https://zhuanlan. zhihu.com/ p / 6 9 1 2 1 2 8 0
https://samiouob.github.io/ 2 0 1 9 / 0 6 / 1 7 / W S L 2 /
https://www.tenforums.com/ t u t o r i a l s / 1 6 4 3 1 8 – h o w – s e t – l i n u x – d i s t r i b u t i o n – v e r s i o n – w s l – 1 – w s l – 2 – w i n d o w s – 1 0 – a . h t m l
原本還在wsl 2一直踩坑,看了您的文章就大悟了,降回1.
感谢大大
我也是被WSL2坑了,根本无法用于生产,太慢了
WSL2檔案透過命令 “explorer.exe .” 的方式可以開啟資料夾畫面,位子會在可能”\\wsl$\Ubuntu\home\YOUR_ID”,這樣使用上還可…..嗎?我是立刻把那個位置做了個超聯結擺桌上方便使用~
Hello 咕咕雞:
據說在版本 Windows 10 20H2 之後就在檔案總管直接標籤了,現在 WSL2 也經過不斷的改進改善許多問題,在 WSL 與 Windows 間交互也變得越來越彈性便利了:)
好奇你在用WSL1的時候 用nc 連到題目有沒有一些奇怪的behavior
像是題目做完了 nc 還HANG在那邊 要多敲幾個enter才會關掉等等