На нашем производственном сервере внезапно /dev/null
появился обычный файл, и из-за этого служба sshd остановилась и не смогла войти на сервер. А также мы попытались выполнить следующие шаги, чтобы настроить обратно в символьный файл устройства,
rm -rf /dev/null
mknod /dev/null c 1 3
Как только мы запустим, rm
команда /dev/null
будет заново создана как обычный файл, прежде чем mknod
сможет ее запустить. Мы не можем понять, как это происходит и какой компонент создает этот файл. Поэтому, пока мы не решим эту проблему, мы не сможем создать /dev/null
как файл символьного устройства.
/lib/udev/rules.d/50-udev-default.rules
для создания/dev/null
lsof /dev/null
твой друг.Ответы:
Когда вы удаляете (rm) / dev / null, любые программы / скрипты, которые работают и которым требуется "> / dev / null" или эквивалент, воссоздают новый (обычный) файл с этим именем. И те могут появиться в любое время (и некоторые могут также постоянно писать в него)
Чтобы победить их:
вы создаете новый / dev / null специальный файл (под другим именем)
и вы перемещаете его (как корень) в непрерывно созданные:
И только тогда вы можете перезагрузиться (не перезагружаться без надлежащего файла / dev / null ... это обычно непросто) [Я забыл этот шаг, который, конечно, необходим. Спасибо @ Random832 за напоминание!]
В конце вам необходимо перезагрузиться, чтобы избавиться от существующей программы, у которой по-прежнему будет открыт файл «/ dev / null», и он все равно будет писать в файловую систему, даже если вы впоследствии заменили ее, постепенно заполняя эту файловую систему) Как и при удалении файла, любая программа, у которой все еще открыт этот дескриптор файла, все равно сможет писать в прежний индекс, даже если имя файла теперь указывает на новый)
источник
Вы можете запустить
lsof /dev/null
и посмотреть, есть ли процесс, у которого он открыт, но он не покажет вам, что происходит в режиме реального времени.Другим вариантом будет сделать устройство и переместить его на место.
Но я бы хотел знать, что ломает систему в первую очередь. Вы изменили что-нибудь в последнее время, что может быть причиной этого?
источник
Причина, по которой вы не можете воссоздать,
/dev/null
- это то, что что-то непрерывно записывается в него так:Изучение содержимого файла скажет вам, каким процессом это может быть.
Чтобы исправить вашу систему сейчас, следуйте этим инструкциям:
init=/bin/bash
Я настоятельно рекомендую провести тщательное исследование системы, чтобы определить, как / dev / null был удален. Убедитесь, что ваша система не скомпрометирована, тщательно проверьте журнал вашей системы.
источник
Я нашел причину и исправление в моей системе archlinux.
Если вы используете bash и HISTFILE = / dev / null в среде, вы не должны выполнять больше команд, чем $ HISTFILESIZE или $ HISTSIZE. Если вы выполнили больше команд, чем $ HISTFILESIZE для bash, когда HISTFILE равен / dev / null, и вы вышли из bash, bash перемещает / dev / null куда-то еще и воссоздает / dev / null как обычный файл с разрешением 600.
Если вы используете tramp в emacs 24.4, tramp-sh.el устанавливает HISTFILE в значение / dev / null. Таким образом, если bash - это оболочка для root, и если вы выполняете много корневых операций с tramp на emacs 24.4, когда вы убиваете emacs, tramp делает bash delete / dev / null.
Пожалуйста, проверьте, установлен ли HISTFILE на / dev / null в .bashrc или в таких программах, как emacs 24.4.
В моем случае изменение оболочки на zsh работает вокруг того факта, что tramp заставляет bash удалить / dev / null в emacs 24.4.
источник
unset HISTFILE
отключить историю, ничего не делая для / dev / null.