วิธีการย้าย WSL Ubuntu จาก Windows เครื่องหนึ่งไปอีกเครื่อง
พอดีว่าตั้งแต่ได้ลองใช้ WSL2 ในการพัฒนาเวปแล้วรู้สึกชอบในความเร็วในการทำงานมาก ๆ เลยเปลี่ยนการทำงานทุกอย่างจากที่เคยใช้ Laragon มาเป็น บน WSL แทนทั้งหมดเลยครับ (เร็วเหมือน Run บน Server Linux จริงเลย) ทีนี้ เราก็ไม่ได้มีการทำงานบน PC เครื่องเดียว แล้ววันนี้มีโอกาสย้ายมาลงบน Notebook เครื่องใหม่อีกเครื่อง เลย note เก็บไว้บอกตัวเอง ว่าเราสามารถ ย้าย WSL Ubuntu ที่เราติดตั้งบน Windows เครื่องนึงไปใช้อีกเครื่องนึงได้ โดยที่เราไม่ต้องมาคอย ติดตั้ง server, app ทุกอย่างที่เราลงไว้ งานลูกค้า ไฟล์ต่าง ๆ ทั้งหมดใน WSL โดย Step ตามนี้
1. Export WSL Ubuntu
ไปที่ Windows เครื่องเดิมของเรา เข้า PowerShell แล้ว run คำสั่ง
wsl --export Ubuntu D:\ubuntu.tar
อันนี้ จะได้ไฟล์ image Ubuntu ของเรา export มาไว้ที่ Drive D นะครับ หรือ เปลี่ยนเป็น Path อื่นที่เราจะ save ไฟล์
ทำการ copy ไฟล์ ubuntu.tar ไปไว้บน Windows PC หรือ notebook เครื่องใหม่ของเรา
ทำการติดตั้ง WSL (ถ้ายังไม่เคยติดตั้งนะครับ)
wsl --install
ทำการ Reboot เครื่องหลังจาก run command เสร็จ
ทีนี้ปกติเวลาเราติดตั้ง WSL จะมี Ubuntu distro ติดตั้งมาให้เราโดย default เราจะไม่ใช้อันที่ติดตั้งมาให้ เพราะเราต้องการ restore distro ของเรากลับเข้าไปเอง ให้ unregister เพื่อลบ distro ทิ้ง
wsl --unregister Ubuntu
Note แน่นอนว่าเราควร ลบ Ubuntu ถ้าเป็นเครื่องที่เราเพิ่งติดตั้งใหม่เท่านั้นนะครับ เพราะว่า ไฟล์ทั้งหมดใน Ubuntu ถ้าเราเคยทำอะไรไว้จะหายไปหมดเลย
Restore WSL Ubuntu อีกเครื่องหนึ่ง
Step ถัดมาทำการ Restore Ubuntu จาก image ที่เราได้ export มาไว้
ไปที่ PowerShell (ไม่ต้องเป็น admin)
# เปลี่ยนเป็น Path ที่เราใช้งาน
mkdir $env:USERPROFILE\WSL\instances\Ubuntu_WSL2
wsl --import Ubuntu_WSL2 $env:USERPROFILE\WSL\instances\Ubuntu_WSL2 D:\ubuntu.tar --version 2
wsl --set-default Ubuntu_WSL2
wsl ~
สังเกตว่าเราต้องตั้งชื่อ image เราเป็นชื่อใหม่นอกจากชื่อ Ubuntu นะครับ เพราะว่าชื่อนี้จะถูกใช้ใน Microsoft Store อาจจะทับกับ image ที่เรา import ได้และกันความสับสนเผื่อเรา install distro อื่น ๆ จาก store มาด้วยครับ (จากตัวอย่างใช้ชื่อว่า Ubuntu_WSL2
แต่สามารถเป็นชื่ออื่นที่เราตั้งเองได้ครับ
เช็คข้อมูลใน Image Ubuntu
ถ้าเรา remote เข้าไปใน ubuntu ที่เราเพิ่ง import กลับเข้าไปก็ควรจะเห็นไฟล์ / service ทุกอย่างอยู่ที่เดิม run ได้เหมือนที่เราเคยใช้งานบนเครื่องเดิมของเราแล้วครับ แต่ว่าเราจะเป็น user root แทนที่เป็น user ที่เราเคยใช้งาน ให้เราเปลี่ยน default user ที่ใช้ login โดยเข้าไปแก้ที่ไฟล์
sudo -e /etc/wsl.conf
แล้ว set ชื่อ user ของเรา
[user]
default=เปลี่ยน username ตรงนี้
ออกจาก image แล้ว restart WSL อีกครั้ง ก็ควรใช้งานได้แล้วครับ
สรุป
เพียงแค่เหตุผลที่เราสามารถ Export และ Import Image Ubuntu ไปยังเครื่องอื่นได้ ผมว่าแค่นี้ก็เป็นข้อดีมาก ๆ ของการใช้ WSL สำหรับการทำ Web Development แล้วครับ ยิ่งโดยเฉพาะ ถ้าภาษาที่เราใช้พัฒนาเป็น PHP ด้วยแล้ว พวก extension และการ support package ต่าง ๆ ของ PHP บน Windows ค่อนข้างตามหลัง พอสมควรเมื่อเทียบกับ Linux ที่เรามักใช้เป็น Server สำหรับการใช้งานจริงครับ