dd: writing '/ dev / null': não há espaço no dispositivo

9

Estou lendo um arquivo de 550MB em / dev / null e estou recebendo

dd: writing '/dev/null': No space left on device

Eu estava surpreso. Eu pensei que / dev / null é um buraco negro onde você pode enviar o quanto quiser (porque é um fs virtual).

Sim, meu disco está quase cheio quando recebo esse erro. O que posso fazer além de excluir o conteúdo do disco?

 ls -l /dev/null
 -rw-r--r--    1 root     root             0 July 7 21:58 /dev/null

Ao invés de

 crw-rw-rw-    1 root     root        1,   3 July 7 02:58 /dev/null

Comando que estou usando:

time sh -c "dd if=$filename of=/dev/null"
Ankur Agarwal
fonte
3
você pode fornecer a saída dels -l /dev/null
Patrick
@Patrick adicionou ls -l
Ankur Agarwal
11
Você também pode copiar / colar o comando dd que está executando?
forcefsck
2
Isso é realmente estranho. Escrever para /dev/nullnunca deve disparar esse erro, pois na verdade ele não grava nada em lugar algum. Você obtém o mesmo efeito sem time? Poste a saída de strace dd if=$filename of=/dev/null(faça-o com um arquivo que não contém informações confidenciais ) ou strace dd if=$filename of=/dev/nullse timefor necessário para acionar o erro.
Gilles 'SO- stop be evil'
11
O problema do @Gilles era que meu / dev / null não era um arquivo especial de caracteres. Eu atualizei minha pergunta acima.
Ankur Agarwal

Respostas:

17

/dev/nullé um arquivo especial, do tipo dispositivo de caractere. O driver para esse dispositivo de caracteres ignora o que você tenta gravar no dispositivo e as gravações sempre são bem-sucedidas. Se uma gravação /dev/nullfalhar, significa que você conseguiu remover o apropriado /dev/nulle substituí-lo por um arquivo comum. Você pode ter removido acidentalmente /dev/null; o próximo … >/dev/nullteria recriado como um arquivo regular.

Corra ls -l /dev/nulle verifique se a linha se parece com

crw-rw-rw- 1 root root 1, 3 Sep 13  2011 /dev/null

Ele deve começar com crw-rw-rw-: cpara um dispositivo de caractere e permissões que permitam a todos ler e escrever. O arquivo deve pertencer à raiz, embora não seja muito importante. Os dois números após o proprietário e o grupo identificam o dispositivo (número principal e secundário ). Acima, mostro os valores no Linux; variantes diferentes do unix têm valores diferentes. A data normalmente é a data em que o sistema foi instalado ou a data da última reinicialização e não importa.

Se você precisar recriar o arquivo, alguns sistemas fornecerão MAKEDEVcomandos, no PATH do root ou no /dev. Execute cd /dev; ./MAKEDEV stdou algo assim para recriar os dispositivos básicos padrão, como /dev/null. Ou crie o dispositivo manualmente, fornecendo os números corretos do dispositivo; no Linux, isso é

mknod -m 666 /dev/null c 1 3
Gilles 'SO- parar de ser mau'
fonte
11
Uau! você é um salva-vidas. Obrigado, isso realmente ajuda. Eu nunca apaguei null, mas ele não estava lá, criei um manualmente.
Fr0zenFyr
11
@ Fr0zenFyr Você provavelmente tem um script executado como root que remove /dev/nullem algumas circunstâncias, talvez algo comotmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO parada sendo mal'
Vou ter que verificar meus scripts, se isso for verdade, há uma chance de que null seja excluído novamente. Voltarei se não conseguir localizar (resolver) esta situação. Obrigado pela atenção. Felicidades!! :)
Fr0zenFyr