Diferenças entre dd no Mac OS X e Linux

3

Ao usar o Linux (Debian), geralmente uso o dd para copiar uma imagem de disco para um cartão SD. Eu escrevi um script que gera um erro se o arquivo de dispositivo especificado na opção "de" for muito grande. Isso me impede de acidentalmente explodir um dos meus discos rígidos.

SD_SIZE=$(sudo sfdisk -s ${SD_DEV}) 
if [ $SD_SIZE -gt 33554432 ]; then
  echo "might not be and SD card, exiting"
  exit 1
fi

No entanto, se eu inserir o cartão SD e esquecer de desmontá-lo, os resultados serão incompletos. Às vezes, a cópia é bem-sucedida e às vezes falha.

Eu posso alterar meu script com a resposta aqui: Como verificar se um sistema de arquivos está montado com um script

No entanto, existe uma opção no dd com essa funcionalidade? (no OS X dd não irá gravar em um disco montado por padrão)

Também de interesse, por que o erro dd (no OS X) ao tentar copiar para um disco montado? Talvez algumas diferenças no kernel ou dd? Aqui está o erro que você recebe se você tentar dd para uma unidade que é montada no OS X (10.9):

dd: /dev/diskN: Resource busy, make sure the disk is not in use

Eu posso escrever no disco usando o cp, então talvez as chamadas do sistema que o dd está fazendo não sejam tão simples quanto o OPEN e depois o WRITE.

    
por Stephano 01.10.2014 / 18:23

1 resposta

1

Sometimes the copy succeeds and sometimes it fails.

Provavelmente falha porque algum processo no tempo escreveu no sistema de arquivos montado, adivinhe por que é uma boa prática para umount antes: -)

dd deve ser apenas open e write , eu acho que a versão MacOSX adiciona algum controle e eu acho que é fácil entender por que com seus nomes de dispositivos, em comparação com o Linux eu verifiquei antes de dd 'ing.

    
por 02.10.2014 / 20:07