En nuestro servidor de producción, de repente se /dev/null
convirtió en un archivo normal y debido a este servicio sshd se detuvo y no pudo iniciar sesión en el servidor. Y también intentamos los pasos a continuación para volver a configurar el archivo del dispositivo de caracteres,
rm -rf /dev/null
mknod /dev/null c 1 3
Tan pronto como ejecutamos, el rm
comando /dev/null
se vuelve a crear como un archivo normal antes de que mknod
pueda ejecutarse. No podemos entender cómo sucede esto y qué componente está creando este archivo. Entonces, hasta que resolvamos este problema, no podremos crear /dev/null
como archivo de dispositivo de caracteres.
/lib/udev/rules.d/50-udev-default.rules
para crear/dev/null
lsof /dev/null
es tu amigo.Respuestas:
Cuando elimine (rm) / dev / null, cualquier programa / script que se esté ejecutando y que necesite "> / dev / null" o equivalente volverá a crear un nuevo archivo (regular) con ese nombre. Y esos pueden aparecer en cualquier momento (y algunos también pueden escribirle continuamente)
Para vencerlos:
crea un nuevo archivo especial / dev / null (con un nombre diferente)
y lo mueves (como root) a los creados continuamente:
Y solo entonces puede reiniciar (no reinicie sin un archivo / dev / null adecuado ... generalmente no es fácil) [Olvidé ese paso, que por supuesto es necesario. ¡Gracias @ Random832 por el recordatorio!]
Debe reiniciar al final, para deshacerse del programa existente que todavía tendrá un "/ dev / null" abierto y aún escribirá en el sistema de archivos a pesar de que lo reemplazó después, llenando ese sistema de archivos poco a poco) (De hecho , como al eliminar un archivo, cualquier programa que todavía tenga ese descriptor de archivo abierto podrá escribir en el inodo anterior, aunque el nombre del archivo ahora apunte al nuevo)
fuente
Puede ejecutar
lsof /dev/null
y ver si hay un proceso que lo tiene abierto, pero no le mostrará lo que está sucediendo en tiempo real.Otra opción sería hacer el dispositivo y moverlo en su lugar.
Pero me gustaría saber qué es lo que está rompiendo el sistema primero. ¿Has cambiado algo recientemente que pueda estar causando esto?
fuente
La razón por la que no puede recrear
/dev/null
es probable que algo le escriba de manera continua:Examinar el contenido del archivo le dirá qué proceso podría ser.
Para arreglar su sistema por ahora, siga estas instrucciones:
init=/bin/bash
Sugeriría encarecidamente hacer un examen intenso del sistema para determinar cómo / dev / null se eliminó. Asegúrese de que su sistema no esté comprometido, verifique el registro de su sistema a fondo.
fuente
Encontré la causa y la solución en mi sistema archlinux.
Si usa bash y HISTFILE = / dev / null está en el entorno, no debe ejecutar más comandos que $ HISTFILESIZE o $ HISTSIZE. Si ejecutó más comandos que $ HISTFILESIZE en bash mientras HISTFILE es / dev / null y salió de bash, bash se mueve / dev / null a otro lugar y recrea / dev / null como un archivo normal con permiso 600.
Si usa tramp en emacs 24.4, tramp-sh.el establece HISTFILE en / dev / null. Por lo tanto, si bash es el shell de root y si realiza muchas operaciones de root con tramp en emacs 24.4, cuando elimina emacs, tramp hace que bash elimine / dev / null.
Compruebe si HISTFILE está configurado en / dev / null en .bashrc o en programas como emacs 24.4.
En mi caso, cambiar el shell a zsh funciona alrededor del hecho de que vagabundo hace que bash delete / dev / null en emacs 24.4.
fuente
unset HISTFILE
desactivar el historial, sin hacer nada a / dev / null.