Score:1

วิธีย้าย Ubuntu ใน WSL

ธง kr

เมื่อฉันเริ่มพัฒนาใน WSL ฉันไม่รู้ว่าทำไม แต่ฉันติดตั้ง อูบุนตู-20.04 แอพจาก Microsoft store แทนที่จะเป็นเพียง อูบุนตู. ฉันรู้ว่าความแตกต่างเพียงอย่างเดียวคือ อูบุนตู-20.04 จะไม่ได้รับการอัปเดตโดยอัตโนมัติเมื่อใหม่ อูบุนตู เวอร์ชั่นจะออก ทั้งหมดที่ฉันต้องการจะทำคือทำให้ อูบุนตู เหมือนกับ อูบุนตู-20.04 โดยไม่ต้องกำหนดค่าใหม่ ฉันคิดจะย้ายไฟล์ทั้งหมดจาก อูบุนตู-20.04 ถึง อูบุนตูแต่ฉันไม่รู้ว่าการทำเช่นนั้นจะปลอดภัยหรือไม่ ไม่มีใครรู้วิธีการทำสิ่งที่ฉันพยายามทำ? ควรทำยัง?

แก้ไข: อูบุนตูทั้งสองเวอร์ชันกำลังทำงาน WSL-2 ฉันได้ตรวจสอบโดยใช้ wsl -l -v ตามที่ @ NotTheDr01ds กล่าว

แก้ไข 2: ฉันต้องการการกำหนดค่าทั้งหมดจาก อูบุนตู-20.04 ถึง อูบุนตู รวมถึงไฟล์ทั้งหมดและแพ็คเกจที่ติดตั้ง

Ilia Manjavidze avatar
kr flag
@ user68186 แน่นอนฉันมี
NotTheDr01ds avatar
vn flag
@ user68186 มีการระบุไว้อย่างชัดเจนในคำถาม ดังนั้นฉันจึงสับสนว่าทำไมคุณถึงถามอย่างนั้น แก้ไข -- โอ้ คุณกำลังถามว่าพวกเขาติดตั้งการแจกจ่าย "วานิลลาธรรมดา" "Ubuntu" จาก Store แล้วหรือยัง คุณพูดถูก นั่นไม่ชัดเจนในคำถาม แต่ฉันคิดไปเอง
NotTheDr01ds avatar
vn flag
ยินดีต้อนรับสู่ถาม Ubuntu สิ่งนี้จะค่อนข้างง่าย ฉันเชื่อว่าถ้าคุณใช้ WSL2 แต่ฉันจะต้องคิดมากกว่านี้หากคุณใช้ WSL1 คุณสามารถทำ `wsl -l -v` และยืนยันว่าทั้งการติดตั้ง Ubuntu ของคุณจาก Store ใช้งาน WSL2 ได้หรือไม่ โปรดแก้ไขคำถามของคุณด้วยผลลัพธ์ของ `wsl -l -v` หากคุณต้องการ ขอบคุณ!
Ilia Manjavidze avatar
kr flag
@user68186 คุณแน่ใจหรือว่าปลอดภัย?
NotTheDr01ds avatar
vn flag
@ user68186 ฉันอยากจะแนะนำสิ่งนั้นเว้นแต่ OP จะรู้จริง ๆ ว่าพวกเขากำลังทำอะไรอยู่ สิทธิ์/ความเป็นเจ้าของ/อื่นๆ จะต้องได้รับการจัดการอย่างระมัดระวัง และไม่ควรทำอย่างยิ่งกับ Windows Explorer ภายใต้ WSL2 อย่างน้อยก็มีวิธีที่ง่ายกว่า/ปลอดภัยกว่ามาก
NotTheDr01ds avatar
vn flag
@IliaManjavidze ตกลงพิมพ์คำตอบตาม WSL2 แต่จะเล็กน้อย ฉันค่อนข้างละเอียด :-)
NotTheDr01ds avatar
vn flag
@ user68186 แน่นอน แต่นั่นจะได้รับการกำหนดค่า *user* จาก `$HOME` เท่านั้น สำหรับฉันแล้ว OP ต้องการการกำหนดค่าทั้งหมด (แพ็คเกจที่ติดตั้ง, การกำหนดค่า `/ etc / ` ฯลฯ )
NotTheDr01ds avatar
vn flag
@IliaManjavidze โปรดยืนยันว่าคุณต้องการการกำหนดค่า *ทั้งหมด* หรือเพียงแค่การกำหนดค่า *ผู้ใช้* ประเด็นของ user68186 นั้นง่ายกว่ามากหากคุณต้องการไฟล์ผู้ใช้ เราสามารถให้คำแนะนำในการรับไฟล์ของคุณจาก `$HOME` ของอินสแตนซ์หนึ่งไปยังอีกอินสแตนซ์
Ilia Manjavidze avatar
kr flag
@ NotTheDr01ds ฉันได้แก้ไขคำถามแล้ว ฉันต้องการการกำหนดค่าทั้งหมดของฉัน
Score:1
ธง vn

ทำไมคุณอาจไม่จำเป็นต้องทำเช่นนี้เลย

ตกลง สิ่งแรกก่อน นี่อาจไม่จำเป็นเลย

ความจริงที่ว่า "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 ที่ช่วย ทำให้ฉันนึกถึงสิ่งนี้.)

สิ่งนี้ค่อนข้างไร้ประโยชน์สำหรับผู้ใช้ส่วนใหญ่ เว้นแต่คุณจะ:

  1. ยกเลิกการลงทะเบียนอินสแตนซ์ (ซึ่งจะลบการกำหนดค่าทั้งหมด) และกำหนดค่าใหม่โดยเรียกใช้อีกครั้ง ubuntu.exe สั่งการ.
  2. ต้องการใช้สิ่งนั้น 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 รูปแบบ.

Ilia Manjavidze avatar
kr flag
ขอบคุณสำหรับสิ่งนี้. หลังจากนี้หากข้อดีเพียงอย่างเดียวที่ฉันได้รับคือชื่อที่สั้นกว่าและชื่อที่สะอาดกว่าฉันก็สามารถเปลี่ยนชื่อได้ใน windows terminal ถ้าคุณไม่รังเกียจ ฉันยังสนใจวิธีการทำ ฉันเป็นมือใหม่และฉันไม่เข้าใจมากนัก ขอบคุณ :)
NotTheDr01ds avatar
vn flag
@IliaManjavidze แน่นอน ฉันได้เพิ่มเข้าไปในคำตอบแล้ว เป็นเรื่องที่น่าสนใจและเป็นประโยชน์มาก IMHO

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา