Passo a passo para formatar um drive no Linux usando criptografia forte.

Qualquer drive, seja um pendrive, um cartão de memória ou um HD externo pode ser formatado facilmente no Linux, com as ferramentas de gestão de discos.
O programa pode ser disparado a partir do próprio Nautilus, se você usa alguma distro com o GNOME (Debian, Ubuntu etc.)

Se você tem interesse em conhecer melhor o utilitário, leia Como formatar um drive no Linux, onde o assunto é abordado de maneira mais extensa (e genérica).

Neste post, vou mostrar como realizar o procedimento de maneira rápida, usando o sistema de arquivos EXT4 com o LUKS.

Como formatar uma unidade com criptografia LUKS

Localize a unidade a ser criptografada no painel esquerdo do Nautilus.
seleção de volume no Nautilus

Em seguida, clique com o botão direito do mouse sobre a unidade escolhida e selecione formatar.
Formatar no Nautilus para Linux

Dê um nome ao volume a ser inicializado.
Opções de formatação

Se estiver com tempo para esperar, vale a pena selecionar a opção “Apagar”, que irá remover todos os dados do drive selecionado, em segurança. Fica o aviso de que esta opção é de execução demorada — a desculpa perfeita para ir tomar um café, se quiser.
Opções de formatação

A criptografia LUKS só pode ser selecionada para sistemas de arquivos EXT4, do Linux.

Se executar este processo em um drive externo USB, por exemplo, vai precisar instalar suporte a EXT4 e criptografia LUKS, para conseguir ler seu conteúdo no Windows.

Quando terminar de fazer seus ajustes nesta janela, clique em “Próximo”.

Na próxima tela, você terá que definir e confirmar a sua senha.
Se deixou a opção “Apagar” desligada, então o processo será bem rápido.
Senha para formatação com criptografia

Daqui para frente, toda vez que for usar o drive, a senha cadastrada será pedida.
Nautilus volume criptografado

Na imagem, acima, é possível notar que, antes de dar a senha e montar a unidade, nem o nome do volume será exibido no Nautilus.
A criptografia LUKS em unidades EXT4 é uma maneira segura e conveniente (fácil) de armazenar arquivos com informações sensíveis e confidenciais.

Como criar um drive virtual, usando o comando dd no Linux

Drives virtuais podem ter várias utilidades.
Podem funcionar como partições separadas ou simples pastas — só que apartadas do sistema de arquivos hospedeiro ou host.
Um uso comum para um sistema de arquivos virtual é fazer dele um espaço de troca ou SWAP.
Você também pode clonar ou transferir o conteúdo de um drive físico para um drive virtual, como backup ou um armazenamento intermediário a ser transferido para outro drive físico.
Como ferramenta, o comando dd é muito flexível e pode ter uma gama variada de aplicações.
Se você fizer uma busca por “comando dd”, vai encontrar vários artigos mencionando alguma tarefa a ser realizada com ele. Se quiser, você também pode clicar na tag dd, para dar uma olhada no que a gente já andou falando sobre o assunto.

Crie um drive virtual com um tamanho determinado

Vamos começar por criar um espaço (arquivo), dentro do qual vamos inserir o nosso sistema de arquivos mais tarde.
No meu exemplo, vou mostrar como criar um arquivo com 700 MB (mais ou menos o tamanho de um CD de dados):


dd if=/dev/zero of=meudrive700 bs=4K count=175000

175000+0 records in                                                 
175000+0 records out                                                
716800000 bytes (717 MB, 684 MiB) copied, 4,84865 s, 148 MB/s

Note que o tamanho final do arquivo é mostrado em MB (megabytes) e MiB (mibibytes).
Veja o que foi feito:

  • if=/dev/zero — abreviatura de input file (ou arquivo fonte), pega caracteres 0x00 para preencher o espaço do novo drive.
  • of=meudrive700 — abreviatura de output file (ou arquivo de destino), nomeia o arquivo que vai receber o novo drive virtual. Use o nome que vocẽ quiser aqui.
  • bs=4K — abreviatura de block size (ou tamanho de cada bloco de dados), fornece o tamanho a ser usado para cada bloco. No nosso caso, 4096 bytes.
  • count=175000 — conta cada inserção de blocos 175000 vezes e encerra o comando.
    Para chegar a este número fizemos um cálculo: 700.000 Kb / 4 Kb (blocksize)

