ওভাররাইট করা ফাইলগুলি পুনরুদ্ধার করা যাবে?


42

আমি মুছে ফেলা ফাইলগুলি পুনরুদ্ধার করার কথা বলছি না , তবে ফাইলগুলি ওভাররাইট করে। যথা: নিম্নলিখিত পদ্ধতি দ্বারা:

# move
mv new_file old_file

# copy
cp new_file old_file

# edit
vi existing_file
> D
> i new_content
> :x

লিনাক্স মেশিনে কোনও বিশেষ প্রোগ্রাম ইনস্টল না করে এই তিনটি ক্রিয়াকলাপ সম্পাদন করা হলে কি কিছু পাওয়া সম্ভব?


4
আপনি আপনার ব্যাকআপগুলি বাদে বোঝাতে চান?
জেসনওয়ারিয়ান

@ জেসনওয়ারিয়ান, হ্যাঁ, অবশ্যই
প্রশ্ন ওভারফ্লো

2
আমি কেবল mvএটিই উল্লেখ করতে চাই যে আপনার প্রথম উদাহরণ ( ) মুছে ফেলার অনুরূপ old_file, এটি ওভাররাইট করা নয়, সুতরাং মুছে ফেলা ফাইলগুলি পুনরুদ্ধারের জন্য পদ্ধতিগুলি (যদি কোনও উপস্থিত থাকে), ওভাররাইট ফাইলগুলির বিপরীতে, সেই ক্ষেত্রে প্রযোজ্য হবে। আপনার অন্য দুটি উদাহরণ যথাক্রমে একটি বিদ্যমান old_fileও ওভাররাইট existing_fileকরে।
সেলেদা

আপনার প্রদত্ত তিনটি উদাহরণই সমস্ত আসল ফাইলের ডেটা ব্লকগুলি মুছে ফেলা এবং সদ্য বরাদ্দকৃত ব্লকে লেখার মাধ্যমে প্রয়োগ করা হয় এবং সেই তথ্য পুনরুদ্ধারের পদ্ধতিটি মুছে ফেলা ফাইলটি পুনরুদ্ধারের সমান। একটি ব্যতিক্রম হতে পারে যদি মূল ফাইলগুলি অত্যধিক সংক্ষিপ্ত হয় (এক্সট 4 এ 60 বাইটের চেয়ে কম) যেখানে পরবর্তী দুটি উদাহরণ পূর্ববর্তী ডেটা অপরিবর্তনযোগ্য করে তোলে।
মার্ক প্লটনিক

1
@ মার্কপ্লটনিক, সেলাদের মন্তব্য অনুসারে, mvআলাদা।
প্রশ্ন ওভারফ্লো

উত্তর:


60

উত্তরটি "সম্ভবত হ্যাঁ, তবে এটি ফাইল সিস্টেমের ধরণ এবং সময় নির্ভর করে।"

এই তিনটি উদাহরণের মধ্যে কোনওই সুযোগ ছাড়াই পুরানো_ফায়াল বা বিদ্যমান_ফিলের দৈহিক ডেটা ব্লকগুলিকে ওভাররাইট করবে না।

  • mv new_file old_file। এটি পুরানো_ ফাইলটিকে লিঙ্কমুক্ত করবে। ওল্ড ফাইলে অতিরিক্ত হার্ড লিঙ্কগুলি থাকলে, অবশিষ্টগুলি লিঙ্কগুলিতে ব্লকগুলি অপরিবর্তিত থাকবে। অন্যথায়, ব্লকগুলি সাধারণত (এটি ফাইল সিস্টেমের ধরণের উপর নির্ভর করে) একটি ফ্রি তালিকায় স্থাপন করা হয়। তারপরে, যদি mvপ্রয়োজনগুলির অনুলিপি (কেবল চলমান ডিরেক্টরি প্রবেশের বিপরীতে) প্রয়োজন হয় তবে নতুন ব্লকগুলি mvলেখার জন্য বরাদ্দ করা হবে ।

    এই সদ্য বরাদ্দকৃত ব্লকগুলি কেবলমাত্র মুক্তি পেয়েছিল এমনগুলি হতে পারে বা নাও হতে পারেইউএফএসের মতো ফাইল সিস্টেমে ব্লকগুলি বরাদ্দ করা হয়, যদি সম্ভব হয়, একই সিলিন্ডার গোষ্ঠী থেকে ফাইলটি ডিরেক্টরিটি তৈরি করা হয়েছিল So এবং ওভাররাইট) একই ব্লক যা কেবল মুক্তি পেয়েছিল এই কারণেই যে ব্যক্তিরা দুর্ঘটনাক্রমে একটি ফাইল সরিয়ে দেয় তাদের আদর্শ পরামর্শটি হ'ল যতক্ষণ না কেউ ফাইল পুনরুদ্ধারের চেষ্টা করতে না পারে ততক্ষণ তাদের ডিরেক্টরি ট্রিটিতে (এবং সম্ভবত পুরো ফাইল সিস্টেমে নয়) ফাইলগুলিতে কোনও নতুন ডেটা না লিখে।

  • cp new_file old_fileনিম্নলিখিতগুলি করবে (আপনি straceসিস্টেম কলগুলি দেখতে ব্যবহার করতে পারেন):

    খোলা ("পুরাতন_ফায়াল", O_WRONLY | O_TRUNC) = 4

    ওটিআরআনসি পতাকাটি mvউপরের মতো সমস্ত ডেটা ব্লককে মুক্ত করে দেবে । এবং উপরের মতো, এগুলি সাধারণত একটি ফ্রি তালিকায় যুক্ত করা হবে এবং cpকমান্ড দ্বারা পরবর্তী লেখাগুলি পুনরায় ব্যবহার করতে বা নাও পেতে পারে ।

  • vi existing_file। যদি viআসলে হয় vim, :xকমান্ডটি নিম্নলিখিতটি করে:

    আনলিংক ("বিদ্যমান_ফিল ~") = -1 উত্স (এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই)
    পুনঃনামকরণ ("বিদ্যমান_ফाइल", "বিদ্যমান_ফিল ~") = 0
    খোলা ("বিদ্যমান_ফায়াল", ও_আপনি | ও_ক্রিট | ও_আরআনসি, 0664) = 3

    সুতরাং এটি এমনকি পুরানো ডেটা অপসারণ করে না; ডেটা ব্যাকআপ ফাইলে সংরক্ষণ করা হয়।

    FreeBSD 'র উপর, viনা open("existing_file",O_WRONLY|O_CREAT|O_TRUNC, 0664), যা হিসাবে একই শব্দার্থবিদ্যা থাকবে cp, উপরোক্ত।


আপনি বিশেষ প্রোগ্রাম ছাড়াই কিছু বা সমস্ত ডেটা পুনরুদ্ধার করতে পারেন; আপনার যা দরকার তা হ'ল grepএবং ddকাঁচা ডিভাইসে অ্যাক্সেস।

ছোট পাঠ্য ফাইলের জন্য, আপনি যে প্রশ্নটির সাথে লিঙ্ক করেছেন সেই প্রশ্নের উত্তর @ স্টিভেন ডি থেকে দেওয়া একক grepকমান্ড হ'ল সহজতম উপায়:

grep -i -a -B100 -A100 'text in the deleted file' /dev/sda1

তবে বৃহত্তর ফাইলগুলির জন্য যা একাধিক অ-সংহত ব্লকের মধ্যে থাকতে পারে, আমি এটি করি:

grep -a -b "text in the deleted file" /dev/sda1
13813610612:this is some text in the deleted file

যা আপনাকে ম্যাচিং লাইনের বাইটগুলিতে অফসেট দেবে। ddশুরু করে কমান্ডের একটি সিরিজ দিয়ে এটি অনুসরণ করুন

dd if=/dev/sda1 count=1 skip=$(expr 13813610612 / 512)

আপনি এই ব্লকের আগে এবং পরে কিছু ব্লক পড়তে চাইবেন। ইউএফএসে, ফাইল ব্লকগুলি সাধারণত 8KB হয় এবং সাধারণত মোটামুটি স্বচ্ছলভাবে বরাদ্দ করা হয়, একটি ফাইলের ব্লকগুলি অন্য ফাইল বা মুক্ত স্থান থেকে 8 কেবি ব্লকের সাথে পর্যায়ক্রমে ইন্টারলিভ করা হচ্ছে। ইউএফএসে একটি ফাইলের লেজটি 7 1KB অবধি টুকরো টুকরো টুকরো, যা সামঞ্জস্যপূর্ণ বা নাও হতে পারে।

অবশ্যই, ফাইল সিস্টেমগুলিতে যা ডেটা সংকুচিত করে বা এনক্রিপ্ট করে, পুনরুদ্ধার এটি সম্ভবত সোজা নাও হতে পারে।


ইউনিক্সে আসলে খুব কম ইউটিলিটি রয়েছে যা কোনও বিদ্যমান ফাইলের ডেটা ব্লকগুলিকে ওভাররাইট করে। এক যে মনে আসে dd conv=notrunc। আরেকটি হ'ল shred


3
তিনটি পৃথক ক্রিয়াকলাপের অভ্যন্তরীণ মেকানিক্স ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ। এটি সত্যিই দরকারী!
প্রশ্ন ওভারফ্লো

btrfsমুছে ফেলা ফাইল থেকে বেশ স্থিতিস্থাপক। এটি একটি বৃত্তাকার রবিন ফ্যাশনে ব্লক ব্যবহার করতে ঝোঁক, তাই আপনার যদি ডিভাইসে পর্যাপ্ত জায়গা থাকে তবে ফাইলটি দীর্ঘ সময়ের জন্য ওভাররাইট করা যাবে না। এখানে
pqnet

প্রিরিডিং টেক্সট ব্লক কীভাবে পাওয়া যায় এবং কী এড়িয়ে যায়?
ইউনিক্সিত

@ ইসলাম যখন আপনি skip=প্যারামিটারটি ডিডি দেবেন , তারপরে ইনপুটটির শুরু থেকে পড়ার পরিবর্তে number সংখ্যাটি ব্লক এড়িয়ে যাবে। একটি ব্লক ডিফল্টরূপে 512 বাইট হয় তবে bs=প্যারামিটার দিয়ে এটি পরিবর্তন করা যায় ।
মার্ক প্লটনিক

1
@ ইসলাম পূর্ববর্তী পাঠ্য ব্লকটি পেতে, আমি একটি skip=ব্লক 1 টি (512 বাইট) কম কম দেওয়ার পরামর্শ দিচ্ছি । আমার উদাহরণে $(expr 13813610612 / 512 - 1),। যদি আপনি যা চান তা যদি না পেয়ে থাকে তবে 16 বা 32 বিয়োগের সময় আবার চেষ্টা করুন, যা 8192 এবং 16384 বাইট কম অঞ্চলগুলি দেখবে; ফাইলগুলি প্রায়শই 8192-বাইট খণ্ডে বরাদ্দ করা হয়। আপনি যদি আরও বড় ফাইল পুনরুদ্ধার করার চেষ্টা করছেন তবে সময় সাশ্রয়ের জন্য বৃহত্তর গণনাগুলি চেষ্টা করুন। আমি সাধারণত ব্যবহার করে count=16এডিটরের ফলাফলটি দেখে থাকি emacsযার মতো কিছু ডেটা পাঠ্য না হয়।
মার্ক প্লটনিক

6

আমি না বলতে যাচ্ছি (একটি বিশাল দৈত্য সহ)

কীভাবে কোনও ডিস্কে ডেটা স্থাপন করা হয় তা চিন্তা করুন। আপনার কাছে এমন ব্লক রয়েছে যার মধ্যে ডেটা রয়েছে এবং পরের ব্লকটিতে নির্দেশ করুন (যদি তা থাকে)।

আপনি যখন ডেটা ওভাররাইট করবেন তখন আপনি ব্লক সামগ্রীগুলি পরিবর্তন করছেন (এবং যদি আপনি ফাইলটি সমস্ত শেষকারী চিহ্নিত করে থাকেন)। সুতরাং কিছুই পুনরুদ্ধার করতে সক্ষম হওয়া উচিত (নীচে দেখুন)।

আপনি যদি ফাইলটি ছোট করে রাখেন তবে আপনি পুরানো ব্লকগুলি হারাচ্ছেন এবং শীঘ্রই সেগুলি পুনর্ব্যবহার করা হবে। আপনি যদি প্রোগ্রামার হন তবে একটি লিঙ্কযুক্ত তালিকার কথা চিন্তা করুন যেখানে আপনি নিখরচায় / মোছা না করে আপনার অর্ধেক তালিকার "হারান"। তথ্যটি এখনও আছে, তবে এটি ভাগ্যবান।

কিছু ভাবতে আগ্রহী হতে পারে এমন হ'ল খণ্ড খণ্ডন।

যখন আপনার ডিস্কে অ-সংগতিপূর্ণ ডেটাগুলির "ছিদ্র" রয়েছে তখন টুকরো টুকরো টুকরো টুকরো ঘটে files এটি আপনার ফাইলগুলিকে প্রসারিত বা সংক্ষিপ্ত করে ফাইলে সংশোধন করার কারণে ঘটতে পারে এবং তারা আর ডিস্কের মূল স্পটে ফিট করে না।

কোনও ফাইলের আসল আকারটি ছাড়িয়ে যাওয়ার ঘটনাটি (এটি এই মুহুর্তে স্থানান্তরিত হওয়া প্রয়োজন), আপনার ফাইল সিস্টেমের উপর নির্ভর করে আপনি পুরো ফাইলটি এমন একটি নতুন স্থানে অনুলিপি করতে পারেন যেখানে পুরানো ডেটা এখনও থাকবে (তবে নিখরচায় চিহ্নিত হিসাবে চিহ্নিত) অথবা আপনি কেবল পুরানো শেষ পয়েন্টারটি পরিবর্তন করেছেন এবং এটি একটি নতুন অবস্থানে নির্দেশ করেছেন (এটি ছিটকে যাওয়ার দিকে পরিচালিত করবে)।

দীর্ঘ গল্প সংক্ষিপ্ত, আপনার ডেটা সম্ভবত হারিয়ে গেছে (চূড়ান্ত ফরেনসিক প্রক্রিয়াটি অতিক্রম না করে যেখানে আপনি এটি একটি মাইক্রোস্কোপের নীচে দেখেন); তবে, এটি এখনও আছে যে একটি সুযোগ আছে।


1
আপনার উত্তর ভাবনাটি হলো এই যে একটি ব্লক-ভিত্তিক অ কপি-অন-লেখ ফাইলসিস্টেম যেমন তোলে ext4বা xfsব্যবহার করা হচ্ছে। লেখার ফাইল সিস্টেমে অনুলিপি সহ zfsএবং btrfsআপনি বাস্তবে কখনও "ব্লকের বিষয়বস্তু পরিবর্তন করেন না "; এই ফাইল সিস্টেমগুলি সর্বদা নতুন ডেটা ধারণ করতে ব্র্যান্ড নিউ ব্লক ব্যবহার করে। এছাড়াও, লগ-ভিত্তিক ফাইল সিস্টেমগুলি jffs2সর্বদা নতুন অবস্থানগুলিতে নতুন ডেটা লেখায় ("ব্লকগুলি নয়", সেই ফাইল সিস্টেমগুলি ব্লক-ভিত্তিক নয়)। বলা হচ্ছে, এর অর্থ এই নয় যে পুরানো ডেটা কোথায় থাকে তা সন্ধান করা এবং স্থানটি পুনর্ব্যবহারের আগে এটি করা সহজ। সুতরাং আপনার উত্তর, যা না, এখনও সঠিক
সেলেদা

ধন্যবাদ ক্যালাডা! আমি খুব তথ্যপূর্ণ খুঁজে পেয়েছি। বিটিআরএস বা জেডএফএস কীভাবে কাজ করে তা দেখার সময় আমার হাতে নেই, তবে আমি জানতাম যে তাদের উপস্থিতি রয়েছে।
সাইলার কায়ার

2

আপনার / var / tmp বা অন্য কোথাও বড় ডিস্কের জায়গা রয়েছে তা নিশ্চিত করুন।

চেষ্টা

 grep -i -a -B100 -A100 'a string unique to your file' /dev/sda1 |
 strings > /var/tmp/my-recovered-file

যেখানে / dev / sda1 আপনার সিস্টেমে আপনার ডিস্ক হবে।

তারপরে আপনার স্ট্রিংয়ের জন্য আমার পুনরুদ্ধার করা ফাইলটি অনুসন্ধান করুন।

এটি বেশিরভাগ ক্ষেত্রেই থাকতে পারে, যদি আপনি এটি অনুপস্থিত লাইনস্পেস, বন্ধনী, সিসম্বল ইত্যাদি পরীক্ষা করে থাকেন check

আপনার ফাইল থেকে এমন একটি অনুসন্ধান শব্দ ব্যবহার করুন যা মোটামুটি অপ্রয়োজনীয় বা স্ট্রিং যা ফাইলের ডেটার পরিমাণ কমিয়ে দেবে। আপনি যদি "প্রতিধ্বনি" এর মতো শব্দটির সন্ধান করেন তবে আপনার প্রচুর পরিমাণে স্ট্রিং ফিরে আসবে কারণ সিস্টেমটিতে শব্দ প্রতিধ্বনি সহ প্রচুর ফাইল থাকবে।


0

আমি 12 ঘন্টা মূল্যবান পরীক্ষার ডেটা সহ একটি পাঠ্য ফাইল (VQ1.txt) ওভাররাইট করেছিলাম :( একটি ধারণা যা ইউনিক্স ফাইলের পূর্ববর্তী সংস্করণটিকে টেক্সট.টিএসটিএস ~ ফর্ম্যাটে সংরক্ষণ করে, আমাকে পুরো-ও-রাইট ফাইলের ওভাররাইট ফাইল যুক্ত ফোল্ডারে সন্ধান করতে বাধ্য করেছে) তালিকা VQ1.txt দেখিয়েছিল - এতে আমার 'হারিয়ে যাওয়া' ডেটা ছিল!

$ cat VQ1.txt~  
Start time at: Thu Apr  2 18:07:23 PDT 2015
User, KW: 12hrFA_OEM_HelloVoiceQ
Test Case: 
Detection:  1, 1, 04-03 01:07:00.673 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  2, 1, 04-03 01:09:04.813 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  3, 1, 04-03 04:09:26.023 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  4, 1, 04-03 04:11:29.893 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  5, 1, 04-03 07:12:27.013 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  6, 1, 04-03 07:14:30.803 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  7, 1, 04-03 08:37:13.113 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  8, 1, 04-03 10:21:23.533 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  9, 1, 04-03 10:23:27.733 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  10, 1, 04-03 13:23:47.893 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1
Detection:  11, 1, 04-03 13:25:52.203 D/MultiKeywordBdctReceiver( 1743): vs status 258 : 2 : 1

12hrFA_OEM_HelloVoiceQ,  
KW detect count: 11

4
এটি কি সাধারণভাবে ইউনিক্সের পরিবর্তে নির্দিষ্ট পাঠ্য সম্পাদকগুলির বৈশিষ্ট্য নয়? আমি কোনও ফাইল সিস্টেম সম্পর্কে সচেতন নই যা ফাইলগুলির পুরানো সংস্করণগুলি সেভাবে সংরক্ষণ করে।
জোয়ি

0

টিএল; ডিআর - যদি ওভাররাইট করা ফাইলটি এখনও কোনও চলমান প্রক্রিয়া দ্বারা খোলা রাখা থাকে, তবে এই ব্লগ পোস্টটি আপনার বেকন সংরক্ষণ করতে পারে:

https://www.linux.com/news/bring-back-deleted-files-lsof/

এটিতে এটি মুছে ফেলা ফাইলগুলি সম্পর্কে কথা বলে , তবে এটির সাথে আমার ভাগ্য ভাল এমনকি একটি ফাইল যা আরএসসিএনসি দ্বারা ওভাররাইট করা হয়েছিল with এবং আমি MB০ এমবি ফাইলের ওভাররাইট করা একটি GB০ জিবি ফাইলের কথা বলছি এবং আমি আসলটি পুনরুদ্ধার করতে সক্ষম হয়েছি কারণ ভাগ্যক্রমে আমি এটি চালিয়ে যাওয়া চলমান প্রক্রিয়াটি বন্ধ করিনি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.