it-swarm-id.com

Bagaimana saya bisa membuat direktori "blackhole" / dev / null-like?

Saya ingin membuat "/dev/null "direktori (atau direktori" lubang hitam ") sehingga file yang ditulis tidak benar-benar ditulis, tetapi hilang begitu saja.

Saya memiliki aplikasi yang menulis file sementara besar ke direktori. Saya tidak memiliki kendali atas nama file dan saya tidak begitu peduli dengan isi file-file ini. Saya bisa menulis skrip yang secara berkala meng-clobbers file-file ini, tetapi file-file tersebut ditulis dengan sangat cepat dan mengisi disk saya. Saya mencari sesuatu yang lebih pintar. Saya ingin aplikasi untuk "berpikir" bahwa itu sedang menulis file-file ini, padahal sebenarnya, penulisan hanya dibuang di ujung yang lain.

Juga lihat ini utas terkait lama.

84
dogbane

Ini tidak didukung di luar kotak pada setiap unix yang saya tahu, tetapi Anda dapat melakukan hampir semua hal dengan Fuse . Setidaknya ada satu implementasi nullfs¹ , sistem file tempat setiap file ada dan berperilaku seperti /dev/null (ini bukan satu-satunya implementasi yang pernah saya lihat).

¹ Jangan bingung dengan * BSD nullfs , yang analog dengan bindfs .

Pendekatan lain adalah pembungkus LD_PRELOAD; pada dasarnya sebuah pustaka bersama kecil yang dimuat sebelum libc.so, dan memotong panggilan untuk "membuka" dengan sesuatu yang memeriksa jalur file prospektif dan mengganti "/ dev/null" jika itu akan berada di direktori target.

Ini memiliki keuntungan karena (a) sepenuhnya berada di ruang pengguna - tidak diperlukan peretasan kernel; dan (b) hanya mempengaruhi aplikasi satu kesalahan.

Contoh sederhana ada di http://www.noah.org/wiki/LD_PRELOAD_notes , tetapi dalam kasus Anda, Anda ingin mencegat panggilan sistem "terbuka" & "creat".

8
Martin Kealey

Jika program ini sangat bodoh untuk tidak membiarkan Anda mematikan log-log itu, mungkin juga tidak memeriksa kesalahan setelah membuka file log? Saya akan mencoba memasang beberapa sistem file read-only dummy (mis. Menggunakan mount -o loop.)

1
alex

Anda mengatakan bahwa menghapus file secara berkala dengan skrip tidak cukup cepat. Bisakah Anda hidup dengan pemicu yang menghapus file sementara kapan saja aplikasi Anda selesai menulis dan menutupnya? Jika demikian, Anda dapat menggunakan API "tidak sah".

(Lihat http://en.wikipedia.org/wiki/Inotify dan https://github.com/rvoicilas/inotify-tools/wiki/ )

1
Elliot Nelson

saya telah membuat modul kernel berdasarkan contoh ramfs di kernel linux, ini pada dasarnya adalah sistem file blackhole yang disebut nullfsvfs. Implementasi sistem Fuse perlu menyalin data dari pengguna ke ruang kernel dan cukup lambat, dibandingkan dengan implementasi langsung sebagai modul kernel. Lihat:

https://github.com/abbbi/nullfsvfs

1
michael