O /dev/zero é um arquivo especial, que provê caracteres ‘null’ (0x00).
Uma de suas funções é prover uma string de caracteres “neutros” para inicializar um sistema de armazenamento

Com o comando ls, já é possível observar o nosso novo arquivo:


ls -lh meudrive*

-rw-rw-r-- 1 justincase justincase 684M Mai 30 18:22 meudrive700 

Como criar um sistema de arquivos dentro do drive virtual

Para poder ser visto como “verdadeiro drive”, ele precisa comportar um sistema de arquivos.
Para isto, vamos usar o comando mkfs (make filesystem), que também aceita várias configurações e parâmetros de execução.
Se você deseja um sistema de arquivos swap, use o mkfs assim:


mkfs.btrfs --label="meudrive700" meudrive700

btrfs-progs v4.4                                                    
See http://btrfs.wiki.kernel.org for more information.              
                                                                    
Label:              meudrive700                                     
UUID:               8acf7d75-935c-4713-b211-aeeb0c7597ce            
Node size:          16384                                           
Sector size:        4096                                            
Filesystem size:    683.59MiB                                       
Block group profiles:                                               
  Data:             single            8.00MiB                       
  Metadata:         DUP              42.12MiB                       
  System:           DUP              12.00MiB                       
SSD detected:       no                                              
Incompat features:  extref, skinny-metadata                         
Number of devices:  1                                               
Devices:                                                            
   ID        SIZE  PATH                                             
    1   683.59MiB  meudrive700

Se você prefere o sistema de arquivos padrão de muitas distribuições, o ext4, use o comando assim:


mkfs.ext4 -L="meudrive700" meudrive700

mke2fs 1.42.13 (17-May-2015)                                        
meudrive700 contains a btrfs file system labelled 'meudrive700'     
Proceed anyway? (y,n) y                                             
fs_types for mke2fs.conf resolution: 'ext4'                         
Discarding device blocks: done 
Creating filesystem with 175000 4k blocks and 43776 inodes          
Filesystem UUID: 52117614-5508-4e8e-866a-1f9684410582               
Superblock backups stored on blocks:                                
        32768, 98304, 163840                                        
                                                                    
Allocating group tables: done                                       
Writing inode tables: done                                          
Creating journal (4096 blocks): done                                
Writing superblocks and filesystem accounting information: done    

Como já havia um sistema de arquivos habitando aquele espaço, o mkfs faz uma advertência e pede confirmação (y/n) para continuar.
Há várias outras possibilidades de formatação, com o mkfs. Leia mais sobre sistemas de arquivos no Linux para descobrir mais.
Leia também sobre as diferenças entre os sistemas de arquivos BTRFS e EXT4.

Como montar o meu novo drive virtual


sudo mount -t ext4 meudrive700 /mnt/
ls -lah /mnt/                         

total 20K                                                           
drwxr-xr-x 3 root root 4,0K Mai 30 18:37 .                          
drwxr-xr-x 1 root root  258 Mai 28 10:05 ..
drwx------ 2 root root  16K Mai 30 18:37 lost+found

O Linux enxerga este arquivo como um dispositivo físico. Você pode gravar o que quiser dentro deste drive.

Para o UNIX (e o Linux também, claro), tudo é arquivo.

Como automatizar a montagem do meu drive virtual

Se você reiniciar a máquina, neste momento, não vai perder os eventuais dados que tiver gravado lá.
Contudo, vai precisar montar o drive, novamente, toda vez que bootar a máquina — caso queira usá-lo.
Se vocẽ acha incômodo fazer o procedimento manualmente, talvez prefira automatizá-lo. Para isso, basta inscrever o comando de montagem no fstab.
Abra o arquivo /etc/fstab e adicione as linhas


# montando o meu drive virtual
/home/justincase/meudrive700    /mnt/meudrive700        ext4    default     0     2

Acima, é necessário informar no fstab o caminho completo do arquivo que contém o meu drive (/home/justincase/meudrive700).
Optei também por criar um subdiretório dentro do /mnt para abrigar um ponto de montagem para o meu drive virtal (/mnt/meudrive700) — apenas achei que ficaria mais organizado assim.
O restante dos parâmetros na linha de comando, foram copiados da linha que monta o meu diretório /home: ext4 default 0 2.
Grave as alterações feitas no fstab e saia do editor.
Use o comando mount -a (para montar todas entradas do fstab, que ainda não estejam montadas):


sudo mount -a

[sudo] password for justincase:                                     

