Как wsl перенести на другой диск
Windows Subsystem Linux или сокращено WSL появилась в Windows 10 14316. Благодаря этой платформе пользователи могут устанавливать и запускать из среды Windows 10 дистрибутивы Linux, получая при этом доступ к файловой системе Windows. Время от времени Microsoft вносит в функционал подсистемы улучшения, так, например, в Windows 10 2004 в нее были добавлены возможность просмотра WSL -файлов из Проводника, а также возможность экспорта и импорта установленных дистрибутивов Linux.
Последняя функция может оказаться весьма полезной для тех, кто желает перенести установленный и настроенный дистрибутив Linux с одного компьютера на другой либо на тот же ПК после полной переустановки Windows. Всё что вам нужно, это немного свободного времени, проведенного за работой в консоли PowerShell . Экспорт и импорт WSL в Windows 10 осуществляется с помощью утилиты wsl.exe.
Предположим, что у вас уже имеется установленный из Магазина и настроенный дистрибутив Linux.
Откройте от имени администратора PowerShell и выполните команду wsl --list --all , которая выведет список установленных дистрибутивов, запомните или запишите название нужного.
Затем выполните команду следующего вида:
wsl.exe --export NameDis Backup
Вместо NameDis укажите название экспортируемого дистрибутива (в нашем примере это Ubuntu) , а вместо Backup — полный путь к будущему архиву в формате TAR . Название архив может иметь произвольное. На создание бекапа уйдет некоторое время, после его создания в консоли появится приглашение ввода.
Процедура импорта очень похожа.
Для этого на компьютере с установленной подсистемой Linux нужно открыть от имени администратора консоль PowerShell и выполнить такую команду:
wsl.exe --import NameDis Folder Backup
NameDis — это желаемое название импортируемого дистрибутива, Folder — каталог на жестком диске, в который дистрибутив будет установлен, а Backup — полный путь к заблаговременно перенесенному на компьютер архиву TAR . Пример такой команды импорта вы можете видеть на скриншоте.
После того как импорт будет выполнен, можете запустить дистрибутив командой wsl --distribution NameDis , где NameDis — это имя, которое вы присвоили дистрибутиву Linux приведенной в предыдущем абзаце командой.
Ну и при необходимости вы всегда можете удалить импортированный дистрибутив командой wsl.exe --unregister NameDis .
10.01.2022
itpro
PowerShell, Windows 10, Windows 11
Комментариев пока нет
Подсистема Windows для Linux (Windows Subsystem for Linux, WSL2) сегодня широко используется разработчиками, администраторами и простыми пользователями для запуска различных дистрибутивов (Ubuntu, Debian, OpenSUSE, Kali Linux, Alpine), инструментов и приложений Linux в среде Windows без использования виртуализации и двойной загрузки. В этой статье мы рассмотрим, как перенести файлы установленного WSL на другой диск или компьютер.
При установке WSL в Windows все файлы среды сохраняются на системный диск (C:\ как правило). Если размер системного диска недостаточен (небольшой SSD диск), то со временем размер файловой системы WSL может серьезно вырасти, и вы захотите перенести файлы WSL на другой диск. В Windows 10 и 11 вы можете перенести WSL на другой диск или компьютер несколькими способами.
В первую очередь определите текущий размер файловой системы WSL на вашем диске. Выведите список установленных дистрибутивов WSL на компьютере:
wsl --list --verbose
В нашем примере установлена только Ubuntu-20.04. Выполните следующую команду PowerShell, чтобы получить название UWP приложения с вашим дистрибутивом Linux:
Get-AppxPackage -Name "*Ubuntu20*" | Select PackageFamilyName
В моем примере название UWP пакета — CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc. Файловая система WSL данного дистрибутива Linux хранится в VHD файле ext4.vhdx в каталоге %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
$path= $env:USERPROFILE+ ”\AppData\Local\Packages\” + (Get-AppxPackage -Name "*Ubuntu20*").PackageFamilyName + “\LocalState\ext4.vhdx”
Get-ChildItem -Path $path | fl @>
optimize-vhd -Path -Mode full
Путь к VHD файлу данного дистрибутива WSL хранится в параметре BasePath ветки реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\ .
Можно остановить WSL, переместить ext4.vhdx на другой диск и изменить путь к каталогу в реестре. Но этот сценарий не рекомендуется!
В современных билдах Windows 10 и 11 можно выполнить корректный перенос среды WSL с помощью встроенной процедуры экспорта и импорта.
Запустите среду wsl и проверьте имя пользователя:
В нашем примере это sysops.
Закройте все приложения, запущенные в среде Linux и консоли WSL:
Чтобы создать резервную копию (экспортировать) вашу среду WSL и поместить ее на отдельный диск E:, выполните команды:
mkdir e:\backup
wsl --export Ubuntu-20.04 e:\backup\ubuntu.tar
Дождитесь окончания экспорта WSL (может занять длительное время). В целевом каталоге появится TAR архив с вашей средой WSL.
Теперь можно удалить файлы среды WSL на исходном диске:
wsl --unregister Ubuntu-20.04
Создайте каталог для вашего образа Linux на новом диске и импортируйте tar архив в WSL командой:
mkdir E:\WSL
wsl --import Ubuntu-20.04 E:\WSL\ E:\backup\ubuntu.tar
Для входа в Ubuntu по умолчанию используется root. Чтобы сменить его на другое имя пользователя (мы получили его ранее), выполните:
cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps
.\ubuntu2004.exe config --default-user sysops
Запустите вашу среду WSL:
wsl -d Ubuntu-20.04
Совет. Нужный дистрибутив WSL можно запустить из Windows Terminal.
Этот же сценарий можно использовать для переноса настроенного образа WSL на другие компьютеры.
Вывести список доступных образов WSL:
Завершаем все процессы:
узнать текущий каталог, в котором хранится образ WSL:
lxrunoffline get-dir -n Ubuntu-20.04
Перенос WSL образ на другой диск:
lxrunoffline move -n Ubuntu-20.04 -d d:\wsl2\Ubuntu-20.04
После окончания переноса, запустите дистрибутив WSL. Командой:
wsl -d Ubuntu-20.04
lxrunoffline run -n Ubuntu-20.04 -w
Предыдущая статья Следующая статья
Вам понадобится новое приложение, чтобы открыть эту ссылку Windows Defender
24.11.2020
itpro
Windows 10, Windows Server 2016
комментариев 40
В этой статье мы рассмотрим, как перенести установленную Windows с одного жесткого диска на другой только с помощью встроенных средств без использования сторонних программ (таких, как Paragon, AOMEI или Acronis). Эта инструкция поможет вам, например, перенести Windows с HDD на новый SSD диск, или склонировать установленную и настроенную Windows на другой компьютер (есть нюансы) или новый жесткий диск большего размера.
В качестве примера мы склонируем установленную Windows 10 на новый диск с помощью загрузочной USB флешки, командной строки и встроенной утилиты robocopy.
Обратите внимание, что перенос операционной системы копированием на новый диск будет гарантированно работать только при переносе в рамках одного и того же компьютера (или сходных по аппаратному обеспечению), когда вы клонируете вашу Windows на другой жесткий диск того же компьютера. Если вы хотите скопировать установленную Windows на диск для другого компьютера, то для его запуска на новом железе придется повозиться с драйверами контроллеров дисков, чипсета, видеокарты.
Вы сможете склонировать жесткий диск на новый диск меньшего размера, если место, занятое на системном диске текущей Windows меньше, чем емкость нового диска. Если это не так, придется удалить/переместить часть файлов с диска. Чаще всего такой вопрос возникает при переносе на SSD диск меньшей емкости, чем обычный HDD.
Процедура переноса Windows на другой диск зависит от, того, в каком режиме работает ваш компьютер: BIOS или UEFI. Выполните команду:
Если в строке BIOS mode (режим BIOS) указано Legacy (Устаревший), у вас компьютер с BIOS (или UEFI работает в режиме Legacy/CSM). Если указано UEFI – у вас современных компьютер и Windows установлена в UEFI режиме.
- Если компьютер работает в нативном UEFI режиме и имеет таблицу разделов GPT, я буду помечать команды для таких компьютеров UEFI GPT ;
- Если у вас старый компьютер с BIOS или с UEFI но в Legacy режиме, а таблица разделом MBR – команды будут помечены меткой BIOS MBR .
В первую очередь нужно создать таблицы разделов на новом диске. Это можно сделать непосредственно из запущенной Windows 10 с помощью diskpart. Если диск новый, инициализируйте его с помощью консоли diskmgmt.msc или PoweShell команды Initialize-Disk:
Get-Disk | Where-Object PartitionStyle –Eq 'RAW' | Initialize-Disk
Теперь создадим таблицу разделов на диске. Откройте командную строку с правами администратора и выполните команду:
В контексте diskpart выполните следующие команды.
list disk
select disk 1 (в зависимости от номера вашего нового диска, который выдала предудущая команда)
clean
Далее команды отличаются в зависимости от типа вашей платформы.
Для UEFI GPT :
convert gpt
create partition efi size=100
format fs="FAT32" quick label="EFI"
create partition msr size=16
create partition primary
format fs="NTFS" quick label="NEW_SYSTEM"
exit
Мы создали на новом диске таблицу разделов GPT, два небольших служебных раздела (EFI и MSR), на оставшемся месте создан один большой раздел (см. подробнее о структуре GPT разделов для EFI).
Если на диске уже есть разделы, вы можете изменить тип таблицы разделов с MBR на GPT без потери данных с помощью встроенной утилиты mbr2gpt.exe.
Для BIOS MBR следующие команды:
convert mbr
create partition primary align=1024
active
format fs="NTFS" quick label="NEW_SYSTEM"
exit
Для клонирования Windows на новый диск вам понадобится загрузочная USB флешка с установочным образом Windows 10 (проще всего создать такую флешку с помощью MediaCreationTool).
Перезагрузите ваш компьютер и загрузитесь с установочного диска. При появлении окна установки Windows нажмите Shift+F10 чтобы открыть командую строку. В открывшемся окне выполните команды
На скриншоте ниже видно, что оригинальному разделу Windows на старом диске присвоена буква диска E:, а большому разделу на новом диске (с меткой NEW_SYSTEM) назначена буква D:.
Если буквы диска не назначены, вы можете назначить их из diskpart следующим образом:
select disk 1
list part
select part 1
assign
list volume
Теперь нужно скопировать файлы со старого диска с установленной Windows на новый. Проще всего это сделать с помощью robocopy. Следующая команда robocopy скопирует все символические ссылки, файлы и папки с атрибутами, NTFS правами и timestamp. При этом лог копирования будет сохранен в корень целевого диска:
robocopy E:\ D:\ /E /COPYALL /SL /XJ /R:3 /W:3 /UNILOG:"D:\rcopy.log" /TEE
Копирование может занять продолжительно время в зависимости от размер старого диска (в моем случае копирование 60 Гб диска заняло около часа).
Теперь можно выключить компьютер и отключить старый жесткий диск.
Следующий шаг, настройка загрузчика Windows на новом диске.
Опять загрузите компьютер в среде установки Windows и запустите командную строку ( Shift+F10 ).
Восстановление BIOS MBR загрузчика.
Проверьте букву диска, назначенную новому большому разделу на диске:
Диску назначена буква C:
Восстановите BCD загрузчик на диске C:
bcdboot C:\Windows /S C:
Исправьте MBR запись и записи в BCD загрузчике:
bootrec.exe /FixMbr
bootrec.exe /FixBoot
bootrec.exe /RebuildBcd
Восстановление загрузчика на UEFI GPT компьютере (подробно эта процедура описана в статье восстановление загрузчика Windows 10 на UEFI компьютере).
Нужно определить букву системного диска и назначить букву диска разделу с EFI.
В данном примере системному разделу назначена буква диска C. Вам нужно назначить букву разделу EFI (размер 100 мб и файловая система FAT32) следующими командами (в командах измените номера разделов в соответствии с вашей конфигурацией):
select volume 1
assign letter M:
exit
Теперь нужно пересоздать конфигурацию BCD загрузчика:
cd /d m:\efi\microsoft\boot\
ren BCD BCD.bak
bcdboot С:\Windows /l en-us /s M: /f ALL
Перезагрузите компьютер и отключите загрузочную флешку. Убедитесь, что Windows корректно загрузилась с нового диска.
Все установленные приложения, документы и настройки остались на месте. Вы успешно скопировали установленную Windows 10 на новый диск.
При копировании файлов на новый диск с помощью robocopy могут встречаться ошибки. Откройте на новом диске файл rcopy.log и посмотрите какие файлы не были скопированы. В моем случае не было скопировано 94 файла (в моем случае не скопировать только мусорные файлы).
В статье опущена процедура создания загрузочной записи для среды восстановления Windows. Обычно она находится на отдельном разделе System Reserved. Если вы хотите настроить работу среду Windows Recovery Environment (WinRE) , следуйте инструкциям в статье.
Предыдущая статья Следующая статья
Защита RDP от подбора паролей с блокировкой IP правилами Windows Firewall
Установка принтеров пользователям домена AD с помощью групповых политик
Ошибка загрузки Windows: An operating system wasn’t found
Исправляем ошибку: Службе профилей пользователей не удалось войти в систему
Не очень понятно здесь:
«Вам нужно назначить букву разделу EFI (размер 100 мб и файловая система FAT32) следующими командами (в командах измените номера разделов в соответствии с вашей конфигурацией):
select volume 2»
на скриншоте 100 MB — это volume 1.
Нет?
Да, здесь ошибка. Поправил текст.
Прикольно. Сохраню. Обычно это делаю через Acronis 🙂
переход на другой диск или с mbr на uefi
1. Гружусь через любой WinPE .
2. Снимаю образ
Dism /Capture-Image /ImageFile:d:\windows.wim /CaptureDir:c:\ /Name:"Windows"
3. Подготавливаю новый диск в UEFI
rem == CreatePartitions-UEFI.txt ==
rem == These commands are used with DiskPart to
rem create four partitions
rem for a UEFI/GPT-based PC.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
convert gpt
rem == 1. System partition =========================
create partition efi size=260
rem ** NOTE: For Advanced Format 4Kn drives,
rem change this value to size = 260 **
format quick fs=fat32 label="System"
assign letter="S"
rem == 2. Microsoft Reserved (MSR) partition =======
create partition msr size=16
rem == 3. Windows partition ========================
rem == a. Create the Windows partition ==========
create partition primary
rem == b. Create space for the recovery tools ===
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Windows partition =========
format quick fs=ntfs label="Windows"
assign letter="W"
rem === 4. Recovery tools partition ================
create partition primary
format quick fs=ntfs label="Recovery tools"
assign letter="R"
set
gpt attributes=0x8000000000000001
list volume
list disk
exit
4. Заливаю образ.
rem == ApplyImage.bat ==
rem == These commands deploy a specified Windows
rem image file to the Windows partition, and configure
rem the system partition.
rem Usage: ApplyImage WimFileName
rem Example: ApplyImage E:\Images\ThinImage.wim ==
rem == Set high-performance power scheme to speed deployment ==
call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
rem == Apply the image to the Windows partition ==
dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\
rem == Copy boot files to the System partition ==
W:\Windows\System32\bcdboot W:\Windows /s S:
:rem == Copy the Windows RE image to the
:rem Windows RE Tools partition ==
md R:\Recovery\WindowsRE
xcopy /h W:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
:rem == Register the location of the recovery tools ==
W:\Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target W:\Windows
:rem == Verify the configuration status of the images. ==
W:\Windows\System32\Reagentc /Info /Target W:\Windows
Подсистема WSL (Windows Subsystem for Linux или Windows для Linux) позволяет запускать среду Linux без графического интерфейса непосредственно в Windows без необходимости использовать традиционную виртуальную машину или устанавливать Linux второй операционной системой. Для удобства в статье я буду называть Linux-ом любую гостевую операционную систему: Ubuntu, Debian и т.д.
В официальной документации вы можете найти команды WSL и многое другое.
Подробное описание установки WSL можно найти в официальной документации, здесь я приведу краткий алгоритм. Шаги:
Теперь можем устанавливать Linux.
Открываем Microsoft Store (можете найти через поиск Windows) и в поиске Microsoft Store вводим «Linux». После этого увидим список дистрибутивов Linux, которые можно нам установить:
К примеру, установим Ubuntu 20.04 LTS, для этого нажимаем на плитку с данной системой. В форме информации о Ubuntu нажимаем на кнопку Получить. После этого произойдёт загрузка и установка дистрибутива.
После установки у нас в меню Пуск появится иконка запуска Ubuntu.
Запускаем Ubuntu. Появится предложение ввести имя нового пользователя и установить ему пароль. Указываем данные и через минуту система готова к работе.
Все образы устанавливаются на диск C. У многих он небольшого размера, поэтому возникает желание перенести образ установленного Linux на другой диск. Для этого делаем следуюшее:
zaharov — это название вашей учётной записи в системе, в моём случае zaharov у вас другая.
- Запускаем PowerShell и выполняем команду wsl —list —all чтобы узнать какие гостевые системы у нас установлены и как они именуются:
- Переносим Ubuntu-20.04 в D:\Program\WCL, для этого выполняем команду в командной строке или в PowerShell:
В строке с командами корректно указываем название переновимой системы.
WslRegisterDistribution failed with error: 0xc03a001a
Данная ошибка появляется, когда мы после установки Linux запускаем его и начинается его «настройка» и далее нет возможности запустить Linux. Решение есть. После первичного запуска «гостевой» операционной системы у нас возникает ошибка:
Закрываем данное окно и делаем следующее. Идём по пути:
В данном каталоге у нас находятся как раз пакеты для установки. Находим необходимый нам пакет. К примеру, если мы устанавливаем Ubuntu, то ищем пакет в названии которого будет присутствовать Ubuntu:
Нам необходимо отключить сжатие у этого каталога, т.е. отключить настройку «Сжимать содержимое для экономии места на диске» (убедиться, что галочка отжата):
После этого проблема исчезнет.
Пропадает сеть в гостевой операционной системе WSL
Основной компьютер я перевожу всегда в режим гибернации и не выключаю. После выхода из гибернации и запуска Linux в WSL я периодически сталкиваюсь с проблемой, когда на Linux пропадает сеть, как локальная с физическим компьютером, так и интернет.
Решается проблема просто:
- Заходим в настройки сетевых адаптеров.
- Находим адаптер с пипиской (WSL).
- Отключаем его и снова включаем.
Проблема решена. Где-то на уровне Windows есть ошибка приводящая к этому.
В 2016 году в Windows 10 появилась новая функция WLS , представляющая собой слой совместимости, позволяющий запускать из командной строки приложения, скомпилированные для Linux. В следующих версиях Windows функционал WSL был существенно расширен, так, в подсистеме Linux второй версии появилась возможность запуска приложений Linux с графическим интерфейсом. По умолчанию все программные файлы этой виртуальный среды устанавливаются на системный диск.
С учетом количества установленных приложений размер среды может занять на диске значительное место и, если диск небольшой, пользователь может задуматься о необходимости переноса WSL на другой накопитель, например, с небольшого SSD на HDD большего объема.
Такая возможность в Windows 10 и 11 присутствует, причем выполнить перенос можно несколькими способами.
Первый способ предполагает ручное перемещение файла-контейнера ext4.vhdx из его расположения по умолчанию:
%USERPROFILE%\AppData\Local\Packages\название_дистрибутива\LocalState
На другой диск с последующим изменением параметра BasePath в ключе реестра:
Значение которого как раз представлено этим самым путем к контейнеру ext4.vhdx .
Вы просто перемещаете контейнер с виртуальной файловой системой и прописываете в параметре BasePath новый путь.
Для перемещения WSL на другой диск или раздел можно с помощью встроенной процедуры экспорта и импорта, но еще удобнее использовать для этих целей бесплатную тулзу LxRunOffline, скачав ее со страницы разработчика:
Распаковав архив с утилитой и перейдя в запущенной от имени администратора командной строке в папку с исполняемым файлом LxRunOffline.exe (файлы из архива рекомендуется скопировать в папку WSL на диске С) и завершив все процессы WSL, выполните такую команду:
Lxrunoffline.exe move -n Ubuntu-20.04 -d G:\wsl\Ubuntu
Ubuntu-20.04 в данном примере это название дистрибутива Linux, а последняя часть команды — путь к новой папке Ubuntu на диске D.
Если нужно получить названия дистрибутива, используем команду LxRunOffline.exe list .
Читайте также: