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.
3 replies on “Como criar um drive virtual, usando o comando dd no Linux”
Como usar esses comandos para criar um driver virtual removível ou um pen driver? Tenho um programa aqui que sempre tenho gravar um pen driver para funcionar como chave. queria parar de ter que comprar pen drive pois com o tempo eles dão defeitos. Acho que se criar um pen driver virtual com os arquivo que já gravo no pen drive físico resolveria meus problemas.
Excelente tutorial, gostaria de saber se é possível instalar um servidor neste dv e conseguir dar o boot em outras máquinas na rede. Abraço
Eu uso como espaço de armazenamento de arquivos, às vezes criptografado, às vezes para testar recursos de algum sistema de arquivos.
Pode ser usado também como SWAP (ensinei a fazer isto aqui).
Você pode usá-lo em uma máquina virtual QEMU, da maneira que achar melhor.
Já o VirtualBox tem seus próprios meios para criar drives virtuais.