Di server produksi kami tiba-tiba /dev/null
menjadi file biasa dan karena layanan sshd ini dihentikan dan tidak dapat masuk ke server. Dan kami juga mencoba langkah-langkah di bawah ini untuk mengonfigurasi kembali ke file perangkat karakter,
rm -rf /dev/null
mknod /dev/null c 1 3
Segera setelah kami menjalankan rm
perintah /dev/null
sedang dibuat kembali sebagai file biasa sebelum mknod
dapat dijalankan. Kami tidak dapat mengetahui bagaimana ini terjadi dan komponen mana yang membuat file ini. Jadi sampai kami menyelesaikan masalah ini, kami tidak dapat membuat /dev/null
sebagai file perangkat karakter.
/lib/udev/rules.d/50-udev-default.rules
untuk membuat/dev/null
lsof /dev/null
adalah temanmuJawaban:
Ketika Anda menghapus (rm) / dev / null, semua program / skrip yang sedang berjalan dan yang perlu "> / dev / null" atau yang setara akan membuat ulang file baru (reguler) dengan nama itu. Dan mereka dapat muncul kapan saja (dan beberapa juga terus menulis untuk itu)
Untuk mengalahkan mereka:
Anda membuat file khusus / dev / null baru (dengan nama yang berbeda)
dan Anda memindahkannya (sebagai root) yang dibuat terus-menerus:
Dan hanya dengan begitu Anda dapat reboot (jangan reboot tanpa file / dev / null yang tepat ... biasanya tidak mudah) [Saya lupa langkah itu, yang tentu saja diperlukan. Terima kasih @ Random832 untuk pengingatnya!]
Anda perlu me-reboot pada akhirnya, untuk menyingkirkan program yang sudah ada yang masih memiliki "/ dev / null" yang terbuka dan masih akan menulis ke sistem file walaupun Anda menggantinya setelah itu, mengisi sistem file itu sedikit demi sedikit) (Memang , seperti saat menghapus file, program apa pun yang masih membuka deskriptor file tersebut masih dapat menulis ke inode sebelumnya, meskipun nama file sekarang menunjuk ke yang baru)
sumber
Anda dapat menjalankan
lsof /dev/null
dan melihat apakah ada proses yang membuatnya terbuka tetapi tidak akan menunjukkan kepada Anda apa yang terjadi secara real time.Pilihan lain adalah membuat perangkat dan memindahkannya di tempat.
Tapi saya ingin tahu apa yang merusak sistem terlebih dahulu. Sudahkah Anda mengubah sesuatu yang menyebabkan hal ini baru-baru ini?
sumber
Alasan mengapa Anda tidak dapat membuat ulang
/dev/null
kemungkinan ada sesuatu yang terus-menerus menulis seperti ini:Memeriksa konten file akan memberi tahu Anda apa prosesnya.
Untuk memperbaiki sistem Anda untuk saat ini, ikuti instruksi ini:
init=/bin/bash
Saya sangat menyarankan untuk melakukan pemeriksaan intensif sistem untuk menentukan bagaimana / dev / null dihapus. Pastikan sistem Anda tidak terganggu, periksa log sistem Anda secara menyeluruh.
sumber
Saya menemukan penyebab dan perbaikan pada sistem archlinux saya.
Jika Anda menggunakan bash dan HISTFILE = / dev / null di lingkungan, Anda tidak boleh menjalankan lebih banyak perintah daripada $ HISTFILESIZE atau $ HISTSIZE. Jika Anda mengeksekusi lebih banyak perintah dari $ HISTFILESIZE di bash sementara HISTFILE adalah / dev / null dan Anda keluar dari bash, bash memindahkan / dev / null di tempat lain dan membuat ulang / dev / null sebagai file biasa dengan izin 600.
Jika Anda menggunakan tramp pada emacs 24.4, tramp-sh.el menetapkan HISTFILE ke / dev / null. Jadi, jika bash adalah shell untuk root dan jika Anda melakukan banyak operasi root dengan tramp pada emacs 24.4, saat Anda membunuh emacs, tramp membuat bash delete / dev / null.
Silakan periksa apakah HISTFILE diatur ke / dev / null di .bashrc atau dalam program seperti emacs 24.4.
Dalam kasus saya, mengubah shell ke zsh bekerja di sekitar fakta bahwa gelandangan membuat bash delete / dev / null pada emacs 24.4.
sumber
unset HISTFILE
menonaktifkan riwayat, tanpa melakukan apa pun ke / dev / null.