FUNDO
Um cartão SD foi configurado para um Raspberry pi. O objetivo é replicar exatamente o cartão SD (sistema operacional, aplicativos, dados) para que a réplica funcione em um rPi exatamente como o cartão SD \master original.
ATUALIZAÇÃO: Suponha:
- a replicação será realizada em um laptop configurado com um sistema operacional semelhante ao UNIX
- a replicação não deve ser realizada a partir do rPi
- o cartão SD de destino é da mesma marca/modelo
- o cartão SD de origem é particionado com diferentes sistemas de arquivos:
Questões
Quais opções de clonagem UNIX estão disponíveis para um laptop Ubuntu HP com slot para cartão SD e leitor/gravador de cartão SD USB.
Faz diferença se o cartão SD USB RW é o leitor ou gravador?
Um objetivo (restrição) é evitar a compra de hardware adicional.
Observações da solução
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
Seg, 3 de junho 17:53:18 EDT 2019 [sudo] senha para o usuário: Seg, 3 de junho 23:42:17 EDT 2019
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date
Terça-feira, 4 de junho 00:33:50 EDT 2019 [sudo] senha para o usuário: 119GiB 6:06:12 [5,56MiB/s] [===================== ============>] 100%
Terça, 4 de junho 06:43:05 EDT 2019
A análise gParted do cartão SD atualizado mostra particionamento idêntico:
MacOS\OSX
Para encontrar a localização do cartão SD:
diskutil list
Certifique-se de desmontar o cartão SD ao gravar nele:
sudo diskutil unmount /dev/disk#
onde # é 1,2,3...
Responder1
Se você deseja apenas copiar um cartão SD exatamente de um para outro, você pode fazer isso comddna linha de comando.
Você NÃO deve fazer isso no seu próprio sistema operacional do Raspberry Pi. Isso ocorre porque o sistema operacional pode gravar no cartão SD durante a cópia e corromper a cópia.
Para copiar um cartão SD, conecte ambos em seus dois leitores (não importa se são USB ou não). Em seguida, verifique o conteúdo de /dev
. Os cartões devem aparecer como /dev/sd*
. Por exemplo /dev/sdb
. Tenha cuidado porque seu disco rígido interno pode já estar ligado /dev/sda
.
Certifique-se de que nenhum cartão SD esteja montado, leia a saída digitando isto no prompt de comando:
mount | grep /dev/sd
Verifique também a saída de para saber qual cartão tem qual nome de arquivo (como root):
sudo blkid
Para realmente copiar (por exemplo, de /dev/sdb para /dev/sdc) digite (como root):
dd if=/dev/sdb of=/dev/sdc bs=4096 status=progress
Responder2
Os sistemas Unix disponibilizam dispositivos de armazenamento através de umarquivo de dispositivo. Os arquivos de dispositivo se comportam como arquivos comuns de várias maneiras. Em particular, para fazer uma cópia exata do dispositivo de armazenamento, basta copiar o conteúdo do dispositivo de origem para o dispositivo de destino.
Primeiro você precisa determinar o arquivo do dispositivo de origem e o arquivo do dispositivo de destino. O nome depende da sua variante Unix e de como ela está configurada, mas na prática os arquivos do dispositivo estão sempre no /dev
diretório. Se você tiver o cartão SD montado, poderá descobrir onde está o arquivo do dispositivo
df /media/sdcard1/some/file/on/the/sdcard
O arquivo do dispositivo está na primeira coluna. Outras ferramentas podem fornecer as mesmas informações, por exemplo, mensagens de log do kernel quando você insere o cartão SD ou o lsblk
comando no Linux.
Pode haver partições no cartão. Nesse caso, copie o cartão inteiro, mesmo que haja uma única partição, pois algumas informações de tempo de inicialização podem estar localizadas fora da partição. Por exemplo, se df
for exibido /dev/sdb1
no Linux, copie /dev/sdb
e não apenas /dev/sdb1
.
Se você retirar o cartão SD e inseri-lo novamente, ele geralmente terá o mesmo nome de arquivo do dispositivo de antes, mas isso não é garantido.
Antes de copiar, certifique-se de que:
- O dispositivo de origem não está montado ou está montado apenas como somente leitura.
- O dispositivo de destino não está montado.
- O dispositivo de destino é pelo menos tão grande quanto a fonte. No Linux,
lsblk
exibe o tamanho do dispositivo. - Você tem o dispositivo de destino correto. Observe que o comando abaixo irá sobrescrever seu conteúdo sem pedir confirmação!
Suponha que você tenha identificado que o dispositivo de origem é /dev/sdb
e o dispositivo de destino é /dev/sdc
. Para copiar o conteúdo, execute o seguinte comando como root:
cat /dev/sdb >/dev/sdc
Se você usar sudo, o redirecionamento >
precisa acontecer como root, então você precisa escrever algo como
sudo sh -c 'cat /dev/sdb >/dev/sdc'
Como alternativa, para garantir que você não sobrescreva acidentalmente o dispositivo errado, proceda em duas etapas:
- Dê ao usuário (
gatorback
no meu exemplo) permissão para ler no dispositivo de origem (dev/sdb
no meu exemplo) e gravar no dispositivo de origem (/dev/sdc
no meu exemplo).sudo setfacl -m user:gatorback:r /dev/sdb sudo setfacl -m user:gatorback:w /dev/sdc
- Execute a cópia sem sudo.
cat /dev/sdb >/dev/sdc
Você pode copiar a imagem do disco para um arquivo e depois copiar o arquivo de imagem para o dispositivo de destino. Isto é útil se você precisar fazer várias cópias, ou se tiver apenas um leitor de cartão SD, ou para reduzir o risco de copiar na direção errada.
sudo cat /dev/sdb >sdcard.image
- Retire o cartão de origem e insira o cartão de destino.
- Opcionalmente, verifique o conteúdomontando a imagem, por exemplo
sudo mount -o loop -r sdcard.image /mnt
. sudo sh -c 'cat sdcard.image >/dev/sdb'
Se você quiser ver informações de progresso de maneira conveniente, usepv
em vez de cat
( pv
raramente é instalado por padrão, mas está disponível como pacote na maioria das distribuições).