it-swarm-tr.com

/ Dev / null benzeri "karadelik" dizinini nasıl oluşturabilirim?

Bir "/dev/null "dizini (ya da bir" karadelik "dizini) öyle ki, üzerine yazılan dosyalar gerçekten yazılmaz, sadece kaybolur.

Bir dizine büyük geçici dosyalar yazan bir uygulama var. Dosyaların adı üzerinde hiçbir kontrole sahip değilim ve bu dosyaların içeriğiyle gerçekten ilgilenmiyorum. Bu dosyaları periyodik olarak clobbers bir komut dosyası yazabilirim, ancak dosyalar çok hızlı bir şekilde yazılır ve diskimi doldurur. Zekice bir şey arıyorum. Uygulamanın bu dosyaları yazdığını "düşünmesini" istiyorum, aslında, yazarlar sadece diğer uçta atılır.

Ayrıca bkz. this eski ilgili konu.

84
dogbane

Bu, bildiğim herhangi bir unix'te kullanıma hazır olarak desteklenmiyor, ancak Fuse ile hemen hemen her şeyi yapabilirsiniz. En azından bir nullfs uygulaması , her dosyanın bulunduğu ve /dev/null (bu şimdiye kadar gördüğüm tek uygulama değil).

¹ * bindfs ile benzer olan * BSD nullfs ile karıştırılmamalıdır.

Başka bir yaklaşım bir LD_PRELOAD sarıcı olacaktır; temel olarak libc.so'dan önce yüklenmiş küçük bir paylaşılan kütüphane ve "open" çağrısını, olası dosya yolunu kontrol eden ve hedef dizinde olması durumunda "/ dev/null" yerine koyan bir şeyle keser.

Bu, (a) tamamen kullanıcı alanında olma avantajına sahiptir - çekirdek korsanlığı gerekmez; ve (b) yalnızca tek bir hatalı uygulamayı etkilemek.

Basit bir örnek http://www.noah.org/wiki/LD_PRELOAD_notes adresindedir, ancak sizin durumunuzda "açık" ve "oluştur" sistem çağrılarına müdahale etmek isteyeceksiniz.

8
Martin Kealey

Program bu günlükleri kapatmanıza izin vermeyecek kadar aptalsa, bir günlük dosyasını açtıktan sonra hataları kontrol etmiyor olabilir mi? Bazı kukla salt okunur dosya sistemi (örneğin mount -o loop.)

1
alex

Bir komut dosyasıyla dosyaları düzenli olarak kaldırmanın yeterince hızlı olmadığını söylüyorsunuz. Uygulamanız yazmayı bitirip kapattığında geçici bir dosyayı silen bir tetikleyiciyle yaşayabilir misiniz? Öyleyse, "inotify" API'sını kullanabilirsiniz.

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

1
Elliot Nelson

linux çekirdeğinde ramfs örneğine dayalı bir çekirdek modülü oluşturduk, temelde nullfsvfs adlı bir karadelik dosya sistemidir. Fuse sistemi uygulamasının verileri kullanıcıdan çekirdek alanına kopyalaması gerekir ve çekirdek modülü olarak düz bir uygulamaya kıyasla oldukça yavaştır. Görmek:

https://github.com/abbbi/nullfsvfs

1
michael