Score:1

โอนย้ายเดสก์ท็อป Ubuntu 20.04 จริงไปยัง WSLg ใน Windows 11 โดยติดตั้ง SSD ของระบบ

ธง rs

ฉันมีระบบเดสก์ท็อป Ubuntu 20.04 ที่มีอยู่จริงซึ่งทำงานบน SSD โดยมี ext4 เป็นระบบไฟล์

ฉันติดตั้ง SSD ใน WSLg Ubuntu ใน Windows 11

เพื่อรักษาประสบการณ์เดิมให้มากที่สุด ฉันต้องการใช้ SSD ที่เมาท์เป็นดิสก์ระบบหลักเพื่อแทนที่การติดตั้งเริ่มต้นของ Ubuntu ใน WSLg

เป็นไปได้ไหม?

ฉันได้ลอง chroot ใน SSD ใน WSLg และเรียกใช้ซอฟต์แวร์ CLI บางตัวได้สำเร็จ แต่ไม่สามารถเปิดแอปพลิเคชัน GUI ทั้งหมดเช่น Jetbrains IDEs ได้

ยิ่งไปกว่านั้น หลังจากการโยกย้าย ฉันหวังว่าฉันยังสามารถบูตเข้าสู่ระบบ Ubuntu จริงโดยใช้ SSD เดียวกันได้เมื่อจำเป็น

ChanganAuto avatar
us flag
คำตอบสั้น ๆ : ไม่ เป็นไปไม่ได้ หรือแม้แต่เป็นที่ต้องการ
NotTheDr01ds avatar
vn flag
@ChanganAuto แค่สงสัย อะไรทำให้คุณมั่นใจขนาดนั้น? คุณอาจจะพูดถูก แต่เดี๋ยวก่อน ฉันเป็นคนมองโลกในแง่ร้าย/มองโลกในแง่ร้ายโดยธรรมชาติ และฉันเห็นความหวัง *บางอย่าง* ที่จะได้ผล อย่างน้อยฉันก็เห็น *ความเป็นไปได้* ในการแก้ปัญหา `chroot` ด้วยการแมปซ็อกเก็ต Interop
rs flag
@ NotTheDr01ds ขอบคุณ! คุณช่วยกรุณาให้ข้อมูลเพิ่มเติมเกี่ยวกับการแมปซ็อกเก็ต Interop ได้ไหม
Score:1
ธง vn

ในขณะที่ฉันยังไม่แน่ใจ (ยัง) ว่ามีวิธีใช้ไดรฟ์เป็นอินสแตนซ์ WSL เอง ฉันคิดว่าเราสามารถทำให้เมธอด chroot ทำงานได้ อย่างน้อยก็ในระดับหนึ่ง

นี่คือการตั้งค่าที่ฉันใช้:

  • อิมเมจ rootfs ของ Ubuntu Base 21.10 แยก (เป็น sudo) ถึง $HOME/chroot/Ubuntu21.10.
  • สำหรับการทดสอบ หลังจากการกำหนดค่าด้านล่างเสร็จสมบูรณ์ ฉลาดติดตั้ง xterm
  • สำหรับใครก็ตามที่พยายามทำสิ่งนี้ด้วย rootfs จริง โปรดทราบว่าคุณควรยกเลิกการใช้ xattr ตัวเลือก เช่น:
    # ดาวน์โหลด Ubuntu Base rootfs ลงในไดเร็กทอรีปัจจุบัน จากนั้น:
    mkdir Ubuntu21.10
    ซีดี !$
    sudo tar -xvz --xattrs -f ../ubuntu-base-21.10-base-amd64.tar.gz
    

จากด้านบนสุดของหัวของฉัน ฉันไม่เห็นเหตุผลที่ว่านี่จะไม่เป็นตัวแทนกึ่งแม่นยำของ SSD ที่มีอยู่ซึ่งคุณสามารถเมานต์ในไดเร็กทอรีภายในอินสแตนซ์ WSL/Ubuntu อย่างไรก็ตาม ฉันแน่ใจว่าจะมีรายการที่ฉันคาดไม่ถึงจากการกำหนดค่าของคุณ แจ้งให้เราทราบผ่านความคิดเห็นที่นี่ (รวมถึงคำถามใหม่หากรับประกัน) หากคุณพบปัญหา

มีอะไรทำงาน

  • ระบบเครือข่าย
  • เรียกใช้ Windows .exes จากภายใน chroot (รวมถึงแอพ GUI)
  • เรียกใช้แอพ Linux GUI จากภายใน chroot (แน่นอนว่าต้องใช้ Windows 11)

