
F*ck file system - क्ली कमांड लाइन फ़ाइल खोज उपकरण जो OS कर्नेल को बायपास करता है और आपकी डिस्क को सीधे पढ़ता है
यह एक क्ली टूल है जो फ़ाइलों की खोज (grep की तरह) करता है, लेकिन यह OS कर्नेल का उपयोग फ़ाइलों को पढ़ने के लिए नहीं करता, बल्कि आपकी डिस्क को सीधे पढ़ता है। यह व्यावहारिक रूप से बेकार है, लेकिन बहुत ही शानदार।
यह लगभग ~1.5k लाइनों का C कोड है जो:
/dev/rdisk*) पढ़ते समय sudo की आवश्यकता होती है; इमेज फ़ाइल खोजने के लिए कोई ऊंचे अनुमति की आवश्यकता नहींsync कॉल की आवश्यकता होगी)लेकिन साथ ही
read() पथ को बायपास करता है, इसके बजाय सीधे ब्लॉक डिवाइस को pread करता हैवास्तव में काम करने वाली तेज़ फ़ाइल खोज के लिए मेरे प्रोजेक्ट fff देखें - यह sudo की आवश्यकता के बिना ripgrep से काफी बेहतर प्रदर्शन करता है।
लिनक्स पर अधिकांश फ़ाइल सिस्टम को लागू करना आसान है
यह समर्थन के लिए सबसे आसान फ़ाइल सिस्टम है: यह एक जर्नलिंग फ़ाइल सिस्टम है जो जगह पर लिखता है (कोई कॉपी-ऑन-राइट नहीं), इसलिए अधिकांश समय ffs के लिए यह सबसे अच्छा फ़ाइल सिस्टम है। कभी-कभी आप देख सकते हैं कि ffs फ़ाइलों के कुछ हालिया अपडेट नहीं देख सकता, ऐसा हो सकता है यदि कर्नेल हालिया अपडेट को कैश में रख रहा हो और डिस्क पर लिखने में देरी कर रहा हो। आप इसका उपयोग करके सिंक्रोनाइज़ेशन लागू कर सकते हैं
sync
B-ट्री फ़ाइल सिस्टम काफी जटिल है, अधिक कुशल फ़ाइल भंडारण है और एक अतिरिक्त सीमा के साथ आता है:
जब आपके फ़ाइल सिस्टम पर कोई फ़ाइल अपडेट होती है तो पूरे सुपरब्लॉक को भी अपडेट करने की आवश्यकता होती है, जिसका अर्थ है कि यदि ffs सुपरब्लॉक (उच्च स्तरीय b-ट्री) पढ़ता है और उसके बाद कर्नेल ट्री को अपडेट करता है - तो पूरा पढ़ना अमान्य हो जाता है।
इसे fsfreeze का उपयोग करके या एक अलग डिटैच वॉल्यूम बनाकर बायपास किया जा सकता है
APFS एक स्वामित्व फ़ाइल सिस्टम है जिसे Apple द्वारा कार्यान्वित किया गया है, जिसे रिवर्स-इंजीनियर किया गया है और यहाँ भी समर्थित है, लेकिन Apple ने अपनी सुरक्षा नीतियों में काफी वृद्धि की है।
आप SIP को अक्षम किए बिना अपनी मुख्य डिस्क पर ffs नहीं चला पाएंगे
SIP - सिस्टम इंटीग्रिटी प्रोटेक्शन एक विशेष सुरक्षा सुविधा है जो रूट उपयोगकर्ता के रूप में भी मुख्य डिस्क सुपरब्लॉक तक किसी भी पहुँच को प्रतिबंधित करती है। आप sudo के साथ भी इसे बायपास नहीं कर सकते; आपको इस सुविधा को अक्षम करना होगा (यदि आप yabai जैसे प्रोजेक्ट का उपयोग करते हैं तो आपने इसे पहले से अक्षम कर रखा हो सकता है)।
Apple फ़ाइल सिस्टम पर ffs का परीक्षण करने का एक तरीका है बिना अपनी मुख्य डिस्क को छुए - आप रॉ .dmg फ़ाइलों को बिना किसी उच्च अनुमति के खोज सकते हैं (हाँ, ऐप इंस्टॉलर केवल डिटैच वॉल्यूम होते हैं)। ffs के साथ आपको कुछ भी माउंट करने की आवश्यकता नहीं है, आप फ़ाइल सिस्टम प्रकार के साथ वॉल्यूम के रॉ बाइट्स का पथ दे सकते हैं:
ffs "<क्वेरी>" /path/to/volume.dmg apfs
क्योंकि ffs सीधे बाइट्स पढ़ता है, आप इसका उपयोग किसी भी डिटैच वॉल्यूम को खोजने के लिए कर सकते हैं बिना उन्हें फ़ाइल सिस्टम में माउंट किए। उदा. .iso या .dmg फ़ाइलों को पढ़ना।
यह सबसे मज़ेदार हिस्सा है - ffs के पास VFS / कर्नेल फ़ाइल सिस्टम कैश तक पहुँच नहीं है। यही कारण है कि यह छोटी (या पहले से कैश की गई) निर्देशिकाओं पर धीमा होगा, लेकिन एक बार कैश समाप्त हो जाने पर और आपके कर्नेल को वास्तविक डिस्क स्थिति पढ़ने जाना पड़ता है, तो यह धीरे-धीरे तेज़ हो जाएगा।
क्यों? वास्तव में यह साबित करने के लिए कि किसी बिंदु पर कर्नेल VFS एक ओवरहेड बन जाता है।
यह एक btrfs माउंटेड ड्राइव पर ffs की तुलना ripgrep से करने वाला खोज परिणाम है। ध्यान दें कि ripgrep कहीं अधिक उन्नत SIMD-आधारित मैचर और फ़ाइल वॉकर का उपयोग करता है, जबकि ffs केवल ~1.8k लाइनों का C कोड है।
[repos — 631k फ़ाइलें]
ffs |#### | 5.505s
rg |### | 4.813s
[dev — 1.50M फ़ाइलें]
ffs |############ | 18.413s
rg |################# | 25.673s
[home — 3.25M फ़ाइलें]
ffs |######################## | 36.205s
rg |##################################################| 74.690s
ripgrep के लिए उपयोग किए गए फ़्लैग हैं -F --no-heading -H -n --no-ignore --hidden --one-file-system --no-messages - जो इसे ffs के समान परिणाम उत्पन्न करने के लिए लाता है।
प्रोजेक्ट को संकलित करने के लिए आपको बस libzstd (btrfs के लिए), openmp आपके pkg-config में चाहिए, फिर बस
make ffs
ffs --help