Рейтинг:1

Перенесите физический рабочий стол Ubuntu 20.04 на WSLg в Windows 11, установив системный SSD

флаг rs

У меня есть существующая физическая система Ubuntu 20.04 Desktop, работающая на SSD с ext4 в качестве файловой системы.

Я установил SSD в WSLg Ubuntu в Windows 11.

Чтобы максимально сохранить тот же опыт, я хочу использовать подключенный SSD в качестве основного системного диска, чтобы заменить установку Ubuntu по умолчанию в WSLg.

Это возможно?

Я попробовал chroot на SSD в WSLg и успешно запустил некоторое программное обеспечение CLI. Но ему не удалось запустить все эти приложения с графическим интерфейсом, такие как IDE Jetbrains.

Более того, после миграции я хотел бы по-прежнему загружаться в ту же физическую систему Ubuntu, используя тот же SSD, когда это необходимо.

ChanganAuto avatar
флаг us
Краткий ответ: нет, невозможно и даже нежелательно.
NotTheDr01ds avatar
флаг vn
@ChanganAuto Просто любопытно, почему ты так уверен? Вы можете быть правы, но, черт возьми, я пессимист/реалист по натуре, и я вижу *некоторую* надежду на то, что это сработает. По крайней мере, я вижу *возможность* решения проблемы `chroot` путем сопоставления сокета Interop.
флаг rs
@NotTheDr01ds Спасибо! Не могли бы вы предоставить дополнительную информацию о сопоставлении сокета Interop?
Рейтинг:1
флаг vn

Хотя я (пока) не уверен, что есть способ использовать диск как сам экземпляр WSL, я думаю, что мы можем заставить метод chroot работать, по крайней мере, до некоторой степени.

Вот установка, которую я использовал:

  • Образ корневой файловой системы Ubuntu Base 21.10 извлечен (как sudo) в $ ГЛАВНАЯ/chroot/Ubuntu21.10.
  • Для тестирования после того, как приведенная ниже конфигурация была завершена, метко установить xterm
  • Для тех, кто пытается это сделать с реальной rootfs, обратите внимание, что вы должны распаковать с помощью xattrs вариант, например:
    # Загрузите Ubuntu Base rootfs в текущий каталог, затем:
    мкдир Ubuntu21.10
    диск !$
    sudo tar -xvz --xattrs -f ../ubuntu-base-21.10-base-amd64.tar.gz
    

Внезапно я не вижу причин, по которым это не будет полуточным представлением существующего SSD, который вы смогли смонтировать в каталог внутри экземпляра WSL/Ubuntu. Однако я уверен, что будут элементы, которых я не ожидал от вашей конфигурации. Дайте мне знать через комментарий здесь (плюс, возможно, через новый вопрос, если это оправдано), если у вас возникнут проблемы.

Что работает

  • Сеть
  • Запуск Windows .исполняемыйs из chroot (включая приложения с графическим интерфейсом)
  • Запуск приложений Linux с графическим интерфейсом из chroot (требуется, конечно, Windows 11)

Что, как известно, не работает

  • Не удается смонтировать диски Windows из chroot (например, монтировать -t дрвфс ...). Вероятно, это связано с тем, что мне пока не удалось найти способ смонтировать специальный WSL водители и библиотека файловые системы. Все остальное здесь работает либо через устанавливать фактической файловой системы в путь chroot или через монтировать --bind («bind mount») существующего пути из WSL в путь chroot.

  • Путь Windows не заменяется на путь chroot (что обычно делает WSL через /в этом. Это означает, что вам придется использовать полный путь для запуска любого .исполняемыйс. Заполнить путь не так уж сложно в сценарии, но этот ответ достаточно длинный, поэтому я оставлю его читателю в качестве упражнения (или отдельного вопроса).

Не испытано

  • Аудио: если это не работает, то, вероятно, это просто вопрос поиска правильных переменных среды или, возможно, еще одного сокета для монтирования, если это необходимо.

  • VSCode: май есть проблемы из-за ожидания «пользователя по умолчанию» со стороны VSCode)

  • Много других вещей

Разовая подготовка

Есть несколько задач по подготовке файловой системы chroot в первый раз.

  • Изнутри WSL (не в chroot) создайте точки монтирования и скопируйте некоторые элементы WSL:

    cd <your_chroot_mountpoint_root>
    # Создаем точки монтирования
    sudo mkdir mnt/c
    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 и т. д./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 none bind 0 0" >> /etc/fstab'
    sudo sh -c 'echo "/mnt/wslg $PWD/mnt/wslg none bind 0 0" >> /etc/fstab'
    #sudo sh -c 'echo "/run/WSL $PWD/run/WSL none bind 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:
    судо монтировать -а
    
  • Есть одна вещь, которая здесь не совсем работает. Мы не можем привязать крепление /выполнить/ВСЛ с помощью /etc/fstab. Я считаю, что это связано с проблемой синхронизации - WSL, вероятно, еще не завершил монтирование оригинала. /выполнить/ВСЛ, поэтому мы пока не можем его смонтировать. Попытка сделать это приведет к ошибке при запуске WSL. Эта ошибка не является фатальной.

    У вас есть несколько вариантов. Вы также можете: * Запустите закомментированную строку выше, чтобы создать запись fstab, обработайте ошибку, а затем запустите судо монтировать -а после перезапуска 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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.