Um pequeno tutorial sobre como mapear arquivos para se tornarem, transparentemente, partições no Linux afim de poder utilizar para estudos ou outros casos no resto do sistema.
1. Introdução
Imagine que você está tentando aprender sobre como particionar um disco, ou então como gerenciar LVM e/ou RAID, só que não tem os recursos necessários (leia-se HDs) para ficar testando na prática? Afinal, do que adianta aprendermos se também não praticamos pra fixar as coisas na cabeça (e nos dedos!)?
Com o Linux existe uma maneira muito prática de se poder testar todos os tipos de ferramentas que trabalham com dispositivos de bloco, como se fossem, por exemplo, uma partição de um HD instalado na máquina. Com alguns poucos passos, é possível (e de forma transparente), utilizar arquivos como se fossem partições. Este pequeno tutorial ensina como fazer exatamente isso.
O recurso que torna isto possível é o dispositivo de loop. O dispositivo de loop é um dispositivo especial que mapeia um arquivo “comum” para um arquivo de bloco (no /dev) e torna possível utilizar este arquivo em todos os programas que precisam destes dispositivos para funcionar, como por exemplo: mount, fsck, mkfs, ferramentas do lvm, ferramentas de raid, entre outros. Não sei se é o caso, mas por exemplo, se algum dia você se deparou em ter que montar uma imagem ISO no HD sem precisar queimar para CD/DVD, você provavelmente utilizou um dispositivo de loop! Você deve ter usado um comando parecido com este:
# mount -o loop /root/imagem_do_cd_radical.iso /mnt/cdrom
Notou a opção -o loop? Pois é, esta opção diz para o comando mount utilizar a imagem iso mapeando com o dispositivo de loop para se tornar um dispositivo de bloco, assim podendo ser montado no diretório /mnt/cdrom. As vezes sem sabermos, acabamos de utilizar este recurso que nem todo mundo conhece.
Mas o comando acima apenas montou algo que já existia… Como eu poderia criar “partições em arquivos”?
2. Criando os arquivos
Antes de mapear os arquivos como dispositivos de bloco, temos que primeiro criar estes arquivos. O que faremos aqui será apenas criar arquivos vazios (e de espaço contínuo, ou seja, espaço já alocado, porém vazio). Para fazer isso utilizamos o comando dd, da seguinte forma:
# dd if=/dev/zero of=/root/arq-particao1 bs=1M count=150
O comando acima vai criar um arquivo vazio chamado /root/arq-particao1 utilizando um espaço contínup com o tamanho de 150MB (bs = bytes, count = quantidade, 1MB vezes 150). Ok, agora vamos criar mais dois arquivos destes:
# dd if=/dev/zero of=/root/arq-particao2 bs=1M count=500 # dd if=/dev/zero of=/root/arq-particao3 bs=1M count=300
(Agora criamos um de 500MB e outro e 300MB).
3. Mapeando os arquivos para ser dispositivos de bloco
Criado os arquivos, está na hora de transformá-los para dispositivos de bloco! O comando losetup faz isso. A sintaxe é bem simples e por isso já mapearemos os três arquivos que criamos anteriormente:
# losetup /dev/loop0 /root/arq-particao1 # losetup /dev/loop1 /root/arq-particao2 # losetup /dev/loop2 /root/arq-particao3 # losetup -a /dev/loop0: [fd00]:618350 (/root/arq-particao1) /dev/loop1: [fd00]:618351 (/root/arq-particao2) /dev/loop2: [fd00]:618352 (/root/arq-particao3)
Pronto, agora os arquivos estarão funcionando como dispositivos de bloco através do /dev/loop0, /dev/loop1 e /dev/loop2 (note que eu usei a opção -a do comando losetup para mostrar o que há mapeado no momento). Agora eu posso simplesmente fazer o que bem quiser com esses dispositivos, que na verdade estarei mexendo nos arquivos. Vamos supor que eu queira formatar um destes “arquivos-partições” com o ext3:
# mkfs.ext3 /dev/loop0
Posso também montar:
# mkdir -p /mnt/arq-particao1 # mount /dev/loop0 /mnt/arq-particao1
Posso desmontar, posso escrever arquivos lá dentro, posso fazer qualquer coisa como se fosse uma partição de um HD comum. Posso, nas ferramentas de RAID/LVM, utilizar estes arquivos, entre outros.
4. Desfazendo-se dos mapeamentos
Uma vez que eu usei estes arquivos, se eu quiser parar de usá-los, basta desmontar os dispositivos do sistema para que eles não fiquem mais em uso, e desmapeá-los com o parâmetro -d do comando losetup:
# losetup -a /dev/loop0: [fd00]:618350 (/root/arq-particao1) /dev/loop1: [fd00]:618351 (/root/arq-particao2) /dev/loop2: [fd00]:618352 (/root/arq-particao3) # losetup -d /dev/loop0 # losetup -d /dev/loop1 # losetup -d /dev/loop2
E pronto, pode remover os arquivos, movê-los, criar outros, experimentar. Espero que a dica tenha sido útil para os estudos futuros ;)