ทำไมคุณอาจไม่จำเป็นต้องทำเช่นนี้เลย
ตกลง สิ่งแรกก่อน นี่อาจไม่จำเป็นเลย
ความจริงที่ว่า "Ubuntu" (ไม่มีหมายเลขเวอร์ชัน) ใน Store อัปเดตโดยอัตโนมัตินั้น ... จริง แต่ในความเป็นจริงทำให้เข้าใจผิดเล็กน้อย
นี่เป็นเรื่องยากที่จะอธิบาย แต่เมื่อคุณติดตั้ง "Ubuntu" (ไม่มีเวอร์ชัน) จาก Store คุณจะลงเอยด้วย สอง สิ่งของ:
แพ็คเกจ rootfs (install.tar.gz
) ใน C:\Program Files\WindowsApps\CanonicalGroup...
. คุณสามารถดูสิ่งนี้ได้โดยเริ่ม PowerShell การดูแลระบบและเรียกใช้ Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }
.
เมื่อเรียกใช้เป็นครั้งแรก (ผ่าน ubuntu.exe
) โปรแกรมติดตั้งจะสร้างอินสแตนซ์ WSL จริงของคุณใน %UserProfile%\AppData\Local\Packages\CanonicalGroup...
.
เมื่อมีการเปิดตัวใหม่ใน Store สิ่งเดียวที่จะได้รับการอัปเดตคือแพ็คเกจ rootfs มันไม่ ไม่ เปลี่ยนการติดตั้งของคุณ ตัวอย่าง. (เครดิตและขอบคุณ u/zoredache ใน Reddit ที่ช่วย ทำให้ฉันนึกถึงสิ่งนี้.)
สิ่งนี้ค่อนข้างไร้ประโยชน์สำหรับผู้ใช้ส่วนใหญ่ เว้นแต่คุณจะ:
- ยกเลิกการลงทะเบียนอินสแตนซ์ (ซึ่งจะลบการกำหนดค่าทั้งหมด) และกำหนดค่าใหม่โดยเรียกใช้อีกครั้ง
ubuntu.exe
สั่งการ.
- ต้องการใช้สิ่งนั้น
install.tar.gz
เพื่อสร้างอินสแตนซ์ WSL/Ubuntu ที่สอง (โดยใช้ wsl -- นำเข้า
). อินสแตนซ์ที่สร้างขึ้นใหม่จะใช้ rootfs ที่อัปเดตโดย Store
ไม่มีสถานการณ์เหล่านี้เกิดขึ้นบ่อยนัก แม้ว่าจะเป็น Store ที่ไม่มีเวอร์ชัน อูบุนตู
ได้รับการอัปเดตเป็น (น่าจะเป็น) 22.04 มันจะไม่เปลี่ยนแปลงของคุณ ติดตั้งแล้ว อินสแตนซ์ของ 20.04 เพียง rootfs บรรจุุภัณฑ์.
คุณยังคงต้องเรียกใช้ไฟล์ sudo do-release-upgrade -d
เมื่อคุณต้องการอัปเกรดเป็น 22.04 (หรือรุ่นชั่วคราว) ในที่สุด
ดังนั้นเนื่องจาก ... เนื่องจากคุณมีของคุณอยู่แล้ว อูบุนตู-20.04
กำหนดค่าในแบบที่คุณต้องการ ไม่มีประโยชน์อะไรมากสำหรับคุณที่จะเปลี่ยนมัน นอกจากได้ขนาดที่สั้นลง สะอาดขึ้น อูบุนตู
ตั้งชื่อสำหรับอินสแตนซ์ WSL
ยังไงก็ต้องทำยังไง
วิธีที่ WSL2 จัดเก็บข้อมูลของคุณนั้นไม่ใช่เรื่องยากเลยที่จะย้ายการกำหนดค่าไปรอบๆ ระบบไฟล์ทั้งหมดสำหรับอินสแตนซ์ WSL2 ถูกจัดเก็บไว้ในชื่อ HDD เสมือน ext4.vhdx
.
เนื่องจากคุณมีการติดตั้ง Ubuntu สองครั้ง (อูบุนตู
และ อูบุนตู-20.04
) คุณจะพบสองสิ่งนี้ ext4.vhdx
ไฟล์ภายใต้ %userprofile%\AppData\Local\Packages\
. ในการรับตำแหน่งที่แน่นอน ให้เรียกใช้สิ่งต่อไปนี้จาก PowerShell:
Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"
สำหรับการติดตั้งของฉัน นั่นคือ:
...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
วิธีแก้ปัญหาอาจค่อนข้างชัดเจน ณ จุดนี้ แต่แน่นอนว่าให้ใช้ความระมัดระวัง:
ออกจากอินสแตนซ์ WSL ที่กำลังทำงานอยู่ทั้งหมดของคุณ
แล้ว wsl -- ปิดเครื่อง
เพื่อให้แน่ใจว่าไม่มีอะไรทำงานอยู่ในขณะนี้
การสำรองข้อมูลการกำหนดค่าที่มีอยู่ของคุณไม่ใช่ความคิดที่ดี wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar
(หรืออะไรก็ตามที่คุณต้องการเรียกไฟล์สำรอง) สิ่งนี้โดยทั่วไปจะสร้าง tarball ของรูทปัจจุบัน รวมถึงไฟล์ทั้งหมด ความเป็นเจ้าของ และการอนุญาต
ณ จุดนี้ เพียงคัดลอกที่คุณต้องการ (Ubuntu-20.04) ext4.vhdx
เหนืออันที่ติดตั้งใหม่ (Ubuntu) เคล็ดลับที่แท้จริงคือการทำให้แน่ใจว่าคุณคัดลอกที่ถูกต้อง คุณอาจต้องการเรียกใช้ของคุณ อูบุนตู-20.04
การกระจายและทำการเปลี่ยนแปลงอย่างรวดเร็วเพื่อให้คุณเห็นการประทับเวลาหลังบนสำเนา "ถูกต้อง" ได้อย่างง่ายดาย
ข้อกำหนดที่แท้จริงเพียงอย่างเดียวคือผู้ใช้เริ่มต้นสำหรับทั้งสองอินสแตนซ์ควรเหมือนกัน
ความเป็นไปได้อีกอย่าง -- เนื่องจากคุณสำรองข้อมูลการกำหนดค่าที่คุณต้องการด้วย wsl -- ส่งออก
คุณก็ทำได้เสมอ wsl -- นำเข้า
นั้นลงในอินสแตนซ์ใหม่ที่ชื่อว่า อูบุนตู
.
- ก่อนอื่น คุณต้องถอนการติดตั้ง Store
อูบุนตู
.
- จากนั้นเลือกไดเร็กทอรีสำหรับอินสแตนซ์ใหม่ของคุณ สามารถอยู่ที่ไหนก็ได้และไม่ต้องอยู่ภายใต้ของคุณอีกต่อไป
ข้อมูลแอพ
ไดเรกทอรี
wsl --import Ubuntu <ไดเรกทอรี> เส้นทาง\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2
ฉันเก็บของฉันไว้ %userprofile%\Documents\WSL\instances
และของฉัน น้ำมันดิน
สำรองข้อมูลใน %userprofile%\Documents\WSL\images
. นั่นทำให้ฉันสามารถหมุนอินสแตนซ์ใหม่ได้อย่างรวดเร็วผ่าน wsl -- นำเข้า
. เป็นเรื่องดีที่สามารถทดสอบบางอย่างโดยไม่ส่งผลกระทบต่อสภาพแวดล้อมประจำวันของฉัน
หมายเหตุสำหรับผู้ใช้ WSL1 ที่อ่านข้อความนี้ รูทสำหรับ WSL1 ไม่ได้จัดเก็บไว้ในไฟล์ HDD เสมือน แต่เป็นไฟล์และไดเร็กทอรีจริงภายใต้ ...\LocalState\rootfs\
. โปรดอย่าเข้าถึงไฟล์เหล่านี้โดยตรง เนื่องจากอาจทำให้ระบบไฟล์ WSL เสียหายได้ง่าย (ดู Microsoft พัฒนาบล็อก).
หากคุณต้องการเพียงแค่เข้าถึงไฟล์จาก Windows ให้ใช้ \wsl$\<ดิสโทร>
เส้นทางใน Windows ตามที่ระบุไว้ในบล็อก Microsoft นั้น แต่ถ้าคุณต้องการคัดลอกทั้งหมดเหมือนในคำถามนี้ วิธีที่ดีที่สุดคือแปลงอินสแตนซ์เป็น WSL2 ก่อนผ่าน wsl --set-version <distro> 2
(ทำก wsl -- ส่งออก
สำรองไว้ก่อน) หลังจากการแปลง ระบบไฟล์จะอยู่ใน WSL2 ext4.vhdx
รูปแบบ.