डेटा पुनर्प्राप्त करने के लिए फ़ाइल का पिछला छोर पढ़ें


12

एक बहुत पुरानी .swp फ़ाइल मैंने संपादित की गई फ़ाइल को वापस कर दिया है, इसलिए अब यह काफी छोटा है। मैंने उस निर्देशिका में कुछ भी नहीं किया है, इसलिए फ़ाइल के अंत के तुरंत बाद बाइट्स में अभी भी मेरा डेटा होना चाहिए। किसी दिए गए मेमोरी पते से एन बाइट्स पढ़ने के लिए मैं किस फ़ंक्शन का उपयोग कर सकता हूं? ddऔर readफ़ाइल सीमाओं पर रोकें, जब तक कि मैं कहीं भी एक विकल्प नहीं चूकता।

वर्तमान फ़ाइल का आकार 3.2 KB है। मुझे ठीक से याद नहीं है कि फ़ाइल को छंटनी से पहले कितनी बड़ी थी, लेकिन शायद 10 केबी से अधिक नहीं। फ़ाइल की सीमाओं को अनदेखा करते हुए, मैं फ़ाइल की शुरुआत से 10 KB कैसे पढ़ सकता हूं? यह ठीक है अगर डेटा पूरी तरह से संरक्षित नहीं है, जब तक मुझे खरोंच से शुरू नहीं करना है।

जवाबों:


18

आमतौर पर जब संपादक फ़ाइलों को सहेजते हैं, तो वे 0 को हटाते हैं या काटते हैं, इस प्रकार आवंटित स्थान को मुक्त करते हैं, और फिर लिखते हैं, जो नई जगह आवंटित करता है। यह फ़ाइल सिस्टम में डेटा को पूरी तरह से अलग भौतिक स्थान पर रखता है। तो आपका विचार काम नहीं कर सकता है।

आप किसी फ़ाइल का भौतिक स्थान प्राप्त कर सकते हैं, filefragया hdparm --fibmapफिर ddउस भौतिक स्थान को सीधे पढ़ने के लिए उपयोग कर सकते हैं। मैंने इस प्रक्रिया को यहां एक अलग संदर्भ में वर्णित किया है: /unix//a/85880/30851


आपके मामले में यह अधिक संभावना है कि आपको पाठ्य डेटा खोजने के लिए सामान्य दृष्टिकोण की आवश्यकता है ... कुछ इस तरह:

strings -n 12 -t d /dev/partition | grep -F 'text snippet'

strings लगातार ASCII डेटा की तलाश करेंगे (कुछ अन्य एनकोडिंग का भी समर्थन करता है, UTF-8 के बारे में निश्चित नहीं। यदि यह कोड या अंग्रेजी है तो आपको इसकी आवश्यकता नहीं होगी) और यह उन ऑफसेट को भी प्रिंट करेगा जहां यह पाया गया था।

text snippetएक सटीक, अद्वितीय पाठ नमूना होना चाहिए जिसे आप उस फ़ाइल के हिस्से में याद रखते हैं जिसे आप [एक पंक्ति में] देख रहे हैं। (यदि आप इसे ठीक से नहीं जानते हैं, तो आप इसके बजाय नियमित अभिव्यक्ति के साथ मिल सकते हैं।)

-n 12न्यूनतम लंबाई है जो खोजेगी strings12आपकी लंबाई होनी चाहिए text snippet। यह पैरामीटर वैकल्पिक है, बशर्ते यह strings | grepथोड़ा तेज़ जाने में मदद करे ।

पूरे विभाजन को पढ़ने में लंबा समय लगेगा, लेकिन यदि सफल रहा, तो आपके पास एक ऑफसेट होगा जिसे आप ddसामान्य क्षेत्र को हथियाने के लिए फीड कर सकते हैं और फिर उस सामान को हटा सकते हैं जो संबंधित नहीं है।

मैंने उस निर्देशिका में कुछ भी नहीं किया है

यदि आपकी निर्देशिका माउंटपॉइंट होने के लिए नहीं होती है ... तो अधिकांश फाइल सिस्टम वास्तव में "प्रति निर्देशिका" स्थान को आरक्षित नहीं करता है ... पूरे फाइलसिस्टम में कोई भी और सभी लिखता है उस बिट को अधिलेखित कर सकता है जिसे आप खोज रहे हैं। डेटा रिकवरी स्थिति में, आप आमतौर पर पूरी चीज़ को केवल-पढ़ने के लिए मोड में स्विच करते हैं।


ध्यान दें कि प्रत्येक फ़ाइल कई ब्लॉकों में संग्रहीत होती है और वे आमतौर पर लगातार संग्रहीत नहीं होती हैं। तो stringsकेवल फ़ाइल के कुछ हिस्सों का पता लगाएं, जब तक आप बेहद भाग्यशाली न हों।
गाइल्स का SO- बुराई से रोकना '

3
इसके विपरीत, एक खंडित 10KB फ़ाइल खोजने के लिए आपको बेहद अशुभ होना पड़ेगा। यदि आप केवल एक हिस्सा पाते हैं, तो यह अधिक संभावना है कि इस मामले में अन्य भाग को ओवरराइट किया गया था। लेकिन जब तक आपके पास उस फाइलसिस्टम में बहुत अधिक लिखने की गतिविधि नहीं होती है, या यह एक एसएसडी होता है, तो तुरंत उसे छोड़ दें, यदि आपने संपादन करते समय उस फाइल को कई बार सहेजा है, तो आपको उस फाइल की कई प्रतियां मिल सकती हैं।
फ्रॉस्टचुट्ज़ ३१'१६

3
मैं अनुशंसा करता हूं strings -n16या कुछ उचित न्यूनतम लंबाई, इसे तेजी से आगे बढ़ाने के लिए।
पीटर कॉर्डेस

अच्छी बात है, इसे उत्तर में जोड़ दिया।
फ्रॉस्ट्सचुट्ज़

4
बहुत बहुत धन्यवाद। फ़ाइल के अंत में केवल कचरा था, लेकिन stringsमैं विभाजन में पूरी फ़ाइल कहीं और खोजने में सक्षम था। यह लगभग दो महीने का काम है जो मुझे करने की ज़रूरत नहीं है, और हमेशा किसी महत्वपूर्ण चीज़ के लिए संस्करण नियंत्रण का उपयोग करने के लिए एक उत्कृष्ट अनुस्मारक।
मैथ्यू बेडफोर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.