Ao rodar o ls, no drive, é possível notar que os arquivos dele pertencem ao root e, portanto, não será possível gravar nada lá dentro.


ls -lah /mnt/meudrive700/

total 20K
drwxr-xr-x 3 root root 4,0K Mai 30 18:37 .
drwxr-xr-x 1 root root   22 Mai 31 09:38 ..
drwx------ 2 root root  16K Mai 30 18:37 lost+found

Use o chown para atribuir o drive ao seu usuário:


sudo chown justincase:justincase /mnt/meudrive700/
# agora, crie um arquivo em branco, só para testar:
touch /mnt/meudrive700/apague.me

Liste os arquivos do diretório, para ver se houve sucesso:


ls -lah /mnt/meudrive700/


total 20K
drwxr-xr-x 3 justincase justincase 4,0K Mai 31 10:24 .
drwxr-xr-x 1 root       root         22 Mai 31 09:38 ..
-rw-rw-r-- 1 justincase justincase    0 Mai 31 10:24 apague.me
drwx------ 2 root       root        16K Mai 30 18:37 lost+found

Se quiser entender melhor o funcionamento da ferramenta de criação de arquivos de sistemas, leia o post Como formatar drives com o mkfs.

Qual o melhor sistema de arquivos para usar dentro de uma máquina virtual

Dentro de uma máquina virtual, você provavelmente terá um ou mais discos virtuais. Cada qual, com uma ou mais partições.
Quanto mais for otimizado uso dos recursos de hardware/software, melhor será o desempenho do trabalho e das tarefas executadas dentro das VMs, lógico.
Este assunto pode suscitar várias dúvidas — por isto sugiro, dar uma olhada na tag #sistema-de-arquivos, deste blog — onde você poderá encontrar artigos complementares.

É um tema muito vasto e eu não sou o dono da verdade — por isso, sinta-se à vontade para comentar sobre a sua experiência no assunto.

Neste post, vou discutir especificamente qual o mais recomendado para formatar os discos rígidos (ou SSD) virtuais usados em máquinas virtuais (ou VMs).
No contexto deste artigo, uso algumas máquinas virtuais Debian 9 “Stretch” testing. O drive físico, em que se encontram instaladas, é um HDD (disco rígido).


Se você está com pressa e usa Linux, a resposta rápida (e mais segura), para a pergunta do título, é: formate com o ext4! 😉
Caso você tenha 2 ou 3 minutos (a depender da velocidade com que você consegue ler), posso explicar melhor as vantagens e desvantagens do ext4 e de outros sistemas de arquivos — e isto pode levar a outras respostas…

Em que casos o ext4 é perfeito para formatar um HD dentro de uma máquina virtual

O ext4 está para ser substituído, no universo GNU/Linux, há um bom tempo.
Este processo está em curso há mais ou menos uma década e pode levar outra para ser concluído. Sistema de arquivos é uma coisa séria e precisa de muitos testes para se provar confiável, seguro, eficiente.
O ext4 ou fourth extended filesystem (quarto sistema de arquivos extendido) teve sua primeira versão estável lançada em Outubro de 2008 — o que lhe dá, aproximadamente, 10 anos de estrada.

É o mais jovem (e, possivelmente, último) de uma linhagem, iniciada em 1992, com o ext — criado pelo desenvolvedor Francês, Rémy Card.

Este fato eleva o tempo de experiência do sistema, como um todo, para aproximadamente 25 anos.
Por isto é que o ext4 satisfaz as condições de segurança e eficiência.
Ele incorpora, inclusive, recursos modernos e avançados para manipular dados eficientemente em unidades SSD.

Se você tem dúvidas e precisa decidir rapidamente, opte pelo ext4.

virtualbox snapshot list
A falta de suporte nativo a snapshots no ext4, dentro do contexto de uma máquina virtual, pode ser um ponto a favor: por que o torna mais leve.
Para quem pretende rodar máquinas virtuais dentro do Virtual Box ou qemu, por exemplo, o suporte já está incluído no programa — o que o torna dispensável dentro do sistema de arquivos hóspede.

Outro argumento a favor do ext4: se o host (máquina hospedeira), já usa um sistema de arquivos com suporte a snapshots (como o BTRFS ou o ZFS), não há necessidade para a redundância.

O que os outros sistemas de arquivos oferecem a mais