สิ่งที่รู้ว่าไม่ทำงาน

  • ไม่สามารถเมานต์ไดรฟ์ Windows จากภายใน chroot (เช่น เมานต์ -t drvfs ...). อาจเป็นเพราะฉันยังไม่สามารถหาวิธีติดตั้ง WSL พิเศษได้ ไดรเวอร์ และ lib ระบบไฟล์ ทุกอย่างทำงานที่นี่ผ่านทั้ง ภูเขา ของระบบไฟล์จริงลงในพาธ chroot หรือผ่าน a เมานต์-ผูก ("ผูกมัด") ของเส้นทางที่มีอยู่จาก WSL ไปยังเส้นทาง chroot

  • เส้นทางของ Windows ไม่ได้บรรจุอยู่ในเส้นทางของ chroot (ซึ่งโดยปกติแล้ว WSL จะทำผ่าน /ในนั้น. ซึ่งหมายความว่าคุณจะต้องใช้เส้นทางที่มีคุณสมบัติครบถ้วนเพื่อเรียกใช้ .exeส. การเติมเส้นทางไม่ใช่เรื่องยากที่จะเขียนสคริปต์ แต่คำตอบนี้ยาวพอดังนั้นฉันจะปล่อยให้ผู้อ่านเป็นแบบฝึกหัด (หรือคำถามแยกต่างหาก)

ไม่ได้ทดสอบ

  • เสียง: หากไม่ได้ผล อาจเป็นเพียงเรื่องของการค้นหาตัวแปรสภาพแวดล้อมที่เหมาะสม หรืออาจติดตั้งซ็อกเก็ตเพิ่มเติมหากจำเป็น

  • รหัส VSC: อาจ มีปัญหาเนื่องจากความคาดหวัง "ผู้ใช้เริ่มต้น" ในส่วนของ VSCode)

  • ของอื่นๆอีกมากมาย

เตรียมครั้งเดียว

