Como usar o Cygwin para copiar uma imagem de um cartão de memória SD


30

Para encurtar a história, estou trabalhando em uma máquina com Windows 7 e gostaria de retirar a imagem de um cartão SD (fazendo backup do cartão em um Raspberry Pi ). Estou tentando usar o Cygwin , mas não estou tendo muito sucesso.

Examinando o /devdiretório, parece que meu cartão SD está aparecendo como sdde sdd1. No entanto, quando executo o seguinte comando:

dd if=/dev/sdd of=RPi.img

Eu recebo o seguinte:

dd: abertura '/ dev / sdd': permissão negada

Eu usei o dd em um Mac e no Linux sem nenhum problema, usando sintaxe semelhante. O que estou perdendo com Cygwin?


Você já tentou dd if=/dev/sdd1 of RPi.img?
Kruug

Se fizer isso, apenas obtenho um arquivo de ~ 59 MB do cartão de memória SD de 4 GB. Basicamente, estou recebendo apenas a parte do cartão que o Windows "vê" quando você insere o cartão no leitor. Não é a imagem completa.
GrandAdmiral

Você poderia usar uma máquina Linux ou Linux LiveCD em vez de tentar no Windows?
Kruug

Máquinas virtuais Linux parecem não ver o cartão de memória SD (tentei VMware Player e VirtualBox) porque estou usando o leitor interno no laptop. E ainda por cima ... Eu também não tenho um gravador de CD no laptop. :) Eu tenho um Mac em casa que eu posso usar, eu estava apenas tentando encontrar algo que funcionasse com a minha situação atual .... e descobrir se era possível. Parecia que cygwin deveria ter funcionado.
GrandAdmiral

4
Descobri que também posso usar 'cat / proc / partitions' para obter o nome do cartão de memória SD anexado.
GrandAdmiral

Respostas:


27

Você recebe o Permission deniederro, porque você não é root. Isso soa estranho no contexto de Cygwin, mas chega em casa.

Quando você consulta seu status ( id) em um shell Cygwin normalmente iniciado, você obtém algo assim:

$ id
uid=1001(user) gid=545(Users) groups=545(Users),555(Remote Desktop Users),513(None)
$ dd if=/dev/sda bs=1000 count=1 | wc -c
dd: opening `/dev/sda': Permission denied
0

No Windows 7, o truque para se tornar rootno Cygwin é iniciar a sessão elevada , ou seja, clique com o botão direito do mouse no ícone do Cygwin e escolha Executar como administrador . Agora você ainda não é rootele mesmo, mas pelo menos no rootgrupo de:

$ id
uid=1001(user) gid=545(Users) groups=545(Users),0(root),544(Administrators),555(Remote Desktop Users),513(None)

E agora, ddfunciona como você está acostumado a partir de Un * x:

$ dd if=/dev/sda bs=1000 count=1 | wc -c
1+0 records in
1+0 records out
1000 bytes (1.0 kB) copied, 0.00104424 s, 958 kB/s
1000

Muito interessante, e isso funciona. Obrigado! Embora esse método e a USB Image Tool forneçam uma solução, aceitarei esta resposta porque está mais diretamente relacionada à minha pergunta inicial.
GrandAdmiral

Eu não sou um membro da raiz dessa maneira. Alguma coisa mudou?
Pysis

1
@Pysis: Ainda sou capaz de me tornar root dessa maneira com a versão atual do cygwin ( CYGWIN_NT-6.1-WOW 2.7.0 (0.306 / 5/3) 12-02-2017 13:13 i686 Cygwin ) a partir da atualização de hoje. Talvez stackoverflow.com/q/4090301 no SO possa ser útil para você ?!
Mpy

Parece que tenho 2.6.1 de cygwin1.dll ( cygcheck). Não recebo "0 (raiz)", mas recebo "114 (conta local e membro do grupo de administradores"), "544 (administradores)" e "405504 (alto nível obrigatório)" em vez de "401408 ( Nível obrigatório médio) "no meu sistema Windows 10 Pro x64 bits. O contexto é que eu queria executar fdisk, mas isso ainda parece não ajudar, embora eu possa ter conseguido executar outras ferramentas com acesso privilegiado muito bem, como ddem um arquivo de fluxo de dispositivo de bloco, apenas curioso aqui.
Pysis 26/03

@Pysis: Que isso tenha a ver com o W10 ?! - Infelizmente, só posso especular porque uso apenas o W7.
26417 mpy

11

Recentemente, tive que clonar uma unidade USB para outra no Windows. Minha unidade é uma inicialização múltipla com software adicional, então eu não queria apenas copiar todos os arquivos no FS. DD foi uma escolha clara, mas eu não estava no Linux, então havia algumas coisas que eu tinha que fazer para fazê-lo funcionar.

Eu tinha o cygwin instalado e fiz o seguinte.

primeiro eu tive que descobrir qual dispositivo / dev / sdX era meu volume f:. Para fazer isso, execute este comando no cygwin. (DICA: Certifique-se de iniciar o cygwin com privilégios de administrador. * Clique com o botão direito do mouse em cygwin e em "Executar como Administrador")

    cat /proc/partitions
which should output:
   8 0 3813383838 sda
   8 1       4031 sda3 C:\
   8 15  30588303 sdb 
   8 15  30588303 sdb1 E:\
   8 21  30530020 sdc
   8 22  30530020 sdc1 F:\

etc ... Aqui você pode ver claramente para eu clonar minha unidade F: na minha unidade E: eu emitia o seguinte comando.

Há mais uma etapa, na verdade, você precisa encontrar a raiz do seu dispositivo. Procure um sd * que tenha o tamanho do seu dispositivo. Isso deve ser fácil, pois o tamanho deve ser bem conhecido, como 8 GB, 16 GB, 32 GB expandidos como bytes, como mostrado acima.

dd if=/dev/sdc of=/dev/sdb bs=8M

Minha imagem tinha 32GB .. e eu não queria apenas sentar e esperar com um cursor piscando .. Eu queria ver o progresso, então instalei "pv" no cygwin.

dd if=/dev/sdc | pv | dd of=/dev/sdb bs=8M

Agora, se você deseja copiar o pendrive para uma imagem, faça o seguinte.

dd if=/dev/sdX | pv | dd of=/cygdrive/c/Users/Myname/Desktop/mythumbdrive.img bs=8M

Espero que isto ajude


2

Algo como o USB Image Tool fará?
Ou você insiste em usar o Cygwin? ...


Nenhuma insistência em usar Cygwin. Essa ferramenta foi um pouco estranha ao exibir o cartão de memória SD (às vezes as informações desapareciam, mas talvez o Windows estivesse fazendo alguma coisa), mas parecia funcionar e era MUITO RÁPIDO. Eu tenho um arquivo de 4 GB no meu computador com o tamanho que eu esperava. Acho que vou diferenciá-lo com uma versão do comando 'dd' real apenas para garantir. Se isso parecer bom, aceitarei sua resposta. Obrigado!
GrandAdmiral

Bem, os arquivos não coincidem, mas isso pode ser minha culpa. Acho que iniciei o RPi depois de pegar a primeira imagem, sem pensar nisso. Bem, pelo menos eu tenho o backup que queria agora e tenho uma ferramenta para experimentar no caminho que funciona no Windows. Na pior das hipóteses, voltarei para casa e usarei um computador / sistema sadio. :)
GrandAdmiral

2

Eu tive sucesso com o dd para Windows , que acredito ser uma reescrita e não uma porta. É de código aberto e não depende do Cygwin.

Gostei particularmente do dd --listcomando, que listava todos os dispositivos de disco, além de informações suficientes para identificar o que eu queria.


1

A HDD Raw Copy Tool pode fazer cópias de um cartão SD. Se você selecionar "Imagem bruta (imagem dd)" na caixa de diálogo Salvar, será idêntica à criada com o dd. Você pode restaurar imagens também.

Eu sei que isso não é feito via cygwin, mas eu pessoalmente não confiaria no acesso a dispositivos brutos.


Onde você tem a opção de salvar uma imagem não processada? Vi onde era possível selecionar a fonte (cartão de memória SD) e o destino (HDD), mas havia apenas um botão Iniciar. Como não estava claro o que aconteceria a seguir, saí do programa.
GrandAdmiral

Primeiro, clique duas vezes em sua unidade e, na tela seguinte, clique duas vezes na opção "Arquivo", onde você pode escolher onde salvar a imagem.
precisa saber é o seguinte

0

Vejo que o RaspberryPi.org agora está recomendando o Win32 Disk Imager para gravar imagens em cartões de memória SD. Ele também lerá imagens do cartão, então estou testando agora.


Recuso-me a tocá-lo, pois há relatos de que ele destruiu o disco do sistema. Raro, mas depende do hardware e não vou arriscar.
tjmoore
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.