.png)
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 dd
do que uma simples operação de cópia de arquivo, onde é melhor usar scp
, rsync
e 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:
dd
gera saída para a saída padrão quando nenhumof
arquivo de saída é especificado e lê a partir da entrada padrão quando nenhum arquivo de entrada é especificado emif
.- 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.
- Como a entrada padrão do cliente SSH neste caso vem de
dd
, e a entrada padrão do remotodd
vem 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 localdd
para a entrada padrão do seu controle remotodd
. (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). - A
MACs
opçã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 adicionaro Ciphers=aes256-cbc
ouo Ciphers=aes256-ctr
forçar a criptografia caso o Raspberry faça uma criptografia mais fraca por padrão. -l
indica 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 -l
e pelos comentários acima), o OP deve ser capaz de copiar a partição raiz da imagem /dev/mmcblk0p3
sem 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.
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.img
comparted 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 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.Certifique-se de que a partição de destino não esteja montada no Raspberry Pi fazendo:
sudo umount /dev/mmcblk0p3
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
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
host
pode ser o que estiver/etc/hostname
no Raspberry Pi (aparentementemypi
para o OP) ou o endereço IP do Raspberry Pi. Lembre-se também de alterar isso adequadamente se não estiver usando oloop0
.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 dizroot=/dev/mmcblk0p5
toroot=/dev/mmcblk0p3
.Você pode excluir os dispositivos
loop
emapper
no sistema do qual você copiou fazendo:sudo kpartx -d pi.img
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.