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

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More