Como descompactar e dd uma imagem de disco em um cartão SD com um único comando?

14

Estou sob as seguintes restrições:

  • Eu tenho um .ziparquivo de 1,0 GB no meu computador que contém um arquivo, uma imagem de disco de raspbian. Quando não compactado, esse arquivo tem 3,2 GB de tamanho e é nomeado 2015-11-21-raspbian-jessie.img.
  • Depois de baixar o arquivo zip, tenho pouco menos de 1,0 GB de espaço de armazenamento no meu computador, não há espaço suficiente para extrair a imagem para o meu computador.
  • Esse arquivo precisa ser descompactado e gravado em um cartão SD usando o antigo comum dd.

É possível escrever a imagem no cartão SD sob essas restrições?

Sei que é possível canalizar dados tare, em seguida, canalizá- los para outro lugar, no entanto, isso ainda funcionará para o zipformato de arquivo ou o arquivo inteiro precisa ser descompactado antes que qualquer arquivo seja acessível?

IQAndreas
fonte
Sei que poderia extrair o arquivo zip para uma unidade flash externa, mas isso é mais divertido. Eu quero fazer isso para o desafio (e a experiência de aprendizado) dele!
IQAndreas 29/08
3
Se o seu cartão SD for um dispositivo /dev/sdh, execute unzip -p file.zip >/dev/sdh. (Eu sei que o uso de ddé tradicional, mas não é necessário.)
John1024
Hã. Isso funcionaria sem dd? Imaginei que o parâmetro Tamanho do bloco seria necessário.
CRThaze
2
Sim, funciona sem dd. No passado, o tamanho do bloco era muito importante ao gravar em fitas. Para discos, isso não importa.
precisa saber é o seguinte
1
@TheCzar Além das fitas, o parâmetro de tamanho do bloco ddpode apenas perder dados ou retardar as coisas (ou, em casos raros, acelerar as coisas um pouco, se forem grandes o suficiente). Esquecer dd, é muito raramente útil.
Gilles 'SO- stop be evil'

Respostas:

24

Use unzip -p:

unzip -p 2015-11-21-raspbian-jessie.zip 2015-11-21-raspbian-jessie.img | dd of=/dev/sdb bs=1M
yaegashi
fonte
O código está em execução e nem meu espaço no disco rígido nem minha RAM estão acabando. Tudo de bom até agora.
IQAndreas 29/08
5
Ou simplesmente unzip -p … >/dev/sdb.
Gilles 'SO- stop be evil'
1
@Gilles além da desvantagem, ddàs vezes é útil com sudo:unzip -p ... | sudo dd of=/dev/sdb bs=1M
yaegashi
5
@yaegashi unzip -p … | sudo 'cat >/dev/sdb'Mas eu prefiro o sudo chown $USER /dev/sdbque me dá uma oportunidade extra de verificar se estou escrevendo no dispositivo certo.
Gilles 'SO- stop be evil'
Funcionou lindamente! Se importa se eu editar o nome exato do arquivo, caso alguém queira copiar e colar o comando?
IQAndreas 08/09
0

Após um pouco de dificuldade com a solução anterior:

 unzip -p ~/Downloads/2020-02-05-raspbian-buster-lite.zip | sudo dd of=/dev/disk2 bs=1m

ou, se você deseja ver o progresso e instalou pv:

 unzip -p ~/Downloads/2020-02-05-raspbian-buster-lite.zip | pv | sudo dd of=/dev/disk2 bs=1m
Efrat Levitan
fonte