cria uma imagem de uma unidade USB sem partição não alocada

10

Tenho uma unidade USB de 8 GB anexada ao meu sistema, que se parece com isso:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

Então, basicamente, minha partição FAT é de cerca de 70 MB, a partição ext2 é de cerca de 740 MB e o restante do espaço (~ 7 GB) não é alocado. Agora, quando eu dd meu disco rígido USB via:

dd if=/dev/sdb of=myimage.img bs=1M

o arquivo de saída (myimage.img) está em torno de 8GB, que é a operação normal do dd.

Pergunta: O que estou procurando é uma maneira de clonar diretamente meu disco rígido USB sem o espaço não alocado, para que meu arquivo de resultado seja de cerca de 1 GB descompactado em vez de 8 GB. A razão pela qual estou perguntando é porque o arquivo de saída (myimage.img) está sendo usado por um programa de simulador para inicializar a imagem. O simulador pode manipular arquivos de 8 GB, mas não quero desperdiçar meu espaço em disco.

    
por modest 08.11.2012 / 01:21

2 respostas

10

Se bem entendi, você deseja criar uma imagem desde o início do disco até o final da última partição.

O parâmetro para dd que faz isso é count= . Sua última partição termina em 103 e seu tamanho de unidade é 8225280 bytes (de acordo com a saída fdisk -l ). Então você poderia simplesmente modificar seu comando desta maneira:

dd if=/dev/sdb of=myimage.img bs=8225280 count=103

No entanto, sugiro que você execute fdisk -u -l /dev/sdb . Cilindros não são mais relevantes nessa idade, então é melhor você ver o setor para evitar erros de arredondamento. Então você terá que correr:

dd if=/dev/sdb of=myimage.img count=...

onde count será definido para o número que você obteve de fdisk -u -l como o final da última partição, em vez do que costumava ser 103. O tamanho de bloco padrão para dd é 512 bytes, que também é a unidade que fdisk -u -l usará na saída.

A tabela de partições de backup de uma partição GPT é armazenada no final do disco, mas como você não está usando o GPT, tudo bem.

    
por 08.11.2012 / 02:27
2

Você só precisa informar ao dd para ler apenas a parte da unidade em que está interessado. O parâmetro que você está procurando é count .

Então pegue seu tamanho de cilindro de 8.225.280 e multiplique o número de cilindros em uso de 103 e você terá 847.203.840 bytes. Como você está usando um tamanho de bloco de um megabyte, converta esses bytes em megabytes, o que é 808.

Portanto, seu comando é dd if=... of=... bs=1M count=808

    
por 08.11.2012 / 01:47

Tags