Testar outras opções é sempre o melhor caminho para descobrir o que se adequa às suas necessidades.
Se as VMs estão em um host com SSDs, certamente é mais benéfico usar um sistema de arquivos construído do zero para este tipo de tecnologia.
Os sistemas de arquivo BTRFS e ZFS podem oferecer melhor performance dentro das seguintes situações, entre outras:

  • As VMs estão em um host equipado exclusivamente com SSDs.
  • Por alguma razão, você necessita do suporte a snapshots dentro do sistema de arquivos hóspede.
  • Os sistemas de armazenamento dos hóspedes são realmente grandes, você pretende usar RAID, pools etc.

Referências

Como converter uma partição EXT4 para BTRFS

É possível converter partições EXT4 para o mais novo padrão BTRFS fazendo uso de um kit de ferramentas, presente no pacote btrfs-tools.
O EXT4 é um sistema de arquivos que vem de uma longa linhagem, no Linux.
Ele é estável, confiável, seguro e ainda é moderno.

Eu uso o BTRFS há aproximadamente 3 anos, em meus laptops de trabalho — ainda assim, continuo recomendando o EXT4 para quem precisa de mais segurança para seus arquivos.
Minha opinião é de que o sistema é estável o suficiente para qualquer aplicação, que não seja ambiente de servidores — ao mesmo tempo mantenho a minha política de fazer backups o tempo todo.

O fato é que novas tecnologias de armazenamento estão se consolidando e, como não existiam na época da criação do EXT, os desenvolvedores têm feito adaptações para dar suporte aos novos recursos de hardware.
As possibilidades de fazer adaptações estão se esgotando, contudo.
É muito improvável que desenvolvedores invistam tempo no EXT5.
Existem outros sistemas de arquivos, em processo avançado de desenvolvimento que concorrem para ocupar o seu lugar. O BTRFS é um deles.
Leia mais sobre as diferenças entre o EXT4 e o BTRFS.

Quando você não deve converter o sistema de arquivos EXT4 para BTRFS

Quem está com o backup “pendente”, obviamente, deveria priorizar este procedimento, antes de ir “brincar” no sistema de arquivos.
A wiki oficial do kernel Linux avisa que nas séries 4.0 de kernels este recurso não é mais tão usado e é muito pouco testado.
A página avisa, ainda, que há relatos de conversões que não deram resultados confiáveis.
Tudo bem. Acidentes acontecem.
Se você está resolvido a fazer a conversão, certifique-se de ter feito seus backups antes.
A melhor alternativa, quando possível, é formatar o dispositivo e começar a usar o novo sistema de arquivos do zero, de um ambiente limpo.

Como instalar o btrfs-tools

O pacote pode ser encontrado nos repositórios da maioria das distribuições GNU/Linux.
Use o apt show, no Debian e no Ubuntu, para obter mais informações sobre o pacote:

apt show btrfs-tools

Para instalar, use o install:

sudo apt install btrfs-tools

Como fazer a conversão para BTRFS

Depois da instalação do pacote btrfs-tools, a ferramenta de conversão – btrfs-convert – já estará disponível:
A sugestão é começar com uma verificação de rotina do dispositivo a ser convertido — afinal, a gente não quer que possíveis erros existentes danifiquem todo o processo, não é?

sudo fsck.ext4 -f /dev/xxx

Em seguida, faça a conversão:

sudo btrfs-convert /dev/xxx

Espero que tudo funcione bem para você.
Caso tenha problemas ou queira comentar sobre o assunto, use a sessão de comentários.

Diferenças entre os sistemas de arquivos Ext4 e Btrfs

O sistema de arquivos Btrfs foi lançado no final de Julho de 2013 — é um sistema de arquivos relativamente novo, escrito do zero e que ainda está provando a que veio.
Surgiu da necessidade dos desenvolvedores de ter um sistema que incluísse pooling, snapshots e checksums, entre outros recursos — presentes também no ZFS.
ext4 vs btrfs

A pronúncia do nome, em inglês, é alvo de uma (bem leve) polêmica.
Pode ser Butter FS, Better FS ou B-Tree FS — sendo que, este último, está mais próximo do nome original.

Diferenças básicas entre o Ext4 e o Btrfs

Já que muitos usuários Linux, que desejam experimentar o novo sistema, vêm do Ext4, faz sentido enumerar alguns pontos que realçam as diferenças entre os dois:

  • O Ext4 ainda é a melhor escolha, no desktop do usuário comum — por ser mais rápido na transferência de arquivos e por ser mais maduro
  • O Btrfs tem vários recursos, que são novidades, tais com o Copy-on-Write, snapshots, checksums extensivos, scrubbing, duplicação dos dados, informações de autocorreção (self-healing) etc.
  • Os recursos de RAID-Z, presentes no ZFS, ainda são experimentais, neste momento, no Btrfs.
  • O Btrfs é fruto de um esforço patrocinado pela Oracle Corporation, Fujitsu e Red Hat — abaixo, há uma relação mais completa.
  • O Ext4 foi desenvolvido por Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts’o, Eric Sandeen, Sam Naghshineh, entre outros.
  • O Btrfs tem suporte no Linux; O Ext4 tem suporte nativo no Linux, no FreeBSD e no Android.

O Btrfs faz parte da nova geração de sistemas de arquivos do Linux, projetada para tirar o máximo dos novos dispositivos e métodos de armazenamento, como as unidades SSD.
Se você está acostumado a usar LVM e RAID para gerenciar os seus dados, o Btrfs está pronto para substituí-los.
O snapshot é um conceito semelhante à captura de telas com o PrtScr.
O recurso consiste em fazer uma cópia em imagem de um subvolume Btrfs em um determinado ponto no tempo — o que é muito mais rápido do que um backup tradicional e não implica em parar o sistema.
Você pode tirar snapshots do seu sistema quando quiser — o mais comum é fazê-lo antes de instalar algum novo programa ou fazer alterações significativas.
Este recurso permite voltar “no tempo”, se algo der errado.

A lista atual de empresas que contribuem para o código do Btrfs, é a seguinte:

  • Facebook
  • Fujitsu
  • Fusion-IO
  • Intel
  • Linux Foundation
  • Netgear
  • Novell/SUSE
  • Oracle
  • Red Hat
  • STRATO AG

Quais são os recursos disponíveis no Btrfs

À medida em que as unidades de armazenamento vão aumentando suas capacidades e os SSD caminham para se tornar padrão de mercado, espera-se que os sistemas de arquivos façam sua escalada para atender às novas demandas que a tecnologia impõe.

No artigo Introdução ao sistema de arquivos Btrfs, explicamos, com maior riqueza de detalhes, os recursos presentes no sistema.

Até o momento, a capacidade do Btrfs, inclui os seguintes itens:

  • Capacidade de armazenamento de arquivos com tamanhos de até 2^64 byte == 16 EiB (Em função do VFS do Linux, o limite prático é 8 EiB)
  • Empacotamento de arquivos pequenos, para fazer uso eficiente do espaço.
  • Diretórios indexados, também para uso eficiente do espaço.
  • Alocação dinâmica de inodes.
  • Um snapshot pode ser alterável (writable) ou não (read-only).
  • Suporte a subvolumes — sistemas de arquivos raiz internos e separados.
  • Checksums sobre dados e metadados (crc32c)
  • Compressão por algoritmos zlib ou LZO.
  • Suporte a dispositivos múltiplos integrados.
  • Recursos de detecção de armazenamento em SSD ou flash — com suporte nativo a TRIM/Discard, com relatório de blocos livres para reuso.
  • Backup incremental eficiente.
  • Processo de limpeza (scrub) em background para encontrar e corrigir erros em arquivos com cópias redundantes.
  • Desfragmentação online.
  • Verificação do sistema de arquivos offline.
  • Conversão local de sistemas de arquivos Ext3 ou Ext4.
  • Dispositivos semente ou semeadores — Em inglês, são chamados seed devices.
    Refere-se a capacidade de criar sistemas de arquivos (apenas de leitura) que funcionam como moldes para criar outros sistemas de arquivos Btrfs.
  • Suporte a quota em subvolumes.
  • Relatórios de mudanças em subvolumes.
  • Espelhamento incremental eficiente de sistemas de arquivos.

Outros recursos estão em desenvolvimento para o sistema, o que inclui:

  • Checagem offline e mais rápida do sistema de arquivos.
  • Checagem online do sistema de arquivos.
  • Remoção e espelhamento no nível do objeto.
  • Algoritmos de checksum alternativos.
  • Deduplicação in-band (ocorre durante as gravações).
  • Adição de outros algoritmos de compressão: Snappy, LZ4.

Referências

https://help.ubuntu.com/community/btrfs.
https://btrfs.wiki.kernel.org/index.php/Main_Page.
http://www.differencebtw.com/difference-between-btrfs-and-ext4/.