segunda-feira, 26 de julho de 2010

Como criar imagens de partições e montá-las separadamente

Um arquivo imagem de um disco rígido ou de uma partição pode ser criado utilizando a ferramenta dd. O dd é um comando usado para copiar de um arquivo ou dispositivo sendo a entrada, para um arquivo ou dispositivo sendo a saída, gerando uma simples imagem idêntica. O dd cria uma cópia exata do arquivo ou dispositivo, incluindo o slack space dos arquivos e o espaço não alocado. Não é somente uma cópia lógica da estrutura de arquivos. O dd não adiciona informações extras em sua saída, é apenas uma cópia do fluxo de bits do início ao fim.

Para fazer uma imagem de um dispositivo de armazenamento para um arquivo, a sintaxe da linha do comando dd é semelhante ao apresentado abaixo:

# dd if=/def/sdf of=arquivoimagem.dd

No exemplo acima o operador "if" recebe o dispositivo de entrada e o operador "of" indica o arquivo de saída. Este comando serve para copiar um disquete, um pendrive, um DVD e até um disco rígido inteiro, claro que respeitando o caminho para o respectivo dispositivo. Opcionalmente pode-se acrescentar um controle para que o processo de cópia não seja interrompido caso encontre algum erro na leitura. A linha de comando ficaria assim:

# dd if=/def/sdf of=arquivoimagem.dd conv=noerror,sync

O arquivo imagem gerado, se for de um dispositivo de armazenamento com uma estrutura simples, isto é, com uma partição apenas, como é o caso de disquetes, pendrives ou DVDs, pode ser facilmente montado para acesso ao seu conteúdo. O comando para isso é semelhante ao comando como se fosse montar o próprio dispositivo, apenas acrescido de algumas opções para usar uma interface de loop:

# mount -t vfat -o ro,loop arquivoimagem.dd /mnt/pendrive

A opção "loop" indica que será utilizado um dispositivo de loop para montar o sistema de arquivos contido no arquivo imagem. O kernel das distros Linux costumam já vir com suporte para dispositivos de loop. A opção "ro" é porque o conteúdo do arquivo imagem é só para leitura.

Para desmontar, o comando é o padrão:

# umount /mnt/pendrive

Para imagens de discos rígidos a situação é um pouco diferente. Um disco rígido possui diversos componentes que são um setor de boot, uma tabela de partição e uma ou várias partições. A imagem deste tipo de dispositivo também possui todos estes componentes, lembre-se, é uma cópia idêntica.

O comando de montagem não é capaz de encontrar o sistema de arquivos em uma imagem de disco rígido porque não é capaz de reconhecer a tabela de partição.

Quando a imagem é de um disco rígido que contém somente uma partição, o comando de montagem pode receber uma opção que direciona ao início da partição, pulando o setor de boot. Normalmente cada setor do disco contém 512 bytes e os primeiros 63 setores são para as informações da MBR etc., isto equivale a 32256 bytes do início até a partição. O comando de montagem para um caso deste tipo é como o exemplo abaixo:

# mount -t vfat -o ro,loop,offset=32256 arquivoimagem.dd /mnt/hd

Com o seguinte comando podemos confirmar estes valores de tamanho de setor etc:

# fdisk -lu arquivoimagem.dd

Mas é possível criar uma imagem somente da partição, que deste modo a imagem poderá ser facilmente montada como um dispositivo de loop. O comando para criar a imagem de uma partição é:

# dd if=/dev/sda1 of=imagemparticao1.dd

As partições podem ser listadas pelo comando:

# fdisk -l /dev/sda

Quando a imagem é de um disco rígido que contém mais de uma partição, podemos separar a imagem em partes onde cada parte vai se referir a uma única partição. Podemos utilizar para isso a mesma ferramenta dd. Cada partição estará em um arquivo imagem exclusivo e esta imagem poderá ser montada diretamente como um dispositivo de loop.

Primeiramente é preciso confirmar as posições de início e fim de cada partição. Utiliza-se para isso a ferramenta sfdisk em uma linha de comando semelhante a:

# sfdisk -luS imagem.dd

A saída deste comando é como as linhas a seguir:

Disk imagem.dd: cannot get geometry
Units = sectors of 512 bytes, counting from 0

    Device  Boot    Start       End    #sectors     Id     System
imagem.dd1             57     10259       10203     83     Linux
imagem.dd2          10260    112859      102600     83     Linux
imagem.dd3         112860    178694       65835     82     Linux swap / Solaris
imagem.dd4         178695    675449      496755     83     Linux

As informações que interessam são a do início (Start) e número de setores (#sectors) para cada uma das partições. Estes valores serão utilizados nas opções "skip" e "count" do comando dd. A opção "skip" faz com que o dd pule alguns setores do início da entrada e a opção "count" faz com que o dd copie somente alguns blocos de entrada. Um exemplo de linha de comando, com o aviso de conclusão, para extrair a segunda partição do exemplo acima é apresentado abaixo:

# dd if=imagem.dd of=imagemparticao2.dd bs=512 skip=10260 count=102600
102600+0 records in
102600+0 records out

Para extrair cada uma das partições existentes no arquivo imagem é necessário executar o mesmo comando, apenas alterando os valores para "skip" e "count". Examinando este comando mais a fundo, o arquivo de entrada é o arquivo imagem de todo o disco rígido (imagem.dd), a saída é a criação de um outro arquivo imagem. O tamanho do bloco é o tamanho do setor (512 bytes), conforme mostrado pelo comando sfdisk, e cada pedaço diskdump precisa iniciar onde a partição inicia e terminar no final da partição.

Esta imagem de somente uma partição pode ser montada para leitura utilizando o mesmo comando para montar dispositivos de loop. Um exemplo de comando é o abaixo:

# mount -t ext2 -o ro,loop imagemparticao2.dd /mnt/part2/

Se for preciso, é possível descobrir qual o sistema de arquivos da partição contida na imagem. A ferramenta file, que mostra o tipo do arquivo, pode ajudar nesta informação. Um exemplo de linha de comando com sua mensagem de saída é:

# file imagemparticao2.dd
imagemparticao2.dd: Linux rev 1.0 ext2 filesystem data (mounted or unclean)

A imagem gerada pela ferramenta dd é uma réplica fiel da sua origem. Muitas ferramentas disponíveis para o sistema Linux são capazes de trabalhar com uma imagem da mesma forma que com o dispositivo original, principalmente as ferramentas forenses.

Nenhum comentário:

Postar um comentário