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

5

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

Estou tentando substituir uma distro de framboesa pi por outra. O cartão SD tem 6gb grátis 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

E Por favor , antes de você criticar porque eu quero fazer isso, responda a pergunta ... então me diga o quão estúpido eu sou.

    
por kevcoder 28.03.2014 / 17:16

3 respostas

4

Você pode canalizar pelo SSH:

dd if=something | ssh host dd of=something

Mas você deve ter um motivo melhor para usar dd do que uma simples operação de cópia de arquivo, em que você está melhor com scp , rsync e afins.

    
por 28.03.2014 / 17:26
1

Supondo que você tenha um servidor SSH no seu Raspberry e o cartão SD no Raspberry aparecer em /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. dd sai para a saída padrão quando nenhum arquivo de saída of é especificado e lê a partir da entrada padrão quando nenhum arquivo de entrada é especificado em if .
  2. Quando você passa diretamente um comando para o SSH, seu cliente encaminhará sua entrada padrão para o servidor e, em seguida, o servidor passa esses dados para a entrada padrão do processo especificado no comando enviado para o servidor.
  3. Como a entrada padrão do cliente SSH neste caso é proveniente de dd , e a entrada padrão do controle remoto dd vem do servidor SSH, isso resultará em que o par cliente-servidor SSH funcionará como um criptografado transporte de dados, vinculando a saída padrão do seu local dd à entrada padrão do seu controle remoto dd . (Isso é, na verdade, como o SSH faz login remoto, com a entrada padrão proveniente de seu teclado e o processo remoto recebendo entrada padrão sendo um shell UNIX).
  4. A opção MACs que eu passo para o 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 adulteração intencional seja detectada. Isso é importante aqui, considerando que você está transmitindo uma imagem de disco usando ondas de rádio. Você pode querer adicionar o Ciphers=aes256-cbc ou o Ciphers=aes256-ctr para forçar a criptografia apenas no caso de o Raspberry fazer uma criptografia mais fraca por padrão.
  5. -l indica o usuário que você está usando para fazer o login simplesmente porque eu uso essa sintaxe.
por 28.03.2014 / 23:58
1

A atualização do sistema em execução para que a nova imagem raiz seja usada na próxima reinicialização seja um pouco mais complicada do que apenas fazer uma cópia direta na rede. Supondo que a imagem raiz esteja em /dev/mmcblk0p5 (conforme indicado pela saída de parted -l e os comentários acima), o OP deve poder copiar a partição raiz da imagem para /dev/mmcblk0p3 sem nenhum problema (fornecido Claro que você não tem 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, copiando cegamente os comandos abaixo é uma boa maneira de mangueira do sistema.

  1. Eu assumirei que a partição raiz na nova imagem é a partição 5, no entanto, pode não ser. Você pode imprimir a tabela de partição de uma imagem chamada pi.img com 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 de disco inteira (que também contém sua própria tabela de partição e partição de inicialização), é necessário 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 usará loop0 , mas, por favor, verifique a saída e altere os comandos adicionais de acordo.

  3. Verifique se a partição de destino não está montada no Raspberry Pi fazendo:

    sudo umount /dev/mmcblk0p3
    
  4. Para a próxima etapa, você precisa conseguir enviar dados por meio de ssh e com acesso root. Existem algumas maneiras de fazer isso, mas acho que o mais fácil é apenas ativar o login root. Geralmente isso não é aconselhável, mas como você deseja fazer upload de uma nova imagem do sistema, não acho que seja um problema. No Raspberry Pi faça:

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

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

    host pode ser o que estiver em /etc/hostname no Raspberry Pi (aparentemente mypi para o OP) ou o endereço IP do Raspberry Pi. Lembre-se também de alterar isso de acordo se você não estiver usando loop0 .

  6. Em seguida, altere a partição raiz para o Raspberry Pi, até onde eu possa ver (eu não tenho um Raspberry Pi para testar) você tem que alterar /boot/cmdline.txt . Você mudaria a parte que diz root=/dev/mmcblk0p5 para root=/dev/mmcblk0p3 .

  7. Você pode excluir os dispositivos loop e mapper no sistema do qual você fez a cópia:

    sudo kpartx -d pi.img
    
  8. Agora reinicie o Raspberry Pi e você deve estar usando a nova imagem!

por 29.03.2014 / 13:36

Tags