มีงานสองสามอย่างในการเตรียมระบบไฟล์ chroot เป็นครั้งแรก

  • จากภายใน WSL (ไม่ใช่ใน chroot) ให้สร้างจุดเชื่อมต่อและคัดลอกรายการ WSL บางรายการ:

    ซีดี <your_chroot_mountpoint_root>
    # สร้างจุดเชื่อมต่อ
    sudo mkdir mnt/ค
    sudo mkdir รัน/WSL
    sudo mkdir mnt/wslg
    sudo mkdir mnt/wsl
    sudo mkdir -p usr/lib/wsl/ไดรเวอร์ usr/lib/wsl/lib
    
    # คัดลอกไฟล์กำหนดค่าที่สร้างโดย WSL - ปัจจุบันใช้งานไม่ได้ แต่มีไว้สำหรับอ้างอิง/ใช้งานในอนาคต
    # sudo cp /etc/ld.so.conf.d/ld.wsl.conf ฯลฯ/ld.so.conf.d
    
    # ลบ resolv.conf ที่มีอยู่และใช้อันที่สร้างโดย WSL
    sudo rm etc/resolv.conf
    sudo ln -rs mnt/wsl/resolv.conf ฯลฯ
    
    # ลบซ็อกเก็ต X ที่มีอยู่ (ถ้ามี) และใช้ซ็อกเก็ตที่สร้างโดย WSL
    [ -S tmp/.X11-unix ] && sudo rm tmp/.X11-unix
    [ -f tmp/.X11-unix ] && sudo rm tmp/.X11-unix
    [ -L tmp/.X11-unix ] && sudo rm tmp/.X11-unix
    sudo ln -rs mnt/wslg/.X11-unix/ tmp/.X11-unix
    
    # ตั้งค่า fstab สำหรับจุดเชื่อมต่อที่เกิดซ้ำ
    
    # (0) ตรวจสอบให้แน่ใจว่าคุณอยู่ในรูทของ chroot
    # (ไดรฟ์ที่ติดตั้งในกรณีของคุณ) มาก่อน
    #การรันแต่ละคำสั่ง
    # (A) ฉันแนะนำให้รันบรรทัดเหล่านี้ทีละบรรทัดเพื่อให้แน่ใจว่า
    #พวกเขาทำงานตั้งแต่ ...
    # (B) พวกเขาไม่ได้อ่อนแอ
    # (C) ตรวจสอบ /etc/fstab หลังจากแต่ละรายการ พวกเขาควรจะ 
    # ชี้ไปที่ไดเร็กทอรีที่เหมาะสมใน chroot ของคุณ
    
    # ตั้งค่าการผูกเมานต์สำหรับซ็อกเก็ตและไฟล์ที่สร้างโดย WSL:
    sudo sh -c 'echo "/mnt/wsl $PWD/mnt/wsl ไม่มีการผูก 0 0" >> /etc/fstab'
    sudo sh -c 'echo "/mnt/wslg $PWD/mnt/wslg ไม่มีการผูก 0 0" >> /etc/fstab'
    #sudo sh -c 'echo "/run/WSL $PWD/run/WSL ไม่มีการผูก 0 0" >> /etc/fstab' # ปัจจุบันทำให้เกิดปัญหา
    
    # สร้างรายการ fstab สำหรับระบบไฟล์ที่จำเป็น สำหรับ
    # ส่วนใหญ่เราทำโดยการค้นหารายการใน 
    # /etc/mtab ที่ WSL สร้างขึ้น คัดลอกไปยัง
    # /etc/fstab และแทนที่เส้นทาง chroot
    
    sudo sh -c "grep '^drvfs[[:space:]]\+/mnt/c\W' /etc/mtab | sed \"s-\(/mnt/c\)-${PWD}\1 -\" >> /etc/fstab"
    sudo sh -c "grep '^none[[:space:]]\+/dev[[:space:]]' /etc/mtab | sed \"s-\(/dev\)-${PWD}\ 1-\" >> /etc/fstab"
    sudo sh -c "grep '^proc[[:space:]]\+/proc[[:space:]]' /etc/mtab | sed \"s-\(/proc\)-${PWD}\ 1-\" >> /etc/fstab"
    sudo sh -c "grep '^devpts[[:space:]]\+/dev/pts[[:space:]]' /etc/mtab | sed \"s-\(/dev/pts\)-$ {PWD}\1-\" >> /etc/fstab"
    sudo sh -c "grep '^sysfs[[:space:]]\+/sys[[:space:]]' /etc/mtab | sed \"s-\(/sys\)-${PWD}\ 1-\" >> /etc/fstab"
    sudo sh -c "grep '^binfmt_misc[[:space:]]\+/proc/sys/fs/binfmt_misc[[:space:]]' /etc/mtab | sed \"s-\(/proc/sys /fs/binfmt_misc\)-${PWD}\1-\" >> /etc/fstab"
    
    # เมานต์รายการที่เพิ่มใหม่เหล่านี้ใน `/etc/fstab` ต้องการเพียงครั้งเดียว -- จากนี้ไป สิ่งเหล่านี้จะเมานต์อัตโนมัติเมื่อคุณรีสตาร์ทอินสแตนซ์ WSL:
    sudo เมานต์ -a
    
  • มีสิ่งหนึ่งที่ใช้ไม่ได้ผลที่นี่ ดูเหมือนเราจะผูกเมานท์ไม่ได้ /รัน/WSL ทาง /etc/fstab. ฉันเชื่อว่านี่เป็นเพราะปัญหาเรื่องเวลา -- WSL อาจยังติดตั้งต้นฉบับไม่เสร็จ /รัน/WSLเราจึงยังไม่สามารถผูกมัดมันได้ การพยายามทำเช่นนั้นจะส่งผลให้เกิดข้อผิดพลาดเมื่อเริ่มต้น WSL ข้อผิดพลาดนี้ไม่ร้ายแรง

    คุณมีหลายตัวเลือก คุณสามารถ: * เรียกใช้บรรทัดความคิดเห็นด้านบนเพื่อสร้างรายการ fstab จัดการกับข้อผิดพลาด แล้วเรียกใช้ sudo เมานต์ -a หลังจากที่คุณรีสตาร์ท WSL (หรือเพิ่มลงในไฟล์เริ่มต้น) * เพียงแค่เรียกใช้ sudo mount --bind /run/WSL/ $PWD/run/WSL/ (จากภายในไดเร็กทอรีรูท chroot) หลังจากรีสตาร์ท WSL (หรือเพิ่มลงในไฟล์เริ่มต้น)

เริ่มต้น chroot:

sudo chroot $PWD env WSL_INTEROP="$WSL_INTEROP" DISPLAY="$DISPLAY" WAYLAND_DISPLAY="$WAYLAND_DISPLAY" XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" /usr/bin/bash

สิ่งนี้เติมสภาพแวดล้อมด้วยตัวแปรสภาพแวดล้อมที่จำเป็นก่อนที่จะเริ่มเชลล์ อาจมีตัวแปรเพิ่มเติมที่คุณต้องการแมป และนั่นก็ง่ายพอ

ฉันขอแนะนำ การปรับปรุงที่เหมาะสม เริ่ม. อย่างน้อยสิ่งนี้จะบอกคุณว่าการแก้ไข DNS นั้นใช้งานได้หรือไม่ ถ้าไม่ตรวจสอบ /etc/resolv.conf ลิงค์สัญลักษณ์

ทางเลือกในการเริ่มต้นอื่นๆ รวมถึงการสร้างผู้ใช้ที่มีชื่อเดียวกับในอินสแตนซ์ WSL ของคุณ จากนั้น:

sudo chroot $PWD env WSL_INTEROP="$WSL_INTEROP" DISPLAY="$DISPLAY" WAYLAND_DISPLAY="$WAYLAND_DISPLAY" XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" runuser -u $USER /usr/bin/bash

โพสต์คำตอบ

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