Posso usar o dd para clonar um cartão SD maior em um cartão SD menor se as partições reais couberem?


9

Eu tenho um cartão SD de 16GB com algumas partições (na verdade, é o cartão para um Raspberry Pi). Eu tenho vários outros cartões de 4 GB nos quais desejo clonar o cartão principal. As 3 partições no cartão principal são:

  • Partição de inicialização Rasp, FAT, 60MB
  • Partição Linux, ext2, 1 GB
  • Partição adicional de "armazenamento", FAT, 1 GB

Se eu usar ddpara criar uma imagem do cartão via:

dd if=/dev/sdb of=~/sd-card.bin

o .bin resultante terá 16 GB de tamanho. Existe uma maneira de ddcopiar apenas o que realmente está sendo usado, ou seja, <4 GB, para que eu possa fazer ddisso em um novo cartão de 4 GB? Ou existe uma solução melhor que eu deveria estar usando?


Acabei criando o conteúdo exato em um novo cartão de 4 GB e clonando-o com dduma quantidade de outros cartões. Ainda assim, gostaria de saber se é possível resolver o problema inicial.

Respostas:


9

Suponho que você esteja usando um computador Linux ou Mac para executar a cópia, não o próprio raspberry pi. Você provavelmente precisará adicionar um tamanho de bloco.

Eu vi um e quatro megas usados ​​para discos Raspberry pi especificando bs = 1M ou bs = 4M. Eu acho que o tamanho do bloco é mais importante ao gravar o disco, pois as transferências grandes são mais rápidas que as menores. Isso não define o tamanho do bloco para o disco, apenas afeta o tamanho das transferências que o dd usa. Uma razão para definir um tamanho de bloco grande é a necessidade de apagar o flash antes de escrevê-lo. Isso é feito automaticamente, mas com mais rapidez, para transferências maiores que o tamanho mínimo de apagamento.

Você pode limitar a quantidade total de dados copiados por dd usando "count". "count" está em unidades de blocos. Se o final da última partição no disco de origem for anterior ao tamanho do destino, você poderá fazer o que deseja.

Algo como dd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000criará uma imagem com tamanho de 4000 MB.

Veja http://en.wikipedia.org/wiki/Dd_(Unix) e http://elinux.org/RPi_Easy_SD_Card_Setup para obter mais informações. Não sabe como encontrar o final da última partição ou o tamanho total dos cartões. No entanto, se você tiver formatado os discos, provavelmente saberá como fazer isso.


Obrigado pela informação. Eu não estava ciente da opção de contagem. Vou tentar.

@ charlie, seria fascinante se você pudesse experimentá-lo com e sem a opção de contagem e relatar de volta. verifique se o tamanho do disco está sendo relatado e se você pode adicionar arquivos a ele e se o tamanho muda. Porque quando o dd falha relacionado a discos de tamanhos diferentes, você obtém esse tipo de problema. Aqui está um exemplo em que eu errei com o dd com duas unidades de tamanhos diferentes. superuser.com/questions/538583/diffitivity-resizing-a-partition No final, não usei o dd para fazer o clone.
21313 barlop

3

Expandindo a resposta de William , é possível calcular o final da última partição usando fdiske uma calculadora:

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

Espaço total usado em bytes = setor final do tamanho da última partição X setor (aqui são 3667967 x 512).

Espaço total usado em GB = espaço total usado em bytes / 1024 3 (aqui é 1,749023 GB).

Normalmente, não é vital criar uma imagem que seja reduzida até o último bit de dados útil, portanto, no exemplo acima, eu criaria uma imagem de 2 GB usando o método descrito por William na mesma resposta anterior :

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

No final da imagem, será incluída uma pequena parte do lixo inútil após seus últimos dados úteis, mas isso não difere em princípio do que o lixo inútil que será substituído quando você gravar a imagem novamente na mídia.

Esse método está funcionando para mim em uma dúzia de clones. Se houver falhas fatais nesse método, elas ainda não foram encontradas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.