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