DEV Community

Marks Duarte
Marks Duarte

Posted on • Edited on

1

Como mover os discos virtuais do WSL2

Para quem gosta de manter seus arquivos em partições ou mesmo em discos separados, o Windows não ajuda muito na hora da instalação das distribuições Linux utilizando o WSL, e para fazermos essa migração só precisamos seguir alguns passos bem simples.

Mas antes, vamos listar as distribuições instaladas para escolhermos quais serão movidas:

wsl -l
Distribuições do Subsistema do Windows para Linux:
docker-desktop (Padrão)
Ubuntu-22.04
docker-desktop-data
Enter fullscreen mode Exit fullscreen mode

Agora vamos fazer o processo de exportação da distribuição para um arquivo .tar.

Depois será necessário remover o registro dessa distribuição do WSL e por fim, reimportar informando o novo local de destino.

wsl --export Ubuntu-22.04 Ubuntu-22.04.tar
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 .\path\destino .\Ubuntu-22.04.tar
Enter fullscreen mode Exit fullscreen mode

Atenção: a nova instância será redefinida para o usuário root. Caso tenha criado algum usuário antes, e queira continuar usando o mesmo, faça o seguinte:

cd HKCU:\

set-location -path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\

Get-childitem -recurse -ErrorAction SilentlyContinue | Get-ItemProperty | Where-Object {$_.DistributionName -like "Ubuntu-22.04"} | Set-Itemproperty -Name DefaultUid -Value 1000
Enter fullscreen mode Exit fullscreen mode

E assim finalizamos essa primeira, de muitas, dicas.

Espero ter ajudado e até a próxima.

Ops! Já ia me esquecendo... Você também pode usar o script do #PowerShell que fiz para agilizar esse processo. ;)

param ($distro, $destino)
Clear-Host
$ErrorActionPreference = 'Stop'
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
# Commands
$checkDirExistsCmd = {
Write-Host "Verificando diretório de destino $dirPath..."
Test-Path $dirPath
}
$createDirIfNotExistsCmd = {
Write-Host "Criando diretório $dirPath..." -ForegroundColor Yellow
New-item $dirPath -ItemType Directory
}
$exportCmd = {
Write-Host "Exportando a distribuição para $tempFile..." -ForegroundColor Yellow
wsl --export $distro $tempFile
}
$unregisterCmd = {
Write-Host "Removendo registro da distribuição..."
wsl --unregister $distro
}
$importCmd = {
Write-Host "Re-Importando a distribuição..." -ForegroundColor Yellow
wsl --import $distro $destino $tempFile
}
$changeUserCmd = {
Write-Host "Restaurando usuário padrão..."
cd HKCU:\
Set-Location -path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\
Get-childitem -recurse -ErrorAction SilentlyContinue | Get-ItemProperty | Where-Object { $_.DistributionName -like $distro } | Set-Itemproperty -Name DefaultUid -Value 1000
}
$removeFileTempCmd = {
Write-Host "Removendo arquivo temporário..."
Remove-Item $tempFile -Force
}
# Functions
function checkResult {
param($results)
if ($null -ne $results) {
$results | ForEach-Object -Process {
if ($_ -ne "" -and $_ -like 'Error*') {
Write-Host $_ -ForegroundColor Red
Write-Host "Encerrando script..."
exit
}
}
}
}
function checkIfDirExists {
param ($dirPath)
$results = Invoke-Command -ScriptBlock $checkDirExistsCmd
if ($results -ne $true -or $results -ne "True") {
$results = Invoke-Command -ScriptBlock $createDirIfNotExistsCmd
}
}
Write-Host "Iniciando a migração..."
if ($null -eq $distro) {
$distro = read-host -Prompt "Favor informar o nome da Distribuição."
}
if ($null -eq $destino) {
$destino = read-host -Prompt "Favor informar o caminho do diretório de destino da Distribuição."
}
if ($distro -eq "" -Or $destino -eq "") {
Write-Host "Parâmetros obrigatórios não informados... Encerrando script."
return
}
Write-Host "Distribuição: $distro e Local de Destino: $destino"
$tempFile = "C:\ProgramData\Temp"
checkIfDirExists $tempFile
$tempFile = "$tempFile\$distro.tar"
checkIfDirExists $destino
checkResult $result
$result = Invoke-Command -ScriptBlock $exportCmd
checkResult $result
$result = Invoke-Command -ScriptBlock $unregisterCmd
checkResult $result
$result = Invoke-Command -ScriptBlock $importCmd
checkResult $result
$result = Invoke-Command -ScriptBlock $removeFileTempCmd
checkResult $result
$isChangeUser = read-host -Prompt "Deseja restaurar o usuário da distribuição? S (Sim) ou N (Não)"
if ($isChangeUser -eq "S" -or $isChangeUser -eq "s") {
$currentLocation = Get-Location
Invoke-Command -ScriptBlock $changeUserCmd
Set-Location -path $currentLocation
}
Write-Host "Migração finalizada." -ForegroundColor Green
view raw migrar-wsl.ps1 hosted with ❤ by GitHub

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay