บทความ

ย้าย WSL Ubuntu ไปเครื่องใหม่ยังไง ด้วย wsl --export และ wsl --import

Export distro จากเครื่องเดิมเป็นไฟล์ tar หรือ vhdx แล้ว import เข้า WSL บนเครื่องใหม่ ได้โปรแกรม service และไฟล์งานกลับมาครบ เหลือแค่ตั้ง default user ใน /etc/wsl.conf

เผยแพร่
อัปเดต
— เพิ่ม --format, --no-distribution และ import ไฟล์ vhdx
เวลาอ่าน
3 นาที
แท็ก
#Linux#Tools

ตั้งแต่ผมเปลี่ยนจาก Laragon มาพัฒนาเว็บบน WSL2 ก็ติดใจเรื่องความเร็วมาก รู้สึกเหมือนรันบน Linux server จริง ทีนี้ผมไม่ได้ทำงานอยู่เครื่องเดียว พอได้ notebook เครื่องใหม่มา ก็อยากยก Ubuntu ไปทั้งก้อน ทั้ง server ที่ลงไว้ งานลูกค้า และไฟล์ต่าง ๆ โดยไม่ต้องมานั่งลงใหม่ทีละตัว

WSL ทำได้ด้วยสองคำสั่ง คือ wsl --export ที่เครื่องเดิม กับ wsl --import ที่เครื่องใหม่ คำสั่ง wsl ทั้งหมดในบทความนี้พิมพ์ใน PowerShell ฝั่ง Windows (รายการคำสั่งของ WSL)

ดูชื่อ distro ในเครื่องเดิมก่อน

wsl -l -v
  NAME      STATE      VERSION
* Ubuntu    Running    2

ชื่อในคอลัมน์ NAME คือชื่อที่ต้องใส่ในคำสั่งถัดไป Ubuntu ที่ลงจาก Microsoft Store อาจชื่อ Ubuntu เฉย ๆ หรือมีเลขรุ่นต่อท้ายอย่าง Ubuntu-24.04 ตัวอย่างในบทความนี้ใช้ Ubuntu

Export จากเครื่องเดิมเป็นไฟล์เดียว

ปิด distro ก่อน กันไฟล์เปลี่ยนระหว่าง export แล้วสั่ง export ออกมาเป็นไฟล์ tar

wsl --terminate Ubuntu
wsl --export Ubuntu D:\ubuntu.tar

จะได้ไฟล์ ubuntu.tar ไว้ที่ drive D หรือเปลี่ยนเป็น path อื่นที่เราจะเก็บไฟล์ก็ได้

WSL รุ่นใหม่เลือกรูปแบบไฟล์ได้ด้วย --format ซึ่งรับค่า tar, tar.gz, tar.xz และ vhd (ดูได้จาก wsl --help)

wsl --export Ubuntu D:\ubuntu.tar.gz --format tar.gz
wsl --export Ubuntu D:\ubuntu.vhdx --format vhd
  • tar.gz บีบอัดให้ไฟล์เล็กลง เหมาะกับตอนต้อง copy ผ่าน USB หรือ network
  • vhd export ดิสก์ของ distro ออกมาเป็นไฟล์ .vhdx ทั้งก้อน ใช้ได้กับ distro ที่เป็น WSL 2 เท่านั้น และตอน import ไม่ต้องแตกไฟล์ทีละไฟล์

ถ้า WSL บอกว่าไม่รู้จัก --format แปลว่ายังเป็นรุ่นเก่า สั่ง wsl --update ก่อน หรือใช้ --vhd แทน --format vhd ซึ่งรุ่นเก่ารองรับอยู่แล้ว (เอกสารของ Microsoft)

จากนั้น copy ไฟล์ที่ได้ไปไว้ที่เครื่องใหม่

ติดตั้ง WSL บนเครื่องใหม่โดยไม่ลง Ubuntu

wsl --install เฉย ๆ จะลง Ubuntu ตัวใหม่มาให้ด้วย แต่เราจะเอา Ubuntu ตัวเดิมมาใส่เอง เลยสั่งลงแค่ WSL

wsl --install --no-distribution

ถ้า Windows ขอให้รีสตาร์ท ก็รีสตาร์ทหนึ่งรอบ

ถ้าเครื่องใหม่มี Ubuntu ติดมาแล้ว จะเก็บไว้ก็ได้ เพราะเราจะ import ด้วยชื่อใหม่ แต่ถ้าอยากลบทิ้งให้เครื่องสะอาด สั่ง

wsl --unregister Ubuntu

Import เข้าเครื่องใหม่ด้วยชื่อใหม่

mkdir $env:USERPROFILE\WSL\Ubuntu_WSL2
wsl --import Ubuntu_WSL2 $env:USERPROFILE\WSL\Ubuntu_WSL2 D:\ubuntu.tar --version 2
wsl --set-default Ubuntu_WSL2
wsl ~
  • Ubuntu_WSL2 คือชื่อ distro ใหม่ ตั้งเองได้ ผมเลี่ยงชื่อ Ubuntu เฉย ๆ เพราะซ้ำกับชื่อที่ Microsoft Store ใช้ ถ้าวันหลังลง Ubuntu จาก Store เพิ่มจะได้ไม่สับสน
  • โฟลเดอร์ที่สองคือที่เก็บดิสก์ของ distro WSL จะสร้างไฟล์ ext4.vhdx ไว้ในนั้น เปลี่ยนเป็น drive อื่นที่มีที่ว่างเยอะกว่าก็ได้
  • --version 2 ให้ distro นี้รันบน WSL 2
  • wsl --set-default ตั้งให้คำสั่ง wsl เปิด distro นี้เป็นตัวหลัก ส่วน wsl ~ เปิด distro แล้วพาไปที่ home

ไฟล์ .tar.gz ใช้คำสั่งเดียวกันได้เลย แค่เปลี่ยนชื่อไฟล์ ส่วนไฟล์ .vhdx มีสองทาง

wsl --import Ubuntu_WSL2 $env:USERPROFILE\WSL\Ubuntu_WSL2 D:\ubuntu.vhdx --vhd
wsl --import-in-place Ubuntu_WSL2 $env:USERPROFILE\WSL\Ubuntu_WSL2\ubuntu.vhdx
  • --import … --vhd copy ไฟล์ .vhdx ไปไว้ในโฟลเดอร์ที่บอก ไฟล์ต้นทางลบทิ้งได้หลัง import เสร็จ
  • --import-in-place ใช้ไฟล์ .vhdx ตรงที่วางอยู่เป็นดิสก์ของ distro เลย ไม่ copy ซ้ำ เลยควรย้ายไฟล์ไปไว้ในโฟลเดอร์ที่จะเก็บถาวรก่อน และห้ามลบไฟล์นั้นทีหลัง

เข้ามาแล้วเป็น root ให้ตั้ง default user ใน /etc/wsl.conf

เข้า distro ที่เพิ่ง import มา ไฟล์และ service ทุกอย่างจะอยู่ที่เดิม รันได้เหมือนบนเครื่องเก่า ต่างกันแค่เราจะเข้ามาเป็น root เพราะ distro ที่ import เข้ามาเริ่มด้วย root เสมอ (เอกสารของ Microsoft) ให้เปิดไฟล์ /etc/wsl.conf ใน Ubuntu

sudo -e /etc/wsl.conf

แล้วใส่ชื่อ user ที่เราใช้บนเครื่องเดิม (ตัวอย่างใช้ phat)

[user]
default=phat

ออกจาก distro แล้วปิดให้สนิทจาก PowerShell ก่อนเปิดใหม่ WSL จะอ่าน wsl.conf ตอน distro เริ่มเท่านั้น (เอกสารของ Microsoft)

wsl --terminate Ubuntu_WSL2
wsl ~

WSL รุ่นใหม่ตั้ง default user จาก PowerShell ได้ด้วยคำสั่งเดียว wsl --manage Ubuntu_WSL2 --set-default-user phat ถ้า WSL ในเครื่องรองรับ ก็ข้ามการแก้ไฟล์ได้

Export แล้ว import ได้ คือข้อดีที่ผมชอบของ WSL

ยกทั้งเครื่องมือและโปรเจกต์ไปเครื่องใหม่ได้ในไม่กี่คำสั่ง ผมว่าแค่นี้ก็คุ้มที่จะใช้ WSL ทำเว็บแล้ว โดยเฉพาะงาน PHP ที่ extension และ package หลายตัวบน Windows ยังตามหลัง Linux อยู่พอสมควร ทำงานบน WSL เลยได้สภาพแวดล้อมใกล้กับ server จริงด้วย

อ่านต่อ

ล่าสุด

ดูทั้งหมด →