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.

Como esconder arquivos em um cartão de memória.

Quando você tem arquivos de conteúdo sensível, profissional ou pessoal, o uso de um cartão de memória flash (SD, MMC etc.) criptografado pode ser a melhor solução entre a discrição e o tamanho da mídia.
Cartão de memória com chaves
As dicas deste post servem para criptografar quase qualquer tipo de mídia — seja um pendrive USB, uma partição no disco, um mero arquivo, um disco virtual ou um cartão de memória microSD.
Ao executar corretamente este procedimento você impede o acesso a seus arquivos por pessoas não autorizadas.
Se você costuma acessar arquivos que gostaria de manter em segredo, você precisa usar mídias criptografadas.

O que você precisa ter em mãos para criptografar um cartão de memória

Neste texto vou mostrar como criptografar um cartão de memória formatado com o sistema de arquivos F2FS, no Linux. Só quem tem a senha de acesso poderá ver o conteúdo deste cartão.
Se você é preocupado com os diversos aspectos da segurança, vai entender por que a escolha do Linux é óbvia e necessária.
Você precisa ter instalado no seu sistema o módulo do kernel que permite manipular sistemas de arquivos F2FS — que é otimizado para cartões de memória flash.
O processo de formatar e criptografar o cartão ficará por conta do utilitário luksformat — ele simplesmente torna tudo mais fácil e rápido.
Clique nos links citados no texto e nas imagens para obter informações adicionais e maiores detalhes sobre algum assunto abordado neste texto.
Antes de prosseguir, faça backup de quaisquer arquivos que sejam importantes — os procedimentos de formatação e encriptação apagará todos os dados contidos na mídia de destino. Portanto, se você não sabe o que está fazendo, não faça.

Como formatar e criptografar uma mídia no Linux, com o luksformat

Como eu já disse, estes comandos podem ser aplicados a qualquer mídia — você só precisa adequá-los ao seu contexto.
Para formatar e criptografar um cartão de memória, localizando em /dev/sdc1, com o sistema de arquivos ext4, execute o seguinte comando:

sudo luksformat -t ext4 /dev/sdc1

Sim. Você precisa ter privilégios administrativos para rodar o luksformat.

captura de tela - comando luksformat formata e encripta uma midia flash
Clique para ver detalhes

Se você quiser usar qualquer um dos outros recursos do mkfs, basta acrescentar os parâmetros ao final da linha de comando. Por exemplo, se quiser rotular a mídia formatada com o nome Segredos, faça assim:

sudo luksformat -t ext4 /dev/sdc1 -L Segredos

* Sugiro usar nomes mais discretos que este.

Como criar uma partição f2fs criptografada

Com o comando abaixo, você pode criar um sistema de arquivos criptografado, na mesma mídia, com o nome de volume musicman

sudo luksformat -t f2fs /dev/sdc1 -l musicman

Fique atento: neste caso, o parâmetro -l fica em minúsculas.

Criando dispositivo criptografado em /dev/sdc1...

WARNING!
========
Isto irá sobrescrever os arquivos em /dev/sdc1 definitivamente.

Are you sure? (Type uppercase yes): YES
Informe a frase secreta: 
Verify passphrase: 
Digite sua senha novamente para verificação
Informe a frase secreta para /dev/sdc1: 

	F2FS-tools: mkfs.f2fs Ver: 1.2.0 (2013-10-25)

Info: Label = musicman
Info: sector size = 512
Info: total sectors = 3907583 (in 512bytes)
Info: zone aligned segment0 blkaddr: 512
Info: Discarding device
Info: This device doesn't support TRIM
Info: format successful

Se você tiver dificuldades com o sistema de arquivos F2FS, leia este artigo.
Você pode aplicar os mesmos princípios para criar sistemas de arquivos VFAT ou outros, que considerar mais interessantes.
Por fim, saiba mais sobre o assunto, clicando nos links contidos no artigo ou fazendo uma pesquisa — na caixa de busca, na seção direita deste site.

Como criptografar um pendrive no Linux, com luksformat

Neste post vou mostrar como criptografar fácil e rápido um pendrive fazendo uso do aplicativo luksformat, no Linux.
O luksformat, pode ser encontrado em diversas distribuições, como o Fedora, Ubuntu, Debian etc. — e oferece uma interface (na linha de comando) muito simplificada para cryptsetup e mkfs.
capa do tutorial como criptografar um pendrive
O mkfs é um programa de formatação de drives e aceita inúmeros tipos de sistemas de arquivos.
O cryptsetup é usado para configurar volumes com criptografia LUKS.
Ao fazer uso do luksformat, o usuário não precisa se preocupar com nada, basta informar o que deseja formatar (e encriptar) e o sistema de arquivos desejado.
O sistema de arquivos padrão do luksformat é o vfat — mas, se você deseja ter um sistema mais seguro, sugiro usar outro.

Como formatar e encriptar uma mídia com o luksformat

Abra um terminal e rode o luksformat, informando o sistema de arquivos desejado e a mídia a ser formatada.
No exemplo, abaixo, vou formatar a unidade presente em /dev/sdc1. Certifique-se de adequar o meu exemplo à sua situação, se você for copiar e colar no seu terminal.

Os comandos descritos neste tutorial removem todos os dados do seu dispositivo de armazenamento e não podem ser desfeitos.
Tenha em mente, também, que se você esquecer a senha usada para encriptar não será possível recuperar os seus dados.
Você foi avisado.

sudo umount /dev/sdc1
sudo luksformat -t ext3 /dev/sdc1

No exemplo, acima, a mídia em /dev/sdc1 foi desmontada.
Antes disto, indiquei o sistema de arquivos ext3, com a opção -t ext3.
No final do comando, configurei o nome do volume para kRypT0 — você deve escolher o nome que achar melhor.
O aplicativo pede uma confirmação em letras maiúsculas: YES.
Escolha uma senha forte e confirme.
Abaixo, segue a saída da execução do aplicativo no meu sistema:

Criando dispositivo criptografado em /dev/sdc1...

WARNING!
========
Isto irá sobrescrever os arquivos em /dev/sdc1 definitivamente.

Are you sure? (Type uppercase yes): YES
Informe a frase secreta: 
Verify passphrase: 
Digite sua senha novamente para verificação
Informe a frase secreta para /dev/sdc1: 
mke2fs 1.42.9 (4-Feb-2014)
Rótulo do sistema de arquivos=kRypT0
OS type: Linux
Tamanho do bloco=4096 (log=2)
Tamanho do fragmento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122160 inodes, 488447 blocks
24422 blocks (5.00%) reserved for the super user
Primeiro bloco de dados=0
Máximo de blocos de sistema de arquivos=503316480
15 grupos de blocos
32768 blocos por grupo, 32768 fragmentos por grupo
8144 inodes por grupo
Cópias de segurança de superblocos gravadas em blocos: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: pronto                            
Gravando tabelas inode: pronto                            
Creating journal (8192 blocks): concluído
Escrevendo superblocos e informações de contabilidade de sistema de arquivos: concluído

Como formatar e encriptar um drive em VFAT

O sistema de arquivos VFAT (menos seguro) é padrão do luksformat. Para formatar o mesmo drive, com mesmo nome de volume, faça assim:

sudo umount /dev/sdc1
sudo luksformat /dev/sdc1 -n kRypT0

Referências

Outras leituras, que podem contribuir:

Como formatar um drive no Linux, com mkfs

O mkfs torna fácil formatar drives de vários tipos, no Linux, tais como pendrives, cartões de memória, HDs, SSDs etc.
O aplicativo permite várias opções e parâmetros de uso, que lhe conferem grande versatilidade para realizar a tarefa.
O mkfs pode criar uma variedade de sistemas de arquivos em um dispositivo — usualmente (mas não exclusivamente) um disco rígido.
sistema de arquivos - disco rígido - usb - pendrive

Como usar o mkfs

É importante ser cuidadoso.
— não é possível desfazer a formatação depois. Portanto tenha sempre a certeza de que está formatando o drive certo.
O nome (endereço) do drive vai ser algo parecido com “/dev/hda1” ou “/dev/sdc2”.
Você pode também formatar e criar um sistema de arquivos em um arquivo — semelhante a um disco rígido virtual.
Para formatar um pendrive, localizado em /dev/sdc1, comece por desmontar o dispositivo:

sudo umount /dev/sdc1

Agora já é possível criar um sistema de arquivos nele.
O comando, a seguir, formata e apaga todo o conteúdo do dispositivo — e cria um sistema de arquivos vfat nele:

sudo mkfs -t vfat -n pendrive -I /dev/sdc1

Sistemas de arquivo suportados pelo mkfs

Os sistemas de arquivos (filesystems) mais usados, são suportados pelo mkfs:

  • xfs,
  • ext2, ext3, ext4,
  • xia,
  • xfs
  • vfat, msdos, dos,
  • minix,
  • bfs etc.

O aplicativo tem opções apropriadas a cada sistema de arquivos em particular. Ele é um frontend para estes outros programas:

  • mkdosfs
  • mke2fs
  • mkfs.bfs
  • mkfs.ext2
  • mkfs.ext3
  • mkfs.ext4
  • mkfs.minix
  • mkfs.msdos
  • mkfs.vfat
  • mkfs.xfs
  • mkfs.xiafs

Cada um deles tem uma página de manual e um sistema de ajuda próprio — que vale a pena consultar sempre.
Você pode ver a relação deles no seu PC com o comando ls:

ls /sbin/mk*

Linux mkfs
Se você não especificar o sistema de arquivos a ser construído no dispositivo, o mkfs vai usar o ext2 como padrão.

Como verificar se há setores ruins no drive, antes de formatar

Alguns dos aplicativos, da lista acima, tem opções mais avançadas, que permitem verificar a saúde do dispositivo de armazenamento antes de formatar e criar um sistema de arquivos nele.
Para criar um sistema de arquivos VFAT em um pendrive que você pretenda usar para ver filmes, proceda da seguinte forma, para fazer uma checagem no sistema de arquivos do dispositivo após a formatação:

sudo mkfs -t vfat -c -v -n "meus_filmes" /dev/sdc1

O que produzirá uma saída semelhante a esta:

mkfs.fat 3.0.26 (2014-03-07)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Auto-selecting FAT32 for large filesystem
/dev/sdc1 has 124 heads and 62 sectors per track,
hidden sectors 0x0002;
logical sector size is 512,
using 0xf8 media descriptor, with 7870462 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 7671 sectors, and provides 981886 clusters.
There are 32 reserved sectors.
Volume ID is aafb6b57, volume label meus_filmes.
Searching for bad blocks 106080... 212192... 318560... 424288... 530272... 636624... 743008... 849248... 955360... 1061472... 1167968... 1275104... 1381728... 1488096... 1594336... 1701200... 1808480... 1916256... 2022496... 2128864... 2234976... 2341344... 2448096... 2554720... 2661584... 2768864... 2875488... 2981984... 3087968... 3194208... 3300832... 3407456... 3514192... 3620576... 3727824... 3834080... 

Na linha de comando, acima:

  • a opção -c, pede para que o aplicativo faça uma checagem no drive, após a formatação.
  • a opção -v, liga a “verbosidade”.
  • a opção -n, nomeia o novo dispositivo (no máximo 11 letras)

Uma forma alternativa e equivalente de execução é a seguinte:

sudo mkfs.vfat -c -v -n "meus_filmes" /dev/sdc1

Os resultados são os mesmos.

Qual o sistema de arquivos mais recomendado

Se você tentar esta busca no Google, vai encontrar inúmeros fóruns, onde esta questão é debatida, às vezes intensamente e quase nunca com resultados 100% conclusivos.
O fato é que o tipo mais adequado de sistema de arquivos varia de acordo com o tipo de dispositivo — pendrive, HD, SSD etc —, de acordo com a aplicação — reproduzir filmes, guardar arquivos de backup etc —, entre tantos outros fatores.
Vou ser extremamente simplista na minha afirmação, a seguir, apenas para não te deixar sem resposta — mas você deve pesquisar antes de decidir, sempre.

Sistemas de arquivos mais indicados para pendrive

Se o seu dispositivo removível for para armazenar filmes em mp4, mkv etc., para assistir na TV, você vai precisar que ele use um sistema de arquivos reconhecido pelo aparelho: os mais comuns, portanto, são VFAT e NTFS.
Em pendrives maiores que 16 Gb, vá de NTFS.
Se não vai depender da compatibilidade com outros sistemas operacionais, pode usar o ext2 ou ext3 para pendrives ou cartões de memória de baixa capacidade e ext4 em dispositivos mais novos e com maior capacidade de armazenamento.
O ext4 é recomendado também para unidades SSD.

Como usar o ext4

Use a versão mais nova, ext4, sempre — a menos que você tenha motivos especiais para usar uma versão mais antiga.
As equipes de desenvolvimento do Fedora e do Red Hat têm optado pelo XFS — se uma destas é sua distro, mantenha a opção das equipes de desenvolvimento, por que você terá mais suporte.
O uso básico do mkfs, para formatar uma partição com o tipo ext4 é assim:

sudo mkfs -t ext4 /dev/sdd3

Tenha em mente que uma partição precisa estar desmontada sempre, antes de ser formatada — creio que o sistema irá lembrá-lo disto.

LEIA MAIS