Ubuntu में blkdiscard कमांड से SSD डेटा पूरी तरह रीसेट करें

परिचय

आधुनिक Linux सिस्टम में सॉलिड-स्टेट ड्राइव (SSD) या NVMe स्टोरेज को नए जैसा बनाने और उनके सभी ब्लॉक्स को एक झटके में खाली करने के लिए blkdiscard एक बेहद प्रभावी यूटिलिटी है। यह टूल TRIM निर्देश भेजकर स्टोरेज कंट्रोलर को सीधे ब्लॉक्स खाली करने का निर्देश देता है। किसी भी वास्तविक हार्डवेयर पर अनपेक्षित डेटा हानि से बचने के लिए, इस गाइड में हम एक सुरक्षित वर्चुअल लूपबैक डिस्क तैयार करके इस कमांड की कार्यप्रणाली, ऑप्शन्स और बिहेवियर को प्रैक्टिकल तरीके से समझेंगे।

1. स्टोरेज ड्राइव पर TRIM कम्पैटिबिलिटी और ब्लॉक लेआउट की जांच

किसी भी स्टोरेज डिस्क को रीसेट करने से पहले यह सुनिश्चित करना आवश्यक है कि वह ड्राइव TRIM या discard ऑपरेशन को सपोर्ट करती है या नहीं। इसके सत्यापन और मौजूदा पार्टीशन संरचना देखने के लिए टर्मिनल में lsblk --discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS कमांड चलाएं।
यदि टर्मिनल आउटपुट में DISC-GRAN और DISC-MAX कॉलम शून्य (0) के बजाय मान्य आकार (जैसे 512B या 2T) प्रदर्शित करते हैं, तो इसका सीधा अर्थ है कि लक्षित हार्डवेयर (nvme0n1) पर TRIM तकनीक पूरी तरह सक्रिय और समर्थित है।

डिस्क पर TRIM सपोर्ट और पैरामीटर्स की जांच

2. सुरक्षित अभ्यास हेतु वर्चुअल लूपबैक डिस्क का सेटअप

सीधे फिजिकल ड्राइव को जोखिम में डालने के बजाय, 64MB आकार की एक टेस्ट डिस्क इमेज फाइल तैयार करने और उसमें रैंडम डेटा भरने के लिए dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none कमांड निष्पादित करें।

रैंडम डेटा से 64MB डिस्क इमेज तैयार करना

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

इमेज फाइल को खाली लूपबैक डिवाइस से जोड़ना

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

संबद्ध लूपबैक डिवाइस पाथ को शेल वेरिएबल में स्टोर करना

वेरिएबल $LOOP_DEV में मैप किए गए वर्चुअल डिवाइस नोड की पुष्टि करने के लिए echo "생성된 디바이스: $LOOP_DEV" चलाएं।
कंसोल पर /dev/loop0 जैसा आउटपुट यह दर्शाएगा कि वर्चुअल ब्लॉक डिवाइस सफलतापूर्वक सक्रिय हो चुका है।

सक्रिय लूपबैक डिवाइस के नाम की पुष्टि

डेटा वाइप प्रक्रिया शुरू करने से पहले यह जांच लें कि वर्चुअल डिस्क में वाकई डेटा मौजूद है या नहीं। इसके शुरुआती 128 बाइट्स को हेक्साडेसिमल प्रारूप में देखने के लिए sudo hexdump -C -n 128 $LOOP_DEV रन करें।
आउटपुट में गैर-शून्य रैंडम वैल्यूज यह स्पष्ट करती हैं कि स्टोरेज ब्लॉक वर्तमान में भरे हुए हैं।

डिस्क के शुरुआती 128 बाइट्स का हेक्सडंप निरीक्षण

3. blkdiscard का बुनियादी उपयोग और पूरे स्टोरेज ब्लॉक को साफ करना

अभ्यास जारी रखने के लिए वर्चुअल ब्लॉक डिवाइस के पाथ को दोबारा वेरिएबल में असाइन करें: LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

वर्चुअल ब्लॉक डिवाइस पाथ को पुनः रीलोड करना

कनेक्टेड ब्लॉक डिवाइस के सभी सेक्टर्स को एक साथ डिस्कार्ड करने और ऑपरेशन की विस्तृत प्रगति देखने के लिए sudo blkdiscard -v $LOOP_DEV कमांड रन करें।
कमांड निष्पादन के बाद यह दिखाई देगा कि ऑफसेट 0 से लेकर पूरी डिस्क क्षमता यानी 67,108,864 बाइट्स (64MB) को सफलतापूर्वक वाइप कर दिया गया है।

पूरी स्टोरेज डिवाइस पर blkdiscard चलाना

डिस्क के ब्लॉक्स वास्तव में रीसेट हुए हैं या नहीं, यह परखने के लिए शुरुआती 128 बाइट्स का दोबारा निरीक्षण करें: sudo hexdump -C -n 128 $LOOP_DEV
यदि आउटपुट में कोई कंटेंट नहीं दिखता या सिर्फ शून्य प्राप्त होता है, तो इसका अर्थ है कि पुराना रैंडम डेटा पूरी तरह से साफ हो चुका है।

ब्लॉक वाइप के बाद डिस्क सामग्री की शून्य स्थिति जाँचना

4. ऑफसेट और लंबाई निर्धारित कर आंशिक वाइप (-o, -l) का अभ्यास

आंशिक डिस्क क्लीनिंग के परीक्षण के लिए लूपबैक डिवाइस वेरिएबल को फिर से सेट करें: LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

आंशिक रीसेट के लिए डिवाइस पाथ वेरिएबल सेट करना

विशिष्ट रेंज को डिस्कार्ड करने की प्रक्रिया सत्यापित करने के लिए वर्चुअल डिस्क के शुरुआती हिस्से में कुछ नया डेटा लिखें: echo "TESTDATA_RELOAD" | sudo dd of=$LOOP_DEV bs=1M count=10 status=none

शुरुआती ब्लॉक में नया टेस्ट डेटा राइट करना

पूरी डिस्क मिटाने के बजाय केवल शुरुआत (ऑफसेट 0) से लेकर 10MB तक के दायरे को ही डिस्कार्ड करने के लिए sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV कमांड चलाएं।
आउटपुट पुष्टि करेगा कि ऑफसेट 0 से ठीक 10,485,760 बाइट्स (10MB) का क्षेत्र सफलता से डिस्कार्ड हो गया है।

विशिष्ट रेंज और ऑफसेट पर आंशिक ब्लॉक्स खाली करना

लक्षित 10MB हिस्से का डेटा साफ हुआ है या नहीं, इसे जांचने के लिए शुरुआती 64 बाइट्स का हेक्सडंप देखें: sudo hexdump -C -n 64 $LOOP_DEV
यहाँ कोई भी डेटा न दिखाई देना यह साबित करता है कि निर्दिष्ट रेंज पूरी तरह रीसेट हो चुकी है।

आंशिक वाइप के बाद शुरुआती 64 बाइट्स का सत्यापन

5. परीक्षण वातावरण को हटाना और महत्वपूर्ण सावधानियां

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

क्लीनअप के लिए वर्तमान लूप डिवाइस पाथ प्राप्त करना

सिस्टम से टेस्ट लूपबैक डिवाइस को सुरक्षित रूप से डिटैच करने के लिए sudo losetup -d $LOOP_DEV कमांड निष्पादित करें।

लूपबैक ब्लॉक डिवाइस को अनमाउंट और डिस्कनेक्ट करना

अब टेस्टिंग के लिए बनाई गई अस्थायी डिस्क इमेज फाइल को हटाकर स्टोरेज स्पेस खाली करें: rm -f /tmp/test_disk.img

अस्थायी डिस्क इमेज फाइल को सिस्टम से हटाना

सिस्टम पर कोई अप्रयुक्त लूपबैक डिवाइस शेष तो नहीं है, यह जांचने के लिए losetup -a कमांड चलाएं।
कोई आउटपुट न मिलना यह दर्शाता है कि टेस्ट एनवायरनमेंट पूरी तरह साफ हो चुका है।

सक्रिय लूपबैक डिवाइसेस की सूची सत्यापित करना

इस गाइड में हमने देखा कि किस प्रकार Ubuntu पर blkdiscard का उपयोग करके SSD या NVMe डिस्क को तेजी से और पूरी तरह से इनिशियलाइज किया जा सकता है।
ध्यान रखें कि इस कमांड से हटाया गया डेटा वापस रिकवर नहीं किया जा सकता, इसलिए प्रोडक्शन एनवायरनमेंट में लक्षित डिवाइस का पाथ हमेशा दो बार जांच लें।