Tenho uma unidade USB de 8 GB conectada ao meu sistema, com a seguinte aparência:
[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 tem cerca de 70 MB, a partição ext2 tem 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) tem cerca de 8 GB, 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 fique em torno 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 lidar com arquivos de 8 GB, mas não quero desperdiçar meu espaço em disco.
Respostas:
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
isso faz isso écount=
. Sua última partição termina em 103 e a contagem precisará ser 1 extra (104) e o tamanho da sua unidade é 8225280 bytes (de acordo com afdisk -l
saída). Então você pode simplesmente modificar seu comando desta maneira:Eu, no entanto, sugiro que você corra
fdisk -u -l /dev/sdb
. Os cilindros não são mais relevantes nesta era mais, então você estará melhor se vir o setor contar para evitar erros de arredondamento. Então você terá que executar:onde count será definido como o número obtido
fdisk -u -l
no final da última partição mais um , em vez do número 104. O tamanho padrão do blocodd
é de 512 bytes, que também é a unidade quefdisk -u -l
será usada na saída.A tabela de partição de backup de uma partição GPT é armazenada no final do disco, mas como você não está usando o GPT, você ficará bem.
fonte
Você só precisa dizer ao dd para ler apenas a parte da unidade em que está interessado. O parâmetro que você está procurando é
count
.Portanto, pegue o tamanho do seu 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, que é 808.
Então seu comando é
dd if=... of=... bs=1M count=808
fonte