O título pode ser um pouco confuso, então em detalhes: O que eu fiz foi clonar um pequeno módulo flash de 32GB que tinha três partições. Por acaso eu tinha um USB de 32GB por aí, então achei que poderia funcionar; isso não aconteceu. Parece que 32GB da Toshiba é um pouco diferente de 32GB da Sandisk.
Enfim, então levei para uma unidade externa de 2TB e fiz exatamente a mesma coisa. Especificamente, fiz o seguinte:
dd if=/dev/sdX of=/dev/sdY bs=100M
aside O bloco final aparece como uma cópia parcial ou é descartado se o EOF for alcançado primeiro?
De modo a essencialmente clonar todo o módulo flash - tabela de partição e tudo. Os 32GB - > 2TB foi bastante fácil, pois o utilitário dd
foi interrompido corretamente após a leitura até o final da (terceira) partição final.
Então, o que eu quero fazer agora é criar um blob binário simples contendo toda a imagem flash. Minha unidade de 2 TB agora é identicamente particionada em relação à unidade original: sdx1, sdx2, sdx3
. Então, mais uma vez eu levei para dd
com o seguinte:
dd if=/dev/sdx of=firmware.bin bs=100M
Fazer isso não apenas copiará os primeiros 32GB nos quais estou interessado, mas também continuará e clonará a unidade inteira de 2TB, ou assim foi quando eu tentei. Eu posso encontrar o tamanho exato dos bytes das partições de interesse pelo seguinte:
$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 2000398933504 0 disk
├─sdc1 8:33 0 134217728 0 part
├─sdc2 8:34 0 2147483648 0 part
└─sdc3 8:35 0 29734297600 0 part
Uma maneira definitiva de resolver isso seria definir o tamanho de blocos de dd
para um byte e, em seguida, definir o número de blocos como a soma dos três tamanhos acima:
dd if=/dev/sdc of=firmware.bin bs=1 count=32015998976
Mas não consigo imaginar quanto tempo isso realmente levaria.
EDIT : Um teste rápido de curiosidade dos itens acima mostrou uma taxa de transferência sólida de ~ 150KB / s.
tl; dr Como posso copiar as três primeiras partições de um disco que é muito maior do que a soma dos tamanhos das partições?