Linux
สมัยก่อนเนี่ย เวลาเราอยากใช้ Linux บน Windows มันต้องลง Virtual Machine (VM) พวก VirtualBox, VMware อะไรแบบนั้น ซึ่งมันก็กิน resource เครื่องเยอะพอสมควร แถม set up ก็ยุ่งยากใช่เล่นเลย แต่พอมี WSL นี่ชีวิตง่ายขึ้นเยอะ
WSL หรือ Windows Subsystem for Linux เนี่ย มันคือระบบที่ทำให้เราสามารถรัน Linux environment ได้ "โดยตรง" บน Windows เลย ไม่ต้องง้อ VM ให้วุ่นวาย เริ่มแรก Microsoft ทำ WSL1 ออกมาก่อน แต่ก็มีข้อจำกัดเยอะอยู่พอสมควร พอมา WSL2 เนี่ย เค้าปรับปรุงใหม่หมด ใช้ Virtual Machine technology จริงๆ แต่ manage ให้เราแบบเนียนๆ เลย
WSL2 มันสำคัญตรงที่มัน "เร็ว" กว่า WSL1 มากๆ เพราะ WSL1 มันแค่จำลอง system call ของ Linux ไปเป็น Windows API ซึ่งบางทีก็ไม่เหมือนกันเป๊ะๆ ทำให้ performance ไม่ดีเท่าที่ควร แต่ WSL2 มันรัน Linux kernel จริงๆ ใน VM ตัวจิ๋ว ทำให้ performance ใกล้เคียงกับการรัน Linux บนเครื่องจริงๆ เลย
นอกจากเรื่องความเร็วแล้ว WSL2 ยังรองรับ Docker ได้ดีกว่า WSL1 ด้วย เพราะ Docker มันต้องใช้ Linux kernel features หลายอย่าง ซึ่ง WSL1 ทำได้ไม่ค่อยดีเท่าไหร่ ใครที่ใช้ Docker บ่อยๆ นี่ WSL2 คือคำตอบเลย
ทุกอย่างมันมีสองด้านเสมอ WSL2 ก็เหมือนกัน
| ข้อดี | ข้อเสีย |
|---|---|
| เร็วกว่า WSL1 มาก | ต้องใช้ Hyper-V virtualization ซึ่งอาจจะ conflict กับ virtualization software อื่นๆ |
| รองรับ Docker ได้ดี | ใช้ resource มากกว่า WSL1 นิดหน่อย (แต่ก็ยังน้อยกว่า VM แบบเต็มๆ) |
| รองรับ Linux kernel features ได้ครบกว่า | ไฟล์ใน WSL2 filesystem จะเข้าถึงจาก Windows ได้ช้ากว่า WSL1 |
มาถึงวิธีติดตั้ง WSL2 กันบ้าง ไม่ยากอย่างที่คิด ตามผมมาเลย
ก่อนอื่นเลย ต้องแน่ใจว่า virtualization ใน BIOS ของเครื่องเราเปิดอยู่ วิธีเช็คคือเปิด Task Manager แล้วไปที่ tab "Performance" ถ้าตรง "Virtualization" เขียนว่า "Enabled" ก็แปลว่าเปิดอยู่แล้ว แต่ถ้าเขียนว่า "Disabled" ต้องเข้าไปเปิดใน BIOS ก่อน (วิธีเปิดใน BIOS จะต่างกันไปตามแต่ละยี่ห้อของ motherboard ลอง Google ดู)
จากนั้นก็ต้อง enable WSL feature ใน Windows ก่อน เปิด PowerShell ในฐานะ Administrator แล้วพิมพ์คำสั่งนี้ลงไป
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
แล้วก็ enable Virtual Machine Platform feature ด้วยคำสั่งนี้
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
เสร็จแล้ว restart เครื่อง
พอ restart เสร็จ ก็ไปที่ Microsoft Store แล้ว download Linux distribution ที่เราอยากใช้ได้เลย มีให้เลือกหลายตัว Ubuntu, Debian, Kali Linux, openSUSE เลือกตามใจชอบ
ถ้าอยากอ่านเรื่องอื่นๆ เพิ่มเติม แวะไปดูที่ SiamCafe Blog ได้นะ
หลังจาก install Linux distribution เสร็จแล้ว ให้เปิด PowerShell แล้วพิมพ์คำสั่งนี้เพื่อ set WSL2 เป็น default version
wsl --set-default-version 2
ถ้าขึ้น error ให้ลอง update WSL kernel ก่อน โดย download ตัว update package ได้จาก https://aka.ms/wsl2kernel แล้ว install
สุดท้ายก็ launch Linux distribution ที่เรา install ไว้ได้เลย มันจะให้เราตั้ง username กับ password หลังจากนั้นเราก็จะได้ command line ของ Linux มาใช้บน Windows แล้ว
แน่นอนว่าอะไรใหม่ๆ มันก็ต้องมีปัญหาบ้าง ผมรวบรวมปัญหาที่เจอบ่อยๆ พร้อมวิธีแก้มาให้แล้ว
บางที WSL มันก็ไม่ start ขึ้นมาเฉยๆ อาจจะขึ้น error อะไรสักอย่าง วิธีแก้เบื้องต้นคือลอง restart เครื่องดูก่อน ถ้าไม่หาย ลอง disable แล้ว enable WSL feature ใน Windows ใหม่ (ตาม Step 2) แล้ว restart อีกรอบ
error นี้มักจะเกิดจากการที่ Windows version ของเราเก่าเกินไป WSL2 ต้องการ Windows 10 version 1903 build 18362 หรือใหม่กว่า ถ้าเจอ error นี้ ให้ update Windows ก่อน
บางที WSL2 มันก็มีปัญหาเรื่อง network ทำให้เรา ping อะไรไม่ได้เลย วิธีแก้คือลอง restart WSL โดยใช้คำสั่ง
wsl --shutdown
แล้ว launch WSL ใหม่
ถ้ายังไม่หาย ลองเช็ค firewall ของ Windows ดูว่ามัน block WSL อยู่หรือเปล่า
และถ้าอยากรู้เรื่องราว IT เจ๋งๆ อีก ตามไปอ่านได้ที่ SiamCafe Blog นะครับ!
ดูวิดีโอเพิ่มเติมเกี่ยวกับWSL2 คืออะไร ติดตั้งยังไง:
สมัยผมทำร้านเน็ตฯ นี่ลงแต่ Windows แท้ๆ ครับ แต่พอมา WSL2 นี่มันเปิดโลกเลยนะ คือแต่ละ Distro มันมีจุดเด่นต่างกัน อย่าง Ubuntu ก็มี Community ใหญ่ หาข้อมูลแก้ง่าย แต่ถ้าชอบ Security หน่อยก็ลอง Debian ดู หรือถ้าสาย Developer เต็มตัว Fedora ก็ไม่เลว
WSL2 มันกิน Resource เครื่องเรานะพี่น้อง โดยเฉพาะ RAM นี่สำคัญเลย ถ้าเครื่อง RAM น้อยๆ อาจจะต้องจำกัด Memory ที่ WSL2 ใช้หน่อย ไม่งั้นเครื่องอืดเป็นเรือเกลือ SiamCafe Blog มีบทความเก่าๆ เรื่อง Performance Tuning ลองไปขุดดูได้
# .wslconfig (อยู่ใน C:\Users\)
[wsl2]
memory=4GB # กำหนด Memory สูงสุดที่ WSL2 ใช้ได้
processors=2 # กำหนด CPU Core ที่ WSL2 ใช้ได้
VS Code นี่แหละตัวเทพ เพราะมันมี Remote Development Extension ที่ทำให้เราเขียน Code บน WSL2 ได้อย่างราบรื่น ไม่ต้อง Copy ไฟล์ไปมาให้วุ่นวายชีวิต แถม Debug ก็ง่ายด้วย
ถึง WSL2 มันจะดีแค่ไหน แต่ก็อย่าลืม Backup ข้อมูลสำคัญใน Distro ของเราด้วยนะพี่น้อง เกิดวันดีคืนดี Windows มันแฮงค์ หรือ WSL2 มันพังขึ้นมา จะได้ไม่เสียใจภายหลัง ผมแนะนำให้ Backup เป็น Image ไว้เลย ง่ายดี
wsl --export .tar
wsl --import .tar
คำสั่งพวกนี้แหละช่วยชีวิตมาหลายรอบแล้ว สมัยก่อน Backup ด้วย Norton Ghost เดี๋ยวนี้ต้อง WSL --export
อันนี้เป็นคำถามยอดฮิตเลย สมัยผมเปิดร้านเกมส์ก็มีคนถามบ่อยๆ (แต่ถามเรื่องเกมส์มากกว่า) คือ WSL2 มันไม่ได้จำลอง Hardware ทั้งหมดเหมือน VM แต่มันแชร์ Kernel กับ Windows ทำให้มันเร็วกว่าและกิน Resource น้อยกว่าเยอะ iCafeForex สมัยก่อนก็ใช้ VM ตอนหลังมาลอง WSL2 ชีวิตดีขึ้นเยอะ
WSL2 มันมี Network Stack เป็นของตัวเอง ซึ่งบางทีมันก็มีปัญหาเรื่อง Performance โดยเฉพาะการเข้าถึง Network Resources ภายนอก ลองเช็ค Firewall ดูว่าอนุญาตให้ WSL2 เข้าถึง Network ได้รึเปล่า หรือลองเปลี่ยน DNS Server ใน WSL2 ดู อาจจะช่วยได้
ง่ายมาก! WSL2 มัน Mount Drive ของ Windows ไว้ที่ `/mnt/
WSL2 มันใช้ Dynamic Disk Image คือมันจะขยายขนาดไปเรื่อยๆ ตามการใช้งาน ถ้าเนื้อที่มันเยอะเกินไป ลองใช้คำสั่ง `wsl --optimize-vhd` เพื่อ Shrink ขนาดของ Disk Image ดู
WSL2 นี่แหละตัวช่วยให้ Developer ที่ใช้ Windows ทำงานได้คล่องตัวขึ้นเยอะ ไม่ต้องลง Dual Boot ให้วุ่นวาย ไม่ต้องใช้ VM ที่กิน Resource เยอะแยะ แต่ก็อย่าลืม Best Practices ที่ผมแนะนำไปนะ จะได้ใช้งาน WSL2 ได้อย่างเต็มประสิทธิภาพ และ Backup ข้อมูลสำคัญไว้เสมอ อย่าประมาท!