dd: escritura '/ dev / null': no ​​queda espacio en el dispositivo

9

Estoy leyendo un archivo de 550 MB en / dev / null y obtengo

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

Me sorprendió. Pensé que / dev / null es un agujero negro donde puedes enviar todo lo que quieras (porque es un fs virtual).

Sí, mi disco está casi lleno cuando recibo este error. ¿Qué puedo hacer además de eliminar contenido del disco?

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

En vez de

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

Comando que estoy usando:

time sh -c "dd if=$filename of=/dev/null"
Ankur Agarwal
fuente
3
se puede proporcionar la salida dels -l /dev/null
Patrick
@Patrick agregó ls -l
Ankur Agarwal
1
¿Podría también copiar / pegar el comando dd que está ejecutando?
forcefsck
2
Esto es realmente extraño. Escribir en /dev/nullnunca debe activar este error, ya que en realidad no escribe nada en ningún lado. ¿Obtiene el mismo efecto sin time? Publique el resultado de strace dd if=$filename of=/dev/null(hágalo con un archivo que no contenga información confidencial ), o de strace dd if=$filename of=/dev/nullsi timees necesario para activar el error.
Gilles 'SO- deja de ser malvado'
1
@Gilles El problema era que mi / dev / null no era un archivo especial de caracteres. Actualicé mi pregunta anterior.
Ankur Agarwal

Respuestas:

17

/dev/nulles un archivo especial, de tipo dispositivo de caracteres. El controlador para ese dispositivo de caracteres ignora todo lo que intente escribir en el dispositivo y las escrituras siempre tienen éxito. Si /dev/nullfalla una escritura en , significa que de alguna manera ha logrado eliminar el correcto /dev/nully reemplazarlo por un archivo normal. Es posible que haya eliminado accidentalmente /dev/null; entonces el siguiente … >/dev/nulllo habría recreado como un archivo normal.

Corre ls -l /dev/nully comprueba que la línea se parece a algo

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

Debe comenzar con crw-rw-rw-: cpara un dispositivo de caracteres y permisos que permitan a todos leer y escribir. El archivo debe ser propiedad de root, aunque no es muy importante. Los dos números después del propietario y el grupo identifican el dispositivo ( número de dispositivo principal y secundario ). Arriba muestro los valores bajo Linux; Las diferentes variantes de Unix tienen valores diferentes. La fecha suele ser la fecha en que se instaló el sistema o la fecha del último reinicio y no importa.

Si necesita volver a crear el archivo, algunos sistemas proporcionan MAKEDEVcomandos, ya sea en la RUTA de la raíz o en /dev. Ejecutar cd /dev; ./MAKEDEV stdo algo así para recrear los dispositivos básicos estándar como /dev/null. O cree el dispositivo manualmente, proporcionando los números de dispositivo correctos; en Linux, eso es

mknod -m 666 /dev/null c 1 3
Gilles 'SO- deja de ser malvado'
fuente
1
¡Guauu! Eres un salvavidas. Gracias, esto realmente ayuda. Nunca eliminé null pero no estaba allí, creé uno manualmente.
Fr0zenFyr
1
@ Fr0zenFyr Probablemente tengas un script ejecutándose como root que elimina /dev/nullen algunas circunstancias, tal vez algo comotmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO- deja de ser malvado'
Tendré que revisar mis scripts entonces, si esto es cierto, existe la posibilidad de que se elimine nulo nuevamente. Volveré si no puedo localizar (resolver) esta situación. Gracias por el aviso. ¡¡Salud!! :)
Fr0zenFyr