sexta-feira, 12 de setembro de 2014

Trabalhar com arquivo de imagem de dispositivo.

Quando copiamos o conteúdo de uma partição de disco em um arquivo através do comando dd, a montagem desse arquivo é bem simples, vejamos para exemplificar:

Tenho um disco com /dev/sda1 e /dev/sda2. Vou criar um arquivo com a imagem de cada partição com o seguinte comando:

# dd  if=/dev/sda1    of=arquivo_sda1.iso
# dd  if=/dev/sda2    of=arquivo_sda2.iso

Claro que o bom senso diz que devemos fazer isso com o dispositivo desmontado e, principalmente, não ser o disco em uso no momento.

Para montar o arquivo e ler seu conteúdo em outro computador:

# mkdir /mnt/sda1
# mount -t auto -o loop arquivo_sda1.iso /mnt/sda1


# mkdir /mnt/sda2
# mount -t auto -o loop arquivo_sda2.iso /mnt/sda2

* Não vou entrar em detalhes sobre isso aqui porque tem milhões de tutoriais e explicações detalhadas sobre isso na internet, não vou plantar mais do mesmo.

O problema é quando copiamos o conteúdo de um dispositivo inteiro que está particionado. Isso não tem muitos tutoriais por aí. Por exemplo:

Um disco de sistema de 500 GB particionado assim:

/dev/sda1
/dev/sda2
/dev/sda3

Executamos a cópia assim:

# dd if=/dev/sda  of=imagem_de_disco_sda.iso


Pronto, já temos a bomba!!!!! rsrsrs
Na hora de montar essas partições é que vem o problema pois é um único dispositivo.


Então vamos a solução tão simples que creio que por isso que tem tão pouco na internet.


# losetup -P /dev/loop0 imagem_de_disco_sda.iso 

Com a opção -P (maiúscula) o sistema criar tantos dispositivos quantas forem as partições do disco da seguinte forma, no nosso caso:

/dev/loop0p1
/dev/loop0p2
/dev/loop0p3

Então para montar as partições:

# mkdir /mnt/loop0p1
# mount -t auto /dev/loop0p1 /mnt/loop0p1

# mkdir /mnt/loop0p2
# mount -t auto /dev/loop0p2 /mnt/loop0p2

# mkdir /mnt/loop0p3
# mount -t auto /dev/loop0p3 /mnt/loop0p3
 

* a opção "-t auto" pode mudar dependendo do sistema de arquivo que existir na partição. Sugiro o uso do comando blkid para identificar os Sistemas de Arquivo de cada partição.
* A extensão ".iso" no arquivo de imagem é meramente ilustrativa, pode ser qualquer nome.


Um pouco mais...
Há casos que alguns sistemas operacionais não possuem o aplicativo losetup, em substituição vem o kpartx, como o CentOS 6.5. Então vou aproveitar e explicar como usar esse comando também:

# kpartx -av imagem_de_disco_sda.iso
Vai ser mostrada a seguinte saída:

add map loop0p1 (253:4): 0 16002 linear /dev/loop0 63
add map loop0p2 (253:5): 0 4415 linear /dev/loop0 16065

Diferente do losetup, ele não cria os atalhos /dev/loop0p1 e /dev/loop0p2. Mas observer uma sequência numérica na saída do comando, "253:4" e "253:5".
Se você listar o conteúdo de /dev/block, vai ver esses números lá apontando para dm-x que também tem links em /dev/mapper/loop0pX.
Tá, é uma confusão que não vem ao caso explicar agora.

A referência numéria no /dev/block é a que vai aparecer com mais frequência, então vamos utilizá-la para nosso exemplo:

Então, agora é só montar o dispositvo:

# mount -t auto /dev/block/253:4 /mnt/loop0p1
# mount -t auto /dev/block/253:5 /mnt/loop0p2


Pronto.
Já estão montados os dispositivos.









Nenhum comentário: