Я только что установил wsl 2 на машину (используя Windows 10 pro). Я скачал дистрибутив ubuntu 20.04. Интересно, можно ли делать снимки и клоны, как в Vmware. Спасибо!
решение1
Комментарий @Esther, указывающий на Super User, хорош, но я думаю, что это вопрос, достойный собственного ответа здесь, на Ask Ubuntu. Он также нуждается вобновленоответ, поскольку у WSL появились новые возможности в этой области.
Вопрос о суперпользователе также касается толькоклонирование/резервное копирование, но не настоящие "моментальные снимки", которые я обычно рассматриваю как "инкрементальные" резервные копии. Поэтому я будупытатьсякоснуться «моментальных снимков» в этом ответе.
Резервное копирование дистрибутива WSL1 или WSL2
Поддерживаемый механизм для «резервного копирования» дистрибутива WSL1 или WSL2 — использовать wsl --export
. Как и в случае с большинством резервных копий, лучше всего сначала закрыть используемые файлы, поэтому лучше всего выполнять эти действия из PowerShell.
Выйти из Ubuntu на WSL
Из PowerShell:
wsl -l -v # Confirm your distribution name for the following commands wsl --terminate <distro_name> # Create directory structure, adjust to preference: mkdir "$env:userprofile\WSL\images" # You can hardcode the backup name below if you wish. # This example creates it with a date/timestamp-prefix on the tarball: wsl --export <distroname> "$env:userprofile\WSL\images\$(date -f yyyyMMdd_HHmmss)_Ubuntu.tar"
Восстановление предыдущей резервной копии на новый экземпляр (создание клонированного экземпляра)
Создание клона можно выполнить с помощью wsl --import
команды создания нового экземпляра из резервной копии, сделанной на предыдущем шаге.
И снова из PowerShell:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_previous_backup.tar> --version 2
WSL не «запоминает» пользователя по умолчанию для --import
экземпляров ed, поэтому вам придется задать его вручную. См.этот ответ Суперпользователякак это сделать с помощью /etc/wsl.conf
файла.
Новый, более короткий вариант для WSL2 в WSL Preview
В последней версии WSL (в настоящее время находящейся в стадии предварительной версии) есть несколько дополнительных опций для wsl --import
(а также --export
).
Если вы используете Windows 11 (а я знаю, что у вас ее нет, но у других она может быть, и в конечном итоге у вас тоже), то вы можете установить ее из Microsoft Store. Она там указана как«Подсистема Windows для Linux Preview».
С этой версией вы можете напрямую импортировать файл VHDX (виртуальный диск экземпляра WSL2) из существующего экземпляра в новый экземпляр с помощью wsl --import --vhd
. Во-первых, вам нужно знать, где находится ваш существующий VHDX.
Из PowerShell:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath }
Затем просто импортируйте из этого места с помощью:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_main_distro>\ext4.vhdx> --vhd --version 2
Обратите внимание, если вы получили следующую ошибку:
The process cannot access the file because it is being used by another process.
...тогда попробуйте сделать это по порядку:
wsl --terminate <distro>
существующий экземпляр, затем попробуйте--import
снова.- Остановите Docker Desktop, если он запущен, затем повторите попытку
--import
. wsl --shutdown
, затем попробуйте--import
еще раз.
У этого метода есть один недостаток: это просто «копия» существующего файла WSL2 vhdx. Это означает, что если он потребляет больше места, чем нужно, новый образ будет иметь то же самое «потерянное место» (см.этот ответдля получения дополнительной информации).
Инкрементные снимки
В WSL пока нет функции, которая будет делать инкрементные снимки для экономии места. Онаможетвозможно взломать это вручную, но я еще не тестировал эту технику лично. Идея, на высоком уровне, такова:
- Создайте tarball существующего экземпляра с помощью
tar
Gnuинкрементный дампособенность. - Укажите
--one-file-system
и--xattrs
для захвата нужных файлов в фактической файловой системе (и их расширенных атрибутов, если они используются в вашем дистрибутиве). - Восстановить «неинкрементный» tar-архив из инкрементного tar-архива.
- Восстановите его с помощью
wsl --import
.
Я давно хотел это попробовать, но пока не было времени.