परिचय
लिनक्स सर्वर एडमिनिस्ट्रेशन में स्टोरेज सब-सिस्टम का कुशल प्रबंधन एक बेहद अहम जिम्मेदारी होती है। इस संदर्भ में blockdev यूटिलिटी लो-लेवल डिस्क पैरामीटर्स को नियंत्रित करने का एक शक्तिशाली जरिया प्रदान करती है। इस ट्यूटोरियल में हम सेक्टर साइज के विश्लेषण, ड्राइव को राइट-प्रोटेक्ट करने और रीड-अहेड बफर ट्यूनिंग जैसी व्यावहारिक तकनीकों को व्यावहारिक उदाहरणों के साथ समझेंगे।
वर्चुअल लूपबैक डिस्क तैयार करना और आरंभिक कॉन्फ़िगरेशन
उत्पादन वातावरण या भौतिक ड्राइव को बिना किसी जोखिम के सुरक्षित रूप से टेस्ट करने के लिए हम सबसे पहले fallocate -l 100M /tmp/test_disk.img रन करके 100MB साइज की एक डमी डिस्क इमेज फाइल जनरेट करते हैं।

कर्नल इस सामान्य फाइल को एक स्वतंत्र ब्लॉक स्टोरेज डिवाइस के रूप में ट्रीट करे, इसके लिए sudo losetup -fP /tmp/test_disk.img का इस्तेमाल कर इसे पहले खाली लूप डिवाइस के साथ माउंट किया जाता है।

कमांड पाइपलाइन या ऑटोमेशन स्क्रिप्ट्स में असाइन किए गए नोड पाथ को आसानी से रेफर करने के लिए LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) की मदद से लूप डिवाइस का नाम शेल वेरिएबल में स्टोर कर लेते हैं।

blockdev टूल वास्तव में ब्लॉक डिवाइस नोड्स पर ioctl सिस्कॉल्स को ट्रिगर करके डिवाइस सेटिंग्स को पढ़ने और बदलने का काम करता है।
जब आप sudo blockdev --report ${LOOP_DEV} निष्पादित करते हैं, तो टर्मिनल पर संपूर्ण डिवाइस आर्किटेक्चर जैसे रीड-ओनली स्टेट (RO), रीड-अहेड वैल्यू (RA), सेक्टर डाइमेंशन (SSZ), ब्लॉक साइज (BSZ) और कुल क्षमता (Size) का सारणीबद्ध विवरण प्राप्त होता है।
⚙️ [महत्वपूर्ण स्विच और ऑप्शन्स]
--report : डिस्क से जुड़े तमाम अहम पैरामीटर्स (RO, RA, SSZ, BSZ, StartSec, Size) को एक संपूर्ण टेबल के रूप में प्रदर्शित करता है।--getro : डिवाइस की राइट-प्रोटेक्शन स्थिति जांचता है (1 यानी केवल पढ़ने योग्य, 0 यानी रीड-राइट सक्षम)।--setro : डेटा ओवरराइटिंग रोकने के लिए वॉल्यूम को केवल रीड-ओनली मोड में लॉक करता है।--setrw : लॉक्ड ड्राइव को सामान्य पठन और लेखन (Read-Write) संचालन के लिए दोबारा खोलता है।--getra : वर्तमान में लागू प्री-फैच रीड-अहेड सेक्टर्स की गिनती दिखाता है।--setra [सेक्टर] : इनपुट/आउटपुट थ्रूपुट को ऑप्टिमाइज़ करने के लिए रीड-अहेड सेक्टर वैल्यू को समायोजित करता है।--getss : फाइल सिस्टम के लिए निर्धारित लॉजिकल सेक्टर साइज (Logical Sector Size) को बाइट्स में फेच करता है।--getbsz : कर्नेल द्वारा उपयोग किए जा रहे ब्लॉक साइज (Block Size) की जानकारी बाइट्स में देता है।--getsize64 : स्टोरेज मीडिया की वास्तविक सकल क्षमता बाइट्स में सटीक रूप से मापता है।--flushbufs : कैश्ड बफर डेटा को जबरन परसिस्टेंट डिस्क पर राइट कर बफर्स को खाली करता है।

स्टोरेज क्षमता और सेक्टर आर्किटेक्चर का विस्तृत विश्लेषण
प्रयोग जारी रखने से पहले पर्यावरण चर को सत्यापित करने के लिए LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) को पुनः सेट किया जाता है।

डिस्क की पूरी स्टोरेज क्षमता को बाइट स्तर पर मापने के लिए sudo blockdev --getsize64 ${LOOP_DEV} चलाएं।
आउटपुट में दिखने वाला 104857600 बाइट्स का आंकड़ा यह प्रमाणित करता है कि वर्चुअल वॉल्यूम हमारी निर्धारित 100MB सीमा के बिल्कुल बराबर है।

ऑपरेटिंग सिस्टम डेटा प्रोसेसिंग के लिए जिस न्यूनतम एड्रेसिंग यूनिट का उपयोग करता है, उसे जांचने के लिए sudo blockdev --getss ${LOOP_DEV} रन किया जाता है।
परिणाम स्वरूप मिलने वाला 512 यह स्पष्ट करता है कि लॉजिकल सेक्टर का आकार मानक 512 बाइट्स पर सेट है।

अंतर्निहित हार्डवेयर मीडिया के वास्तविक ब्लॉक आकार का पता लगाने के लिए sudo blockdev --getpbsz ${LOOP_DEV} निष्पादित करें।
यहां भी 512 का आउटपुट दर्शाता है कि फिजिकल और लॉजिकल दोनों सेक्टर्स आपस में पूरी तरह सिंक हैं, जिससे सेक्टर मिसएलाइनमेंट की वजह से होने वाला प्रदर्शन ह्रास बिल्कुल नहीं होगा।

राइट-प्रोटेक्शन: रीड-ओनली मोड को सक्षम और निष्क्रिय करना
कमांड्स निष्पादन में स्थिरता बनाए रखने के लिए LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) से डिवाइस वेरिएबल सुनिश्चित कर लें।

अनपेक्षित विलोपन, डेटा करप्शन या अनधिकृत संशोधन से स्टोरेज को सुरक्षित रखने के लिए sudo blockdev --setro ${LOOP_DEV} चलाकर वॉल्यूम को राइट-प्रोटेक्टेड (Read-Only) मोड में तब्दील किया जाता है।

लागू की गई सुरक्षा नीति को सत्यापित करने हेतु sudo blockdev --getro ${LOOP_DEV} निष्पादित करें।
टर्मिनल पर 1 का आना इस बात का प्रमाण है कि डिवाइस अब सफलतापूर्वक केवल पढ़ने योग्य स्थिति में लॉक हो चुका है।

जब ड्राइव पर दोबारा फाइलें लिखने या संशोधित करने की आवश्यकता हो, तो sudo blockdev --setrw ${LOOP_DEV} के माध्यम से राइट अनुमतियों को पुनर्स्थापित किया जाता है।

परिवर्तन लागू होने की दोबारा पुष्टि करने के लिए sudo blockdev --getro ${LOOP_DEV} चलाएं।
प्राप्त मान 0 यह सुनिश्चित करता है कि राइट-लॉक हटा दिया गया है और सिस्टम अब सामान्य डेटा राइट ऑपरेशन्स कर सकता है।

I/O परफॉरमेंस ट्यूनिंग: रीड-अहेड बफर ऑप्टिमाइज़ेशन और क्लीनअप
लूपबैक नोड पाथ को सक्रिय रखने के लिए फिर से LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) निष्पादित करें।

वर्तमान प्री-लोडिंग कॉन्फ़िगरेशन का विश्लेषण करने के लिए sudo blockdev --getra ${LOOP_DEV} कमांड का उपयोग किया जाता है।
दिखाई देने वाला 256 यह दर्शाता है कि सीक्वेंशियल डेटा एक्सेस के दौरान कर्नेल एक बार में 256 सेक्टर्स (यानी लगभग 128KB) को रैम कैशे में प्री-फैच कर लेता है।

बड़ी फाइलों के सीक्वेंशियल रीड ऑपरेशन्स में डिस्क थ्रूपुट बढ़ाने के लिए sudo blockdev --setra 1024 ${LOOP_DEV} चलाकर इस बफर साइज को बढ़ाकर 1024 सेक्टर्स (लगभग 512KB) कर दिया जाता है।

किए गए बदलावों की पुष्टि के लिए sudo blockdev --getra ${LOOP_DEV} पुनः चलाएं।
आउटपुट में 1024 का मान यह सिद्ध करता है कि कर्नेल स्तर पर ट्यूनिंग सफलतापूर्वक लागू हो चुकी है।

अभ्यास समाप्त होने पर सिस्टम संसाधनों को रीसेट करने के लिए sudo losetup -d ${LOOP_DEV} && rm -f /tmp/test_disk.img कमांड रन करें, जो लूपबैक मैपिंग को समाप्त कर डमी इमेज को डिस्क से सुरक्षित रूप से हटा देती है।

इस ट्यूटोरियल में हमने देखा कि कैसे blockdev कमांड का उपयोग लिनक्स में स्टोरेज की आंतरिक स्थिति को समझने और उसके परफॉरमेंस पैरामीटर्स को फाइन-ट्यून करने के लिए किया जाता है।
क्योंकि स्टोरेज पैरामीटर्स में बदलाव सीधे कर्नल और फाइल सिस्टम के व्यवहार को प्रभावित करते हैं, इसलिए इन्हें प्रोडक्शन सर्वर पर लागू करने से पहले स्टेजिंग वातावरण में अच्छी तरह टेस्ट करना हमेशा सुरक्षित रहता है।