Điểm:1

Di chuyển Máy tính để bàn Ubuntu 20.04 vật lý sang WSLg trong Windows 11 bằng cách gắn SSD hệ thống

lá cờ rs

Tôi có một hệ thống Máy tính để bàn Ubuntu 20.04 vật lý hiện có chạy trên ổ SSD với ext4 làm hệ thống tệp.

Tôi đã gắn SSD vào WSLg Ubuntu trong Windows 11.

Để giữ nguyên trải nghiệm nhiều nhất có thể, tôi muốn sử dụng SSD được gắn làm đĩa hệ thống chính để thay thế cài đặt mặc định của Ubuntu trong WSLg.

Điều đó có thể không?

Tôi đã thử chroot vào SSD trong WSLg và chạy thành công một số phần mềm CLI. Nhưng nó không thể khởi chạy tất cả các ứng dụng GUI như Jetbrains IDE.

Hơn nữa, sau khi di chuyển, tôi ước mình vẫn có thể khởi động vào cùng một hệ thống Ubuntu vật lý bằng cùng một ổ SSD khi cần.

ChanganAuto avatar
lá cờ us
Câu trả lời ngắn gọn: Không, không thể hoặc thậm chí là mong muốn.
NotTheDr01ds avatar
lá cờ vn
@ChanganAuto Chỉ tò mò thôi, điều gì khiến bạn chắc chắn như vậy? Bạn có thể đúng, nhưng chết tiệt, bản chất tôi là một người bi quan/thực tế và tôi có thể thấy *một số* hy vọng rằng điều này sẽ hiệu quả. Tôi ít nhất có thể thấy *khả năng* giải quyết vấn đề `chroot` bằng cách ánh xạ ổ cắm Interop.
lá cờ rs
@NotTheDr01ds Cảm ơn! Bạn có thể vui lòng cung cấp thêm thông tin về ánh xạ ổ cắm Interop không?
Điểm:1
lá cờ vn

Mặc dù tôi không chắc chắn (chưa) rằng có một cách để sử dụng ổ đĩa như một phiên bản WSL, nhưng tôi nghĩ rằng chúng ta có thể làm cho phương thức chroot hoạt động, ít nhất là ở một mức độ nào đó.

Đây là thiết lập mà tôi đã sử dụng:

  • Hình ảnh rootfs Ubuntu Base 21.10 được trích xuất (dưới dạng Sudo) thành $HOME/chroot/Ubuntu21.10.
  • Để thử nghiệm, sau khi hoàn thành cấu hình bên dưới, apt cài đặt xterm
  • Đối với bất kỳ ai đang cố gắng thực hiện điều này với một rootfs thực sự, hãy lưu ý rằng bạn nên gỡ lỗi bằng xattrs tùy chọn, ví dụ:
    # Tải xuống rootfs của Ubuntu Base vào thư mục hiện tại, sau đó:
    mkdir Ubuntu21.10
    cd !$
    sudo tar -xvz --xattrs -f ../ubuntu-base-21.10-base-amd64.tar.gz
    

Ngoài suy nghĩ của tôi, tôi không hiểu lý do gì khiến đây không phải là biểu diễn bán chính xác của ổ SSD hiện có mà bạn có thể gắn vào thư mục bên trong phiên bản WSL/Ubuntu. Tuy nhiên, tôi chắc chắn rằng sẽ có những mục mà tôi không lường trước được từ cấu hình của bạn. Hãy cho tôi biết qua nhận xét tại đây (cộng với có thể qua câu hỏi mới nếu được bảo hành) nếu bạn gặp sự cố.

Cái gì đang hoạt động

  • mạng
  • Chạy Windows .exes từ bên trong chroot (bao gồm cả ứng dụng GUI)
  • Chạy các ứng dụng GUI của Linux từ bên trong chroot (tất nhiên, yêu cầu Windows 11)

Những gì được biết là không hoạt động

  • Không thể gắn ổ đĩa Windows từ bên trong chroot (ví dụ: gắn kết -t drvfs ...). Điều này có thể là do tôi chưa tìm được cách gắn WSL đặc biệt trình điều khiểnlib hệ thống tập tin. Mọi thứ khác hoạt động ở đây thông qua một trong hai gắn kết của hệ thống tập tin thực tế vào đường dẫn chroot hoặc thông qua một gắn kết --bind ("bind mount") của đường dẫn hiện có từ WSL vào đường dẫn chroot.

  • Đường dẫn Windows không được đưa vào đường dẫn của chroot (WSL thường thực hiện thông qua /trong đó. Điều này có nghĩa là bạn sẽ phải sử dụng đường dẫn đủ điều kiện để chạy bất kỳ .exeS. Điền vào đường dẫn không quá khó để viết kịch bản, nhưng câu trả lời này đủ dài, vì vậy tôi sẽ để lại dưới dạng bài tập cho người đọc (hoặc một câu hỏi riêng).

không được kiểm tra

  • Âm thanh: Nếu nó không hoạt động, thì có lẽ vấn đề chỉ là tìm các biến môi trường phù hợp hoặc có thể thêm một ổ cắm để gắn kết nếu cần.

  • VSCode: Có thể có vấn đề do kỳ vọng của "người dùng mặc định" trên phần của VSCode)

  • Rất nhiều thứ khác

Chuẩn bị một lần

Có một vài nhiệm vụ để chuẩn bị cho hệ thống tập tin chroot lần đầu tiên.

  • Từ bên trong WSL (không phải trong chroot), tạo các điểm gắn kết và sao chép qua một số mục WSL:

    cd <your_chroot_mountpoint_root>
    # Tạo điểm gắn kết
    sudo mkdir mnt/c
    sudo mkdir chạy/WSL
    sudo mkdir mnt/wslg
    sudo mkdir mnt/wsl
    sudo mkdir -p usr/lib/wsl/drivers usr/lib/wsl/lib
    
    # Sao chép các tệp cấu hình do WSL tạo - Hiện tại không hoạt động, nhưng có để tham khảo/sử dụng trong tương lai
    # sudo cp /etc/ld.so.conf.d/ld.wsl.conf etc/ld.so.conf.d
    
    # Xóa độ phân giải hiện có và sử dụng độ phân giải được tạo bởi WSL
    sudo rm vv/resolv.conf
    sudo ln -rs mnt/wsl/resolv.conf, v.v./
    
    # Xóa ổ cắm X hiện có (nếu tồn tại) và sử dụng ổ cắm do WSL tạo
    [ -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
    
    # Thiết lập fstab cho các điểm gắn định kỳ.
    
    # (0) Đảm bảo rằng bạn đang ở thư mục gốc của chroot
    # (ổ đĩa được gắn, trong trường hợp của bạn) trước
    # chạy từng lệnh.
    # (A) Tôi khuyên bạn nên chạy từng dòng một để đảm bảo
    # họ làm việc từ ...
    # (B) Chúng không bình thường
    # (C) Kiểm tra /etc/fstab sau mỗi cái. Họ nên 
    # trỏ đến thư mục thích hợp trong chroot của bạn
    
    # Thiết lập gắn kết liên kết cho ổ cắm và tệp được tạo bởi WSL:
    sudo sh -c 'echo "/mnt/wsl $PWD/mnt/wsl none bind 0 0" >> /etc/fstab'
    sudo sh -c 'echo "/mnt/wslg $PWD/mnt/wslg không ràng buộc 0 0" >> /etc/fstab'
    #sudo sh -c 'echo "/run/WSL $PWD/run/WSL none bind 0 0" >> /etc/fstab' # Hiện đang gây ra sự cố
    
    # Tạo các mục nhập fstab cho các hệ thống tệp cần thiết. Vì
    # phần lớn, chúng tôi làm điều này bằng cách tìm mục nhập trong 
    # /etc/mtab mà WSL đã tạo, sao chép nó sang
    # /etc/fstab và thay thế đường dẫn 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"
    
    # Gắn các mục mới được thêm này vào `/etc/fstab`. Chỉ cần một lần -- Từ đây trở đi, chúng sẽ tự động đếm khi bạn khởi động lại phiên bản WSL:
    gắn sudo -a
    
  • Có một điều không hoàn toàn hiệu quả ở đây. Chúng tôi dường như không thể liên kết gắn kết /chạy/WSL qua /etc/fstab. Tôi tin rằng điều này là do vấn đề về thời gian -- WSL có thể chưa hoàn thành việc cài đặt bản gốc /chạy/WSL, vì vậy chúng tôi chưa thể liên kết gắn kết nó. Cố gắng làm như vậy sẽ dẫn đến lỗi khi khởi động WSL. Lỗi này không gây tử vong.

    Bạn có một số tùy chọn. Bạn có thể: * Chạy dòng nhận xét ở trên để tạo mục nhập fstab, xử lý lỗi rồi chạy gắn sudo -a sau khi bạn khởi động lại WSL (hoặc thêm nó vào tệp khởi động) * Chỉ cần chạy Sudo mount --bind /run/WSL/ $PWD/run/WSL/ (từ bên trong thư mục gốc chroot) sau khi khởi động lại WSL (Hoặc thêm nó vào tệp khởi động).

Bắt đầu chroot:

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

Thao tác này sẽ điền vào môi trường các biến môi trường cần thiết trước khi khởi động trình bao. Có thể có các biến bổ sung mà bạn muốn ánh xạ và điều đó đủ dễ dàng.

tôi đề nghị một cập nhật apt để bắt đầu. Điều này ít nhất sẽ cho bạn biết nếu độ phân giải DNS đang hoạt động. Nếu không, hãy kiểm tra /etc/resolv.conf liên kết tượng trưng.

Các lựa chọn thay thế khởi động khác bao gồm tạo người dùng có cùng tên như trong phiên bản WSL của bạn và sau đó:

sudo chroot $PWD env WSL_INTEROP="$WSL_INTEROP" DISPLAY="$DISPLAY" WAYLAND_DISPLAY="$WAYLAND_DISPLAY" XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" người chạy -u $USER /usr/bin/bash

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.