dd outputting: “função não implementada” ao tentar gravar em / dev / sg11

1

Estou tentando usar o seguinte comando:

dd if=/dev/urandom of=/dev/sg11 bs=16K count=1

Mas ao executá-lo, recebo o seguinte erro:

dd: writing '/dev/sg11': Function not implemented

Quando tento com dd if=/dev/urandom of=/dev/sg11 bs=16K count=1 conv=fsync , obtenho um erro cannot allocate memory , que se torna um erro Function not implemented quando eu tamanho bs.

O que causa esse problema e como posso corrigi-lo?

ATUALIZAÇÃO: Às vezes, ele me dirá cannot allocate memory e depois me dirá novamente function not implemented para o mesmo valor de bs.

    
por ardent 22.07.2013 / 20:44

1 resposta

9

/dev/sgxx é um dispositivo genérico SCSI, que permite enviar e receber comandos SCSI brutos. Quando você escreve no dispositivo, espera-se que você inicie a gravação com um cabeçalho SCSI, que define a operação que você deseja fazer.

Escrever dados aleatórios em um dispositivo sg é realmente uma má ideia. Você estará enviando comandos SCSI aleatórios, que podem nem mesmo existir (portanto, function not implemented ) e, além disso, fornecendo um comprimento de bytes aleatório para a operação, o que provavelmente resultará em cannot allocate memory . (Se você é realmente azarado, o comando aleatório pode fazer alguma coisa.)

Dependendo do dispositivo que você realmente conectou a /dev/sg11 , talvez seja interessante investigar o pacote sg3_utils ou algum driver de dispositivo SCSI mais específico, como st (unidades de fita).

Um dos utilitários utilitários que vem com o sg utils é sg_map , o que permite que você saiba qual dispositivo primário corresponde a um dispositivo sg. Em sistemas Linux não antigos, você também pode instalar o lsscsi , que fornece uma boa lista de dispositivos SCSI, novamente com o dispositivo / dev / sg e o dispositivo principal.

sg3_utils também inclui sg_dd , que é uma versão do dd que entende o protocolo SCSI de baixo nível. (Mas só use se souber o que está fazendo!)

    
por 22.07.2013 / 21:44

Tags