โดยทั่วไป หากคุณสามารถรับ rootfs ของ tarball'd ของ VM ได้ (ในทางทฤษฎี) มันควรจะค่อนข้างตรงไปตรงมา แม้ว่าฉันจะยังไม่ได้ลองก็ตาม เคล็ดลับหลักจะได้รับ rootfs.tar
"ถูกต้อง" ข้อพิจารณา:
จะต้องรวมระบบไฟล์ "ปกติ" ทั้งหมดจาก VM แต่คุณสามารถเพิกเฉยต่อสิ่งต่าง ๆ เช่น /proc
, /ระบบ
, /พัฒนา
ฯลฯ
คุณควรรวม --xattr
ตั้งค่าสถานะเป็น tar เพื่อให้แน่ใจว่าคุณได้รับแอตทริบิวต์เพิ่มเติม นี่ไม่ใช่ค่าเริ่มต้น
เมื่อคุณมี rootfs tarball ที่ถูกต้องแล้ว การนำเข้าใน WSL นั้นง่ายมาก:
wsl --import Ubuntu2110 <ไดเรกทอรี> <tarball> --เวอร์ชัน 2
อาร์กิวเมนต์แรก (ชื่อการแจกจ่าย) สามารถเป็นอะไรก็ได้ที่คุณต้องการ แต่ฉันขอแนะนำให้หลีกเลี่ยง อูบุนตู
เนื่องจากเป็นชื่อของ WSL distro เริ่มต้นและอาจทำให้เกิดข้อขัดแย้งได้
ฉันมักจะตั้งค่า "ไดเร็กทอรี" WSL ของฉัน:
- ที่ไหนสักแห่งที่ง่ายต่อการเข้าถึงจาก PowerShell เช่น
~\Documents\WSL
- มี
~\Documents\WSL\instances\Ubuntu2110
(และอื่น ๆ ) สำหรับการแจกแจงของฉัน
- มี
~\Documents\WSL\images\Ubuntu2110.tar
(และอื่น ๆ ) สำหรับภาพ rootfs ของฉัน
ชั้นฮาร์ดแวร์มีโอกาสที่จะแตกต่างกัน
ไม่ใช่ประเด็นที่คุณอาจคิด อินสแตนซ์ WSL2 เป็น "คอนเทนเนอร์" มากกว่า VM ที่นั่น เป็น VM ทำงาน แต่คุณไม่สามารถเข้าถึงได้ VM เองคือสิ่งที่จัดการการนำเข้าและเรียกใช้ distros/instances/container อินสแตนซ์ WSL2 ทั้งหมดใช้พื้นที่เคอร์เนล ฮาร์ดแวร์เสมือน เครือข่าย ฯลฯ เหมือนกัน แต่แต่ละรายการมีเนมสเปซ PID, chroot และอื่นๆ ของตัวเอง (เพื่อสรุปให้ครอบคลุม)
ความแตกต่างระหว่าง WSL และ VM ของคุณ
การเริ่มต้นระบบ
ความแตกต่างที่ใหญ่ที่สุดที่คุณจะพบก็คือ VM ทำการกำหนดค่าทั้งหมดผ่าน Systemd แน่นอน สิ่งนี้จะไม่เกิดขึ้นกับ WSL2 เนื่องจากระบบไม่รองรับ Systemd WSL ใช้ของตัวเองแทน /ในนั้น
สำหรับการบูตการทำงานร่วมกันกับระบบ VM และ Windows
นั่นหมายความว่า เมื่อคุณเริ่มต้นอินสแตนซ์ WSL2 จาก VM ที่อิมพอร์ต ไม่มีอะไร กำลังจะวิ่ง
คุณจะต้องเริ่มแต่ละบริการด้วยตนเอง หรือใช้ เทคนิคอื่น ๆ เพื่อเริ่มต้นโดยอัตโนมัติ.
ปัญหา Systemd อื่น ๆ
แม้ว่าคุณจะสามารถเริ่มบริการต่างๆ ใน Ubuntu ได้โดยไม่ต้องใช้ Systemd แต่ก็มีจำนวนมากขึ้นเรื่อยๆ ที่พึ่งพา Systemd สิ่งเหล่านี้อาจเป็นปัญหาได้ภายใต้ WSL แม้ว่าจะมีวิธีแก้ไขปัญหาในการเรียกใช้ Systemd ใน WSL แต่ปัจจุบันมีแนวโน้มที่จะ "แฮ็ก"
แอพ GUI
นอกจากนี้ โปรดจำไว้ว่า WSL คือ เป็นหลัก สภาพแวดล้อมบรรทัดคำสั่ง ในการเรียกใช้แอพ GUI คุณจะต้องเรียกใช้อย่างใดอย่างหนึ่ง:
- วินโดวส์ 11
- เซิร์ฟเวอร์ X ของบริษัทอื่นใน Windows
- หรือ
xrdp
สภาพแวดล้อมเดสก์ท็อป
ประการสุดท้าย สภาพแวดล้อมเดสก์ท็อปอาจมีความท้าทายมากยิ่งขึ้น ด้วยเหตุผลหลายประการข้างต้นและอื่นๆ:
- บางคนต้องการ Systemd
- การเรียกใช้แอพ Linux GUI แบบเต็มหน้าจอใน Windows อาจทำให้เกิดปัญหาในการผูกคีย์ได้ (เช่น Alt+แท็บ จะถูกขัดขวางโดย Windows และย้ายออกจาก DE ของคุณ)
- WSLg ใน Windows 11 ใช้ Weston ซึ่งมีตัวจัดการหน้าต่างของตัวเอง