在我们的生产服务器中突然/dev/null变成了一个常规文件,并且由于这个 sshd 服务被停止并且无法登录服务器。而且我们还尝试按照以下步骤配置回字符设备文件,
rm -rf /dev/null
mknod /dev/null c 1 3
Run Code Online (Sandbox Code Playgroud)
一旦我们运行,该rm命令/dev/null就会被重新创建为常规文件,然后mknod才能运行。我们无法弄清楚这是如何发生的以及哪个组件正在创建这个文件。所以在我们解决这个问题之前,我们无法创建/dev/null字符设备文件。
Oli*_*lac 29
当您删除 (rm) /dev/null 时,任何正在运行且需要 ">/dev/null" 或等效项的程序/脚本将重新创建一个具有该名称的新(常规)文件。那些可以随时产生(有些还可能不断地写信给它)
打败他们:
您创建一个新的 /dev/null 特殊文件(以不同的名称)
mknod /dev/newnull c 1 3
chmod 777 /dev/newnull
Run Code Online (Sandbox Code Playgroud)
然后将它移到(以 root 用户身份)连续创建的那些:
mv -f /dev/newnull /dev/null
Run Code Online (Sandbox Code Playgroud)
只有这样你才能重新启动(不要在没有适当的 /dev/null 文件的情况下重新启动......这通常不容易)[我忘记了这一步,这当然是必要的。感谢@Random832 的提醒!]
您最终需要重新启动,以摆脱现有的程序,这些程序仍然会打开“/ dev / null”并且即使您之后更换它仍然会写入文件系统,一点一点地填充该文件系统)(确实,就像删除文件时一样,任何仍然打开该文件描述符的程序仍然可以写入以前的 inode,即使文件名现在指向新的 inode)
小智 8
您可以运行lsof /dev/null并查看是否有一个进程打开了它,但它不会实时显示正在发生的事情。
另一种选择是制作设备并将其移动到位。
mknod /dev/null.tmp c 1 3 && mv /dev/null.tmp /dev/null
Run Code Online (Sandbox Code Playgroud)
但我想先知道是什么破坏了系统。您最近是否更改了可能导致此问题的任何内容?
您无法重新创建的原因/dev/null可能是某些内容正在像这样连续写入:
echo "foo" > /dev/null
Run Code Online (Sandbox Code Playgroud)
检查文件的内容将告诉您它可能是什么过程。
要暂时修复您的系统,请按照以下说明操作:
init=/bin/bash我强烈建议对系统进行深入检查,以确定 /dev/null 是如何被删除的。确保您的系统没有受到损害,彻底检查您的系统日志。
| 归档时间: |
|
| 查看次数: |
8234 次 |
| 最近记录: |