fbpx
1 de julho de 2022

Do bit Ao Byte

Embarcados, Linux e programação

Sistema de arquivos Linux no Windows

Linux no Windows

Para quem acompanha o canal no Youtube, já sabe que recém troquei de laptop, com propósito de edição e machine learning. Deve ter ficado claro também que minha especialidade em sistemas operacionais é Linux, mas o laptop veio com Windows 11. Como tenho um HDD externo como uma de minhas fontes de backup e ele está formatado em sistema de arquivos Linux, precisei acessá-lo no Windows. Vejamos como acessar sistema de arquivos Linux no Windows, usando o WSL.

O que é WSL?

WSL é o acrônimo de Windows Subsystem Linux. Atualmente a Microsoft implementou WSL2, que entrega maior performance no sistema de arquivos e suporte completo a chamadas de sistema.

O WSL2 utiliza o hyper-v como virtualizador e é tão rápido quanto um sistema rodando em docker no Linux. Através da máquina virtual Linux, podemos rodar tanto aplicações de shell como aplicações gráficas e para você que tem Windows 11, é uma maneira de fazer proveito dos recursos oferecidos pelo Linux sem ter que formatar o sistema. Por enquanto preciso do Windows instalado para escrever sobre um display HMI da Stone e enquanto ele estiver instalado, vou dando algumas dicas.

Como instalar o WSL?

No menu do Windows, digite Power Shell. Abrir-se-á um terminal, no qual devemos digitar:

wsl --install

Esse comando fará a instalação do Ubuntu por padrão. Outras distribuições são possíveis, mas vamos focar no simples. Quando terminada a instalação, poderemos encontrar o bash no menu do Windows. A partir daí podemos instalar nossas aplicações (gráficas ou não) utilizando o gerenciador de pacotes apt, no bash.

SSD/HDD no Linux e Windows

Apesar de ser a mesma mídia de armazenamento, cada sistema interpreta esse mesmo conteúdo de forma diferente. No Windows utilizamos o Power Shell para interação por linha de comando e, cara, os comandos no Power Shell são feios. Mas tudo bem, basta copiar e colar aqui do artigo.

Para o Linux, usamos o bash, disponível agora através do menu do Windows (se pulou o texto, volte e veja como instalar o WSL2).

No Windows o “disco” deve aparecer assim, quando consultadas as mídias, com o comando:

GET-CimInstance -query "SELECT * from Win32_DiskDrive"

Antes de mostrar o resultado do comando acima, deixe-me salientar que o parâmetro -query indica que será feito uma query, bem no formato de banco de dados mesmo. Pode parecer longo e esquisito se você não tem nenhuma intimidade com banco de dados, mas pra mim só é esquisito o comando inicial, que para dislexos é uma tortura.

O resultado do comando:

powershell listando discos

Já tem atualização do PowerShell, como a “propaganda” acima mostra. Enfim, vou tratar a mídia de armazenamento como “disco” daqui em diante, pra facilitar a citação.

Repare que o dispositivo está à esquerda. O disco é identificado como \\.\PHYSICALDRIVEx, onde x é o número do disco. O dispositivo de 1TB NVMe é meu SSD com o sistema Windows e o PHYSICALDRIVE1 é o HDD externo.

Antes de conectar seu disco externo, recomendo a execução desse comando para identificar mais facilmente qual é o disco local, onde está o sistema. Não é mandatório, é uma dica.

Tendo identificado o disco, disponibilize-o para o WSL, executando o seguinte comando no PowerShell. Abra o menu do Windows e digite PowerShell, então clique com o botão direito e escolha a opção Executar como Administrador. Então digite no PowerShell o seguinte comando:

wsl --mount \\.\PHYSICALDRIVE1 --bare

Agora podemos ir para o bash identificar a partição que quereremos montar.

Para ver as partições disponíveis, a forma mais direta é usar o comando lsblk:

dispositivos conectados - blkid e lsblk

O comando lista os discos e suas respectivas partições. No caso, temos o disco sdd com 1 partição. Permita-me explicar brevemente como funciona a interpretação de mídias de armazenamento no Linux.

Os discos são identificados como sd. A primeira letra após, é o identificador da unidade. Se tivermos 3 discos, teríamos sda, sdb, sdc e sdb. Bem, é exatamente o que está aparecendo acima.

Depois do identificador da unidade, temos o identificador de partição, que é um número. Então como vemos, temos 1 partição em sdd (sdd1). No campo TYPE vemos o que é disco e o que é partição, mas basta ter o conceito descrito acima e o campo TYPE se tornará imediatamente inútil.

Outra coisa que eventualmente pode ser necessário é identificar o sistema de arquivos. Presume-se sempre ext4, mas existem montes de opções de sistemas de arquivos para Linux. Se estiver utilizando outra que não ext4 e não lembra (ou não sabe) qual é, temos vários comandos possíveis para essa identificação. Porém, alguns não funcionaram aqui:

lsblk -f /dev/sdd1 #não funcionou
fsck -N /dedv/sdd1 #retornou ext2, mas não é o caso
blkid /dev/sdd1    #não funcionou

Eu mostrei os comandos acima porque eles funcionam em um Linux nativo. No WSL só 1 funcionou:

sudo file -sL /dev/sdd1

Apesar de eu saber qual era o sistema de arquivos do disco, precisava mostrar no artigo como fazê-lo. O resultado é algo como:

identificando sistema de arquivos

Explicitamente temos a mensagem “ext4 filesystem data”. Pronto. Agora voltamos ao PowerShell aberto como Administrador.

Sabemos que o sistema de arquivos é ext4, que o disco é o PHYSICALDRIVE1 e que a partição é a 1. Agora disponibilizamos a mídia dentro do Linux. O termo é “montar” o disco. Fazemos isso a partir do Windows, porque ele é o sistema nativo. O comando a ser executado no PowerShell é esse:

wsl --mount \\.\PHYSICALDRIVE1 --partition 1 --type ext4

Resultará na seguinte mensagem, estando tudo certo:

wsl acessando o disco externo com linux

O sistema de arquivos já está disponível dentro do Linux do WSL, dentro do diretório /mnt/wsl. O ponto de montagem /mnt era o ponto de montagem tradicional do Linux seguindo o LSB e em algum triste momento passou a ser /media. Porém no Linux do WSL o padrão anterior se mantém.

Quando terminar de usar, é necessário desmontar a unidade de disco. Na mensagem acima estará sempre o comando que deve ser executado no PowerShell (aberto como Administrador):

wsl --unmount \\.\PHYSICALDRIVE1

Lembrando que o comando acima pode variar, conforme o disco identificado em seu sistema. Podemos ter quantos discos quisermos, inclusive pendrive, cartão de memória, CD e DVD (eca).

Linux no Windows

Acima está uma listagem do conteúdo do ponto de montagem.

Como copiar arquivos do Linux para o Windows?

Quando o bash é aberto, o diretório inicial é /mnt/c/Windows/system32. Se abrirmos o gerenciador de arquivos do Windows e formos em C:, veremos o diretório Usuários. Dentro dele estarão os usuários criados em seu sistema. Isso significa que o usuário Djames Suhanko está em C:\Usuários\Djames Suhanko. No bash o caminho é /mnt/c/Users/Djames\ Suhanko (a barra invertida é para quebrar o espaço entre o nome e sobrenome).

Basta copiar da mídia externa (listada anteriormente) para qualquer lugar dentro do diretório do usuário nativo do Windows! Porém, tem um jeito lindo pra quem não gosta de linha de comando.

Abrindo o gerenciador de arquivos, na coluna da esquerda aparecerá o Tux (o mascote do kernel Linux). Clique sobre ele e aparecerá o diretório Ubuntu do lado direito:

Linux no Windows

Depois basta navegar até /mnt/wsl/PHYSICALDRIVE1p1 (o identificar mudará conforme a partição e disco montado). Os arquivos estarão disponíveis no Windows de forma natural!

Linux no Windows

Pronto, era isso que eu queria mostrar!

Vídeo

Vou fazer um vídeo apresentando essa sequência, mas esse artigo é a referência dos comandos. Se não é inscrito ainda, inscreva-se em nosso canal Dobitaobyte no Youtube e clique no sininho para receber notificações.

Vale lembrar que o canal é de tecnologia, ora embarcados, ora sistema operacional, ora outra coisa. Os comentários solicitando vídeos e artigos serão priorizados (desde que eu esteja apto a fazê-lo).