Acoplando um HD Virtual (.vhdx) no Linux Arch WSL2
Para obter o melhor desempenho possível (Native Linux Performance) e evitar a camada de tradução de sistema de arquivos do Windows (o protocolo 9P, que é lento), você deve utilizar o recurso nativo wsl --mount com a flag --vhd.
Isso faz com que o Windows passe o arquivo VHDX diretamente para o kernel do Linux (WSL2) como um dispositivo de bloco, permitindo que o seu Arch Linux gerencie o sistema de arquivos ext3 nativamente.
Aqui está o passo a passo exato:
Pré-requisitos
Certifique-se de que seu WSL está atualizado. No PowerShell, rode wsl --update para garantir que você tem as funcionalidades mais recentes de montagem de disco.
Passo 1: Montar o VHDX (No PowerShell como Admin)
Você não deve montar esse disco no "Gerenciador de Discos" do Windows. O arquivo deve estar "solto" (sem uso).
Abra o PowerShell como Administrador e execute:
wsl --mount "C:\vhdx\desenvolvimento.vhdx" --vhd --name DevDisk
Agora no Linux, basta validar:
ls /mnt/wsl/DevDisk
Monte o disco no linux
# Cria o link
sudo ln -s /mnt/wsl/DevDisk /fs
# Atribui os privilégios ao meu usuário: farnetani
sudo chown -R farnetani:farnetani /fs
findmnt -T /fs
TARGET SOURCE FSTYPE OPTIONS
/mnt/wsl/DevDisk /dev/sdd ext4 rw,relatime
Perceba que o FSTYPE = ext4 (nativo)
Se aparecesse `9p` ou `drvfs`: Aí sim o aviso estaria lento.
montar_Dev.ps1
<#
.SYNOPSIS
Script para montar VHDX no WSL2 e configurar permissões.
Execute este arquivo. Se não for Admin, ele pedirá elevação automaticamente.
#>
$VhdxPath = "C:\vhdx\desenvolvimento.vhdx"
$MountName = "DevDisk"
$DistroName = "Arch" # Nome da sua distribuição no WSL
$LinuxUser = "farnetani" # Seu usuário no Linux
# 1. Auto-elevação para Administrador (Necessário para wsl --mount)
if (-NOT GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") {
Write-Host "Solicitando permissões de Administrador..." -ForegroundColor Yellow
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
Exit
}
try {
# 2. Monta o disco no Windows/WSL
# O '2>$null' suprime erro se já estiver montado, mas captura erros reais no catch se falhar muito
Write-Host "Anexando VHDX ao WSL..." -ForegroundColor Cyan
wsl --mount $VhdxPath --vhd --name $MountName 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "Disco montado com sucesso." -ForegroundColor Green
} else {
Write-Host "Aviso: O disco pode já estar montado ou houve um erro (Código: $LASTEXITCODE)." -ForegroundColor Yellow
}
# 3. Executa comandos internos no Linux (Link e Permissões)
# Usamos '-u root' para não precisar digitar senha de sudo
Write-Host "Criando link simbólico /fs e ajustando permissões..." -ForegroundColor Cyan
# 'ln -sfn': Força a criação do link mesmo se já existir, evitando erro ou link aninhado
$cmd = "ln -sfn /mnt/wsl/$MountName /fs && chown -R $LinuxUser:$LinuxUser /fs"
wsl -d $DistroName -u root sh -c $cmd
Write-Host "Processo concluído! Acesse via 'cd /fs' no Arch." -ForegroundColor Green
} catch {
Write-Error "Ocorreu um erro inesperado: $_"
}
# Mantém a janela aberta por alguns segundos para você ver o resultado
Start-Sleep -Seconds 3