यूनिक्स / लिनक्स हटाना / हटाए गए फ़ाइलों को पुनर्प्राप्त करें


124

क्या पुनर्प्राप्त / हटाए गए फ़ाइलों को हटाना रद्द करने के लिए एक आदेश है rm?

$ rm -rf /path/to/myfile

मैं कैसे ठीक हो सकता हूं myfile? अगर ऐसा कोई उपकरण है तो मैं इसका उपयोग कैसे कर सकता हूं?


1
cyberciti.biz/tips/… मदद कर सकते हैं। साथ ही यह स्टैक एक्सचेंज में बेहतर है ।
फेडोरक्वि

1. यह यूनिक्स और लिनक्स के लिए बेहतर होगा । 2. बैकअप?

1
इससे पहले कि आप कुछ भी करें, यह सुनिश्चित करने के लिए कि डेटा ओवरराइट नहीं किया गया है, केवल पढ़ने के लिए फाइलसिस्टम को माउंट करें। इस पोस्ट पर भी एक नज़र डालें: superuser.com/questions/170857/ext4-undelete-utilities

1
@ EvanTeitelman का मतलब है कि केवल पढ़ने के लिए रिमाउंट केवल फ़ाइल को पुनर्प्राप्त करने की कोशिश से बेहतर है, जबकि यह umounted है? Btw, midnightcommander (एमसी) जिस तरह से यह पता चलता है umounting datarecoverypros.com/recover-linux-midnightcommander.html
कुंभ पावर

1
सबसे अच्छा समाधान आगे सोचने और एक संशोधन नियंत्रण उपकरण का उपयोग करना है।
ctrl-alt-delor

जवाबों:


66

किसी व्यक्ति द्वारा टिप्पणियों में प्रदान किया गया लिंक आपके सर्वोत्तम अवसर की संभावना है।

लिनक्स डिबगफैट्स हैक: अनडेलीट फाइल्स

हालांकि यह लिखना कि थोड़ा डराना-धमकाना वास्तव में पालन करने के लिए काफी सीधा है। सामान्य तौर पर चरण इस प्रकार हैं:

  1. फाइलसिस्टम लॉग देखने के लिए डीबगफ़ का उपयोग करें

    $ debugfs -w /dev/mapper/wks01-root
    
  2. डीबगफुट प्रॉम्प्ट पर

    debugfs: lsdel
    
  3. नमूना उत्पादन

    Inode  Owner  Mode    Size    Blocks   Time deleted
    23601299      0 120777      3    1/   1 Tue Mar 13 16:17:30 2012
    7536655      0 120777      3    1/   1 Tue May  1 06:21:22 2012
    2 deleted inodes found.
    
  4. Debugfs में कमांड चलाएँ

    debugfs: logdump -i <7536655>
    
  5. फ़ाइलों को इनकोड निर्धारित करें

    ...
    ...
    ....
    output truncated
        Fast_link_dest: bin
        Blocks:  (0+1): 7235938
      FS block 7536642 logged at sequence 38402086, journal block 26711
        (inode block for inode 7536655):
        Inode: 7536655   Type: symlink        Mode:  0777   Flags: 0x0   Generation: 3532221116
        User:     0   Group:     0   Size: 3
        File ACL: 0    Directory ACL: 0
        Links: 0   Blockcount: 0
        Fragment:  Address: 0    Number: 0    Size: 0
        ctime: 0x4f9fc732 -- Tue May  1 06:21:22 2012
        atime: 0x4f9fc730 -- Tue May  1 06:21:20 2012
        mtime: 0x4f9fc72f -- Tue May  1 06:21:19 2012
        dtime: 0x4f9fc732 -- Tue May  1 06:21:22 2012
        Fast_link_dest: bin
        Blocks:  (0+1): 7235938
    No magic number at block 28053: end of journal.
    
  6. उपरोक्त इनकोड जानकारी के साथ निम्नलिखित कमांड चलाएं

    # dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
    # file recovered.file.001
    file: ASCII text, with very long lines
    

फाइलें बरामद की गईं recovered.file.001

अन्य विकल्प

यदि उपरोक्त आपके लिए नहीं है, तो मैंने photorecपुराने समय में फ़ाइलों को पुनर्प्राप्त करने के लिए टूल का उपयोग किया है , लेकिन यह केवल छवि फ़ाइलों के लिए तैयार है। मैंने इस लेख में अपने ब्लॉग पर इस विधि के बारे में विस्तार से लिखा है:

फेडोरा / सेंटोस / आरएचईएल पर एक डिजिटल कैमरा के एसडीडी कार्ड से भ्रष्ट जेपीईजी और Mov फ़ाइलों को पुनर्प्राप्त करने के लिए कैसे


11
मैं के साथ की कोशिश की debugfs -w /dev/sdb2लेकिन lsdel: sais0 deleted inodes found.
rubo77

5
का उपयोग extundeleteकरना ext3 / 4 के लिए आसान है और संभवत: उसी परिणाम को जन्म देगा।
मास्टर

1
इसने एक फ़ाइल को पुनर्प्राप्त करने के लिए काम किया, लेकिन मुझे @ y U6T6 * e 0 v' T 0 <#selinuxsystem_u: object_r: rpm_var_libt.t प्राप्त हुआ। s0 s} y U T6 ..... कोशिश कर रहा हूँ conv = ascii, conv = ibm, और conv = Ebcdic एक ही समस्या पैदा करता है
codyc4321

2
lsdel: फाइलसिस्टम नहीं खुला, इसे कैसे हल करें?
अमिताभ

3
मुझे मिलता है /dev/mapper/wks01-root: No such file or directory while opening filesystemतुम यह कहाँ /dev/mapper/wks01-rootसे मिला?
मार्को एविलाज़

29

कुछ अवसरों के साथ, कभी-कभी मैं इस स्क्रिप्ट या उत्तर में अगले समाधान के साथ हटाई गई फ़ाइलों को पुनर्प्राप्त कर सकता हूं:

#!/bin/bash

if [[ ! $1 ]]; then
    echo -e "Usage:\n\n\t$0 'file name'"
    exit 1
fi

f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')

if [[ $f ]]; then
    echo "fd $f found..."
    cp -v "$f" "$1"
else
    echo >&2 "No fd found..."
    exit 2
fi

एक और उपयोगी ट्रिक है: यदि आप अपनी डिलीट हुई फाइल्स में एक पैटर्न जानते हैं, तो + को रिबूट करने के लिए alt+ sys+ टाइप करें resuo-रीड-ओनली में रिमाउंट करें, फिर लाइव-सीडी के साथ grepहार्ड-ड्राइव में सर्च करने के लिए उपयोग करें:

grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover

उसके बाद /tmp/recoverकेवल अपनी फ़ाइल को रखने के लिए संपादित करें ।

अरे, अगर यूनिक्स दर्शन के साथ सभी फाइलें हैं, तो इसका फायदा उठाने का समय है, नहीं?


5
आपका grepआधारित समाधान बहुत ही चतुर है और मेरे लिए काम करता है, यहां तक ​​कि फाइल सिस्टम अभी भी घुड़सवार है। धन्यवाद!
वॉचगिन

मुझे समझ में नहीं आया कि grep समाधान आपके लिए कैसे काम करता है, यह केवल बाइनरी डेटा को आउटपुट करता है। यह कैसे उपयोगी है?
w00t

2
@ w00t ज़रूर, यह "केवल" द्विआधारी डेटा बाहर थूकता है। लेकिन कभी-कभी उस द्विआधारी डेटा में उस ASCII बिट्स को समाहित करने के लिए होता है जो मैं देख रहा हूं। मुझे लगता है कि मैं सवाल नहीं समझता?
2

@ w00t एक खोज पैटर्न का उपयोग करना है जो उस फ़ाइल के लिए बहुत विशिष्ट है। Grep कमांड प्रत्येक मेलिंग लाइन से पहले और बाद में 500 लाइनों को ले जाएगा, इसलिए यह अभी भी बहुत अधिक अप्रासंगिक डेटा को थूक देगा, लेकिन एक टेक्स्ट एडिटर के साथ जो कि सामना कर सकता है (जैसे विम), इससे अच्छे को सॉर्ट करना आसान है बुरा सामान। आप गैरgrep -av "[^[:print:]]"
संयुक् त

grepसमाधान एक संशोधन के साथ मेरे लिए काम किया: मैंने किया था sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee linesऔर बाइट ऑफसेट मिला (जैसे 123123123:line\n456456456:another\n...), तो किया था n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$nऔर n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$nविभिन्न साथ nमूल्यों।
Kirill Bulygin

21

मेरे लिए क्या काम आर्क द्वारा दिया गया था (केवल पाठ फ़ाइलों पर लागू होता है):

grep -a -C 200 -F 'Unique string in text file' /dev/sdXN

कहाँ /dev/sdXNखो फ़ाइल युक्त विभाजन है ( mountयदि अनिश्चित के साथ जाँच करें )।

थोड़ा समय लगता है, लेकिन जब मैंने गलती से कुछ स्रोत कोड हटा दिए, तो मैंने अभी तक काम नहीं किया था!


4
प्रोग्रामर के लिए बहुत उपयोगी!। आमतौर पर, हम हमेशा अपने स्वयं के कोड खो देते हैं।
पाइलोवर

1
मुझे इसके बारे में बताओ, मैं गलती से भाग गया rm data/*.json python myFile.pyके बजायrm data/*.json && python myFile.py
विलियम बेकर

2
धन्यवाद दोस्त, आपने मुझे रात में 2 घंटे लिखने में खर्च की गई एक पाठ फ़ाइल को पुनर्प्राप्त करने में मदद की। PS /dev/sdXNफ़ाइल सिस्टम के लिए है, है ना? मुझे मेरा साथ मिलाdf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
एलेक्स

मैं फ़ाइल का केवल बाइनरी देखता हूं। क्या इसे सामान्य प्रारूप में बदलने का कोई तरीका है?
सिल्‍गन

grep: conflicting matchers specified
felwithe

10

यद्यपि यह प्रश्न हल हो गया है और कुछ साल पुराना है, मैं टेस्टडिस्क उपयोगिता का उल्लेख करना चाहता हूं ।

Testdisk के साथ फ़ाइलों को पुनर्प्राप्त करने के लिए कैसे इस ट्यूटोरियल में अच्छी तरह से समझाया गया है । फ़ाइलों को चलाने के लिए testdisk /dev/sdXऔर अपनी विभाजन तालिका प्रकार का चयन करने के लिए । इसके बाद, सेलेक्ट करें [ Advanced ] Filesystem Utils, फिर अपना विभाजन चुनें और चुनें [Undelete]। अब आप हटाए गए फ़ाइलों को ब्राउज़ कर सकते हैं और उन्हें अपने फाइल सिस्टम में किसी अन्य स्थान पर कॉपी कर सकते हैं।


यह मेरे / dev / nvme0n1p2
h22

6

मुझे पिछले हफ्ते भी यही समस्या थी और मैंने बहुत सारे कार्यक्रमों की कोशिश की, जैसे डीबगफ, फोटोरेक, एक्सट्रेग्रेप और एक्स्टेंडेनेट। ext3grep फ़ाइलों को पुनर्प्राप्त करने के लिए सबसे अच्छा कार्यक्रम था। वाक्य रचना बहुत आसान है:

ext3grep image.img --restore-all

या:

ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’

यह वीडियो एक मिनी ट्यूटोरियल है जो आपकी मदद कर सकता है।


6

हटाने के delबजाय एक विकल्प का उपयोग किया जा सकता है rm:

http://fex.belwue.de/fstools/del.html

del एक नायाब फ़ंक्शन है और किसी भी फ़ाइल सिस्टम के साथ काम करता है।

निश्चित रूप से यह एक समाधान नहीं है यदि आपने पहले से ही "कैदी नहीं कैदियों" के साथ अपनी फ़ाइलें हटा दी हैं: rm: -}


1
जैसा कि आपने पहले ही कहा है, जवाब नहीं है, लेकिन del कमांड शुरू करने के लिए धन्यवाद ।
pylover

5

बाहरी इंटरफ़ेस के माध्यम से कनेक्ट ड्राइव

  1. पर्वत
  2. umount /dev/{sd*}
  3. extundelete --restore-all /dev/{sd*}
  4. परिणाम बूट ड्राइव पर होम फोल्डर में जाते हैं
  5. बोनस अंक: इसके लिए एक GUI लिखें

अधिक जानकारी के लिए यह लिंक देखें: extunde के साथ ext4 पर एक बस हटाई गई फ़ाइल को हटाना रद्द करें


2
डाउनवोटर्स, कृपया बताएं कि आपको क्यों लगता है कि एक्स्टेंडेलेट अच्छा विकल्प नहीं है?
webminal.org

2
अच्छा! पोस्ट करने का शुक्रिया। extundelete मेरे लिए एक नया उपकरण है। मैंने आज इसका इस्तेमाल किया और इसे बेहद मददगार पाया। स्वीकृत उत्तर की तुलना में बहुत अधिक उपयोगी IMO। इसे सुधारने के लिए मैं केवल यही बातें जोड़ूंगा, (1) कुछ अन्य उत्तरों में दिए गए निर्देशों को दोहराना है, जैसे ही किसी को प्रभावित कंप्यूटर को बंद करना चाहिए, जैसे ही पता चलेगा कि फाइलें गलती से डिलीट हो गईं, और (2) काली लिनक्स जैसे लाइवसीडी या लाइवयूएसबी ओएस से बूट करें जिसमें एक्स्टेंडेलेट उपयोगिता शामिल है (मैंने पाया कि डेबियन जेसी जैसे कई अन्य लाइवसीडी अपने इंस्टॉल मीडिया पर इस उपयोगिता को शामिल नहीं करते हैं)।
ओस्टियोबून

4

रिकवरी टूल - कमांड लाइन:

वसूली उपकरण - गुई:

इन्फोस:

अपने व्यक्तिगत अनुभव में, मुझे ufs-explorer और photorec का उपयोग करके अपना डेटा वापस मिलता है

(१) = मुक्त स्रोत नहीं, मुक्त नहीं

(२) = मुक्त स्रोत नहीं, मुक्त

(3) = मुक्त स्रोत और मुक्त

(४) = ntfs सपोर्ट है

(5) = निर्देशिका संरचना सुविधा है


1

मैं असहमत हूं कि यह असंभव है, बस बहुत मुश्किल है, और न ही मैंने कभी इसे लिनक्स से दूर किया है:

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


स्थिति के आधार पर यह 100% असंभव हो सकता है। यह काम कर भी सकता है और नहीं भी, लेकिन आपको कोई गारंटी नहीं है।
klutt

0

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

फ़ाइलों को संरक्षित करने का एक तरीका एक फ़ंक्शन लिखना होगा जो आपको फ़ाइलों को कचरा क्षेत्र में स्थानांतरित करने की अनुमति देगा (हमें कहने दें $HOME/.trash) और वहां से आवश्यक फ़ाइलों को पुनर्प्राप्त करें। इस फंक्शन को अलियास किया जा सकता है rm। आप कुछ दिनों के लिए कचरा क्षेत्र में मौजूद फ़ाइलों को हटाने के लिए क्रॉन जॉब शेड्यूल कर सकते हैं।


0

यह आप में से कुछ के लिए मुसीबत को बचा सकता है।
यदि आपने कभी भी उस फ़ाइल को संपादित करने के लिए gedit का उपयोग किया है, तो डिफ़ॉल्ट रूप से उस फ़ाइल की एक प्रति बनाई जाएगी।
उदाहरण के लिए मान लें कि हमारे पास 'myfile.txt' नाम की दुर्घटना है।
उस फ़ोल्डर में, जिसमें आपके द्वारा अभी-अभी डिलीट की गई फाइल का उपयोग किया गया है और आप कॉपी को वहीं से रिकवर कर लेंगे:
ls | grep 'myfile.txt~'
थोड़ी किस्मत से आप इसे पा लेंगे और फिर:
cp 'myfile.txt~' 'myfile.txt'
मैंने इस विधि का उपयोग करके अभी एक फाइल रिकवर की है। शुभकामनाएँ!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.