como faço isso: dd if=coolstuff.iso of=(ssh kev@mypi )

como faço isso: dd if=coolstuff.iso of=(ssh kev@mypi )

o leitor de cartão do meu laptop não quer funcionar. posso usar o dd (ou alguma outra ferramenta) para gravar uma imagem em um disco de rede.

Estou tentando substituir uma distribuição Raspberry Pi por outra. O cartão SD tem 6GB livres e usa apenas 2GB.

do cartão SD

$ sudo parted -l
Model: SD SU08G (sd/mmc)
Disk /dev/mmcblk0: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  95.4MB  94.4MB  primary   fat16        lba
 2      95.4MB  1878MB  1783MB  extended
 5      96.5MB  1878MB  1782MB  logical   ext4
 3      1878MB  7948MB  6070MB  primary   ext4

EPor favor, antes de criticar por que quero fazer isso, responda à pergunta... depois me diga o quão estúpido eu sou.

Responder1

Você pode canalizar através do SSH:

dd if=something | ssh host dd of=something

Mas você deve ter um motivo melhor para usar dddo que uma simples operação de cópia de arquivo, onde é melhor usar scp, rsynce similares.

Responder2

Supondo que você tenha um servidor SSH no Raspberry e o cartão SD no Raspberry apareça /dev/sda, você faria algo assim:

dd if=SDcardimage.img | ssh -o MACs=hmac-ripemd160 -l raspberry-pi-user <your Raspberry's IP address> 'dd of=/dev/sda'

Eu explico:

  1. ddgera saída para a saída padrão quando nenhum ofarquivo de saída é especificado e lê a partir da entrada padrão quando nenhum arquivo de entrada é especificado em if.
  2. Quando você passa um comando diretamente para SSH, seu cliente encaminhará sua entrada padrão para o servidor e, em seguida, o servidor passará esses dados para a entrada padrão do processo especificado no comando enviado ao servidor.
  3. Como a entrada padrão do cliente SSH neste caso vem de dd, e a entrada padrão do remoto ddvem do servidor SSH, isso resultará no par cliente-servidor SSH atuará como um transporte de dados criptografados, conectando a saída padrão do seu local ddpara a entrada padrão do seu controle remoto dd. (Na verdade, é assim que o SSH faz login remoto, com a entrada padrão vindo do teclado e o processo remoto recebendo a entrada padrão sendo um shell UNIX).
  4. A MACsopção que passo para SSH força a conexão a usar o algoritmo RIPEMD160 como resumo de integridade da mensagem. Isso protege os dados transportados para que qualquer erro de transmissão ou violação intencional seja detectado. Isso é importante aqui, considerando que você está transmitindo uma imagem de disco usando ondas de rádio. Você pode querer adicionar o Ciphers=aes256-cbcou o Ciphers=aes256-ctrforçar a criptografia caso o Raspberry faça uma criptografia mais fraca por padrão.
  5. -lindica o usuário que você está usando para fazer login simplesmente porque costumo usar essa sintaxe.

Responder3

Atualizar o sistema em execução para que a nova imagem raiz seja usada na próxima reinicialização é um pouco mais complicado do que apenas fazer uma cópia direta pela rede. Supondo que a imagem raiz esteja ativada /dev/mmcblk0p5(conforme indicado pela saída parted -le pelos comentários acima), o OP deve ser capaz de copiar a partição raiz da imagem /dev/mmcblk0p3sem problemas (desde que você não tenha nenhum dado que você deseja manter nesta partição). Você pode seguir as instruções abaixo.No entanto, certifique-se de realizar as verificações sugeridas e alterar os comandos conforme apropriado. Copiar cegamente os comandos abaixo é uma boa maneira de limpar seu sistema.

  1. Presumirei que a partição raiz na nova imagem é a partição 5, mas pode não ser. Você pode imprimir a tabela de partição de uma imagem chamada pi.imgcom parted pi.image print. Se não tiver certeza, adicione a saída à sua pergunta.

  2. Como estamos apenas procurando copiar a imagem para a partição raiz e não a imagem inteira do disco (que também conterá sua própria tabela de partição e partição de inicialização), você precisa separá-la do resto da imagem. Uma maneira de fazer isso (em um sistema Linux) é usar kpartx:

    sudo kpartx -av pi.img
    

    Se não houver outros dispositivos de loop em uso, isso será usado loop0; no entanto, verifique a saída e altere os comandos adicionais de acordo.

  3. Certifique-se de que a partição de destino não esteja montada no Raspberry Pi fazendo:

    sudo umount /dev/mmcblk0p3
    
  4. Para a próxima etapa, você precisa ser capaz de canalizar dados por meio de ssheter acesso root. Existem algumas maneiras de fazer isso, mas acho que a mais fácil é habilitar o login root. Normalmente isso não é recomendado, mas como você deseja fazer upload de uma nova imagem do sistema, não acho que será um problema. No Raspberry Pi faça:

    sudo passwd root
    
  5. Em seguida, copie a imagem para o Raspberry Pi (usandoSugestão do RAAK para integridade de dados):

    sudo dd if=/dev/mapper/loop0p5 |
      ssh -o MACs=hmac-ripemd160 root@host dd of=/dev/mmcblk0p3
    

    hostpode ser o que estiver /etc/hostnameno Raspberry Pi (aparentemente mypipara o OP) ou o endereço IP do Raspberry Pi. Lembre-se também de alterar isso adequadamente se não estiver usando o loop0.

  6. Em seguida, altere a partição raiz do Raspberry Pi, pelo que posso ver (não tenho um Raspberry Pi para testar), você precisa alterar /boot/cmdline.txt. Você mudaria a parte que diz root=/dev/mmcblk0p5to root=/dev/mmcblk0p3.

  7. Você pode excluir os dispositivos loope mapperno sistema do qual você copiou fazendo:

    sudo kpartx -d pi.img
    
  8. Agora reinicie o Raspberry Pi e você deverá usar a nova imagem!

Responder4

E se você inicializar o Pi usando uma imagem USB ARM, conectar-se à rede e assim o armazenamento ficará bastante domesticado. Eu não sou um profissional, apenas cuspa aqui. Especialistas, por favor, corrijam se eu estiver errado.

informação relacionada