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.
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.
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.
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:
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
. 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). 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. -l
indica o usuário que você está usando para fazer o login simplesmente porque eu uso essa sintaxe. 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.
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.
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.
Verifique se a partição de destino não está montada no Raspberry Pi fazendo:
sudo umount /dev/mmcblk0p3
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
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
.
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
.
Você pode excluir os dispositivos loop
e mapper
no sistema do qual você fez a cópia:
sudo kpartx -d pi.img
Agora reinicie o Raspberry Pi e você deve estar usando a nova imagem!