วิธีการกู้คืนไฟล์ที่ถูกลบใน Linux?


65

ฉันใช้rmไฟล์ที่ฉันไม่ต้องการลบโดยบังเอิญ มีวิธีใดบ้างที่ฉันจะนำมันกลับมาใช้ภายใต้ Linux


@Nav rmเป็นคำสั่ง "อันตราย" UNIX / Linux (อ่าน$ man rm) ใช้ด้วยความระมัดระวังอย่างยิ่ง ด้วยวิธีที่กล่าวมามันเป็นวิธีที่รวดเร็วในการลบไฟล์ที่คุณมั่นใจ สภาพแวดล้อม Linux และ Unix บนเดสก์ท็อปสมัยใหม่มีวิธีการแก้ปัญหา"ถังขยะ"เพื่อให้ผู้ใช้สามารถกู้คืนไฟล์ที่ถูกลบโดยไม่ตั้งใจได้อย่างง่ายดาย
Jose Elera

1
คำตอบที่เป็นปัจจุบันเพิ่มเติมได้ที่: unix.stackexchange.com/questions/122305/…
Ben Crowell

อย่าใช้ "rm" หากคุณต้องการกู้คืนไฟล์ในอนาคตใช้ยูทิลิตี "rm-trash" แทน: github.com/nateshmbhat/rm-trash
Natesh bhat

คำตอบ:


51

ต่อไปนี้เป็นขั้นตอนทั่วไปในการกู้คืนไฟล์ข้อความ

  1. ขั้นแรกให้ใช้คำสั่ง wall เพื่อบอกผู้ใช้ว่าระบบกำลังหยุดทำงานในโหมดผู้ใช้คนเดียว:

    # wall
    System is going down to .... please save your work.
    

    กด CTRL + D เพื่อส่งข้อความ

  2. ใช้คำสั่ง init 1 เพื่อนำระบบไปใช้ในโหมดผู้ใช้คนเดียว:

    # init 1
    
  3. การใช้ grep (วิธี UNIX แบบดั้งเดิม) เพื่อกู้คืนไฟล์

    ใช้ไวยากรณ์ grep ต่อไปนี้:

    grep -b 'search-text' /dev/partition > file.txt
    

    หรือ

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
    

    ที่ไหน

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
    -a : Process a binary file as if it were text
    -B Print number lines/size of leading context before matching lines.
    -A: Print number lines/size of trailing context after matching lines.
    

    ในการกู้คืนไฟล์ข้อความที่ขึ้นต้นด้วยคำว่า "nixCraft" บน / dev / sda1 คุณสามารถลองใช้คำสั่งต่อไปนี้:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. ใช้ vi เพื่อดูไฟล์ต่อไป

    วิธีนี้มีประโยชน์เฉพาะถ้าไฟล์ที่ถูกลบเป็นไฟล์ข้อความ หากคุณใช้ระบบไฟล์ ext2 ลองใช้คำสั่งกู้คืน

พบได้ที่http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html


16
น่าสังเกตว่าคุณไม่สามารถทำเช่นนี้ในโหมดผู้ใช้คนเดียวในระยะไกลจะปิดการเชื่อมต่อเครือข่าย
Quinma

1
วิธีนี้ใช้งานได้อย่างมหัศจรรย์สำหรับไฟล์ข้อความขอบคุณ! สิ่งที่ฉันชอบเกี่ยวกับมันคือมันไม่ได้ขึ้นอยู่กับเจอร์นัลของระบบไฟล์ (เช่น extundelete) แต่จริงๆแล้วมันจะสแกนไบต์ดิบของไดรฟ์ทั้งหมดแทน หากคำสั่งนี้ไม่พบไฟล์ของคุณไม่มีอะไรจะ
Benjamin B.

1
@Quinma วิธีนี้สามารถทำงานในระยะไกลด้วยการปรับเปลี่ยนเพียงเล็กน้อย ... แทนการทำงานด้วยตนเองฆ่าทุกภูตระบบยกเว้นinit 1 sshdฉันยังคิดว่า ณ จุดนี้คุณควรจะประกอบระบบไฟล์ RO ทั้งหมดและบันทึกเป็น tmpfs (สมมติว่าไฟล์ temp ของคุณจะพอดีกับ ram) เพื่อหลีกเลี่ยงการเขียนทับไฟล์ด้วยข้อมูล temp แน่นอนคุณจะต้องคัดลอกที่อื่นในภายหลังไม่ว่าจะเป็นเซิร์ฟเวอร์ระยะไกลหรือกลับไปที่ระบบไฟล์ในท้องถิ่นหลังจากที่พวกเขาเล่าให้ใหม่ RW
Thomas Guyot-Sionnest

your_partition คืออะไร ??? ฉันมีข้อผิดพลาด: / dev / sda1: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
coolcool1994

1
@ กลับฉันไม่รู้จริง ๆ ตามที่ระบุไว้ฉันเพิ่งทำตามขั้นตอน แต่ init 1 นั้นมีไว้สำหรับงานด้านการบริหารและอาจจะเป็นกระบวนการ kill ที่ไม่เกี่ยวข้องกับสถานการณ์ runlevel นั้น ซึ่งอาจช่วยป้องกันการใช้งานฮาร์ดดิสก์เขียนทับไฟล์ที่คุณพยายามกู้คืน
Gabriel L. Oliveira

13
  • หากเป็นสิ่งที่สำคัญมากให้นำดิสก์จากคอมพิวเตอร์และว่าจ้าง บริษัท ให้ทำเพื่อคุณ
  • หากมีความสำคัญมากให้ติดตั้งดิสก์แบบอ่านอย่างเดียวคัดลอกพาร์ติชันทั้งหมดไปยังไฟล์โดยใช้ddและลองค้นหาไฟล์ที่อยู่ภายใน (โดยใช้grepหรือตัวแก้ไข)

แก้ไข: บางครั้งทำงานได้ดีกว่าddrescuedd


1
"ลองค้นหาไฟล์ที่อยู่ข้างใน" ฉันสับสนแล้วหนึ่งในนั้นจะเปิดไฟล์ขนาด 15+ GB อย่างสมเหตุสมผลได้อย่างไรและค้นหาหรือทำให้สัตว์ร้ายนี้กลายเป็น grep ได้อย่างไร และคุณจะทำอย่างไรเมื่อคุณพบข้อความ การกู้คืนนี้เป็นวิธีการบนโลก?
TheLQ

1
สิ่งแรกที่ต้องทำคือการลองใช้เครื่องมือทั่วไปก่อนที่จะเขียนเงินสดจำนวนมากเพื่อผลลัพธ์ที่ไม่แน่นอน BTW, grep จะไม่ช่วยจริงๆ photorec หรือ ext3grep จะ
wazoox


8

Testdiskมีตัวเลือกยกเลิกการลบที่ควรทำงานกับ Linux

มีคำแนะนำสำหรับลินุกซ์ โปรดทราบว่าการทำงานสำหรับext2 , ext3และext4


1
extundelete ยังมีประโยชน์ถ้าพาร์ติชั่นเป็น ext3 / 4 อย่างไรก็ตามสิ่งแรกที่ต้องทำก็คือการ unmount พาร์ติชั่น
billc.cn

5
  • คำตอบเดียวที่ถูกต้องคือกู้คืนไฟล์ของคุณจากการสำรองข้อมูล ทุกคนต้องมีข้อมูลสำรอง สำหรับไฟล์ที่สำคัญมากคุณควรมีข้อมูลสำรองสองชุด คุณทำไม่ได้ แย่มากด้วยนี่คือบทเรียนที่ได้เรียนรู้ (ขออภัยที่ฟังดูแย่ แต่ฉันอยู่ในที่จัดเก็บข้อมูลและผู้คนไม่ได้สำรองข้อมูลจนกว่าพวกเขาจะสูญเสียข้อมูลสำคัญบางอย่างนั่นเป็นข้อเท็จจริงที่ให้มาใช่คุณดูโง่ แต่ ก็เกือบทุกคนแล้ว)

  • ตกลงคุณไม่มีข้อมูลสำรอง คุณต้องหยุดการใช้ระบบไฟล์ที่มีไฟล์RIGHTทันที กิจกรรมใด ๆ ที่เขียนแน่นอนอาจท่อแฟ้มข้อมูลที่อาจ (เฉพาะอาจ ) ยังคงอยู่บนดิสก์

  • หากคุณทำข้อผิดพลาดที่น่าเศร้าให้ใช้เพียงพาร์ติชันเดียวเป็นทั้งระบบไฟล์รูทและ / home นั่นหมายความว่าคุณต้องบูตจากอุปกรณ์อื่น ตอนนี้

  • หากไฟล์ของคุณเป็นรูปแบบบางอย่างที่พบบ่อย (ไฟล์ Word, JPG, ฯลฯ ) ใช้PhotoRec Photorec สามารถดึงไฟล์ได้หลายรูปแบบ

  • คุณสามารถลองใช้วิธีการ "ext3 ยกเลิกการลบ" ที่เสนอก่อนหน้านี้ แต่คุณจะต้องคุ้นเคยกับบรรทัดคำสั่งเข้าใจการทำงานพื้นฐานของ linux ภายในเป็นต้น

  • หากไฟล์ของคุณอยู่ในรูปแบบพิเศษขอให้โชคดี ฉันเคยเขียนโปรแกรม Perl เพื่อสแกนไดรฟ์สำหรับไฟล์พิเศษบางไฟล์และมันก็ใช้งานได้ดี แต่คุณจะต้องรู้จักการเขียนโปรแกรมเพื่อทำเช่นนั้นและใช้งานได้อย่างสบายใจกับ linux


5

ฉันทำสิ่งนี้เมื่อสองสามปีก่อน วิธีการของฉันคือโดยตรงไม่ต้องเสียเวลายกเลิกการต่อเชื่อมพาร์ติชันแล้ว

dd if=/dev/hda1 of=backup_image.ext3

เพื่อมีไฟล์สำรองข้อมูลของสถานะที่แน่นอนของพาร์ติชัน จากนั้นคุณสามารถติดตั้งพาร์ติชันอีกครั้งและดำเนินธุรกิจต่อไปตามปกติเมื่อคุณค้นหาไฟล์ที่ถูกลบในภาพที่สร้างขึ้น รูปภาพอาจมีขนาดใหญ่มากเนื่องจากคุณต้องการพื้นที่ "ว่าง" ทั้งหมดดังนั้นจึงอาจเป็นปัญหาในทางปฏิบัติในการจัดเก็บ

จากนั้นเป็นเพียงการค้นหาที่น่าเบื่อหลังจากตัวอย่างข้อความที่ฉันคาดว่าจะอยู่ที่ไหนสักแห่งในเนื้อหาของพาร์ติชัน เช่นในการค้นหา. ไฟล์เท็กซ์ฉันวิ่ง

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles

ซึ่งพิมพ์บริบทขนาดใหญ่รอบวลี "ส่วนย่อย" และบันทึกผลลัพธ์ไปยังไฟล์ที่จะค้นหาด้วยตนเอง ฉันพิมพ์บริบทขนาดใหญ่เช่นนี้เนื่องจากใช้เวลานานมากในการค้นหาภาพที่ฉันไม่ต้องการทำมากกว่าเวลาที่ฉันต้องทำ

นอกจากนี้คำสั่งstringsยังมีประโยชน์ในการลบขยะไบนารีออกจากผลลัพธ์ แต่ถ้าฉันจำได้อย่างถูกต้องมันก็จะทำการขึ้นบรรทัดใหม่ทั้งหมดซึ่งอาจเป็นปัญหาได้

ในการค้นหาไฟล์ไบนารีด้วยวิธีเดียวกันอาจประสบความสำเร็จในการค้นหาส่วนหัวของลักษณะหรือบางสิ่งบางอย่างของไฟล์บางอย่าง แต่ฉันคิดว่ามันจะเป็นการผจญภัยที่ยิ่งใหญ่


หมายเหตุทางเทคนิคโดยย่อ: มีปัญหาทางเทคนิคกับการกู้คืนดิสก์และ Ext3 / 4 มันเป็นเรื่องยาวที่จะอธิบาย แต่สั้น ๆ (และไม่เพียงพอ): Ext3 / 4 จะลบ "เครื่องหมาย" ที่บอกระบบปฏิบัติการว่าไฟล์อยู่ที่ไหนในดิสก์เมื่อคุณลบ ไฟล์ไม่ได้ถูกขัด แต่ไม่มีใครรู้ว่าอยู่ที่ไหนบนดิสก์ที่พวกเขาเริ่มต้นและสิ้นสุดอีกต่อไปและบางครั้งพวกเขาก็มีการแยกส่วนที่หลายแห่ง ระบบไฟล์อื่นบางระบบเพียงตั้งสถานะของไฟล์เป็น "ลบ" แต่เก็บข้อมูลตำแหน่งไว้ จากนั้นการยกเลิกการลบจะไม่ยากกว่าการดูตัวชี้ไฟล์ด้วยธงนี้ (ควรจะยังคงพร้อมใช้งานหากไม่เกิดกิจกรรมมากเกินไป) และหวังว่าเนื้อหาของพวกเขาจะไม่ถูกเขียนทับ

อะไรดีที่สุด? วาทศิลป์ในมุมมองของฉัน การสำรองข้อมูลเป็นประจำคือคำตอบสำหรับปัญหาเหล่านี้ทั้งหมด ข้อมูลสำคัญที่ไม่มีระบบสำรองข้อมูลอัตโนมัติคืออุบัติเหตุที่เกิดขึ้น IMHO


บังคับเรื่องเล็ก ๆ น้อยส่วนบุคคล: ฉันกำลังจะไปเอาจากfoo\ foo* ~ฉันเขียน

rm -r foo<Tab>*

ซึ่งน่าเศร้าเนื่องจากfooเห็นได้ชัดว่าเป็น symlink และเป็นไฟล์เดียวที่จับคู่สิ่งนี้เชลล์จึงสร้างขึ้น

rm -r foo\ foo *

ฉันกด Enter แล้วนั่งดูที่คำสั่งซึ่งควรใช้เวลาไม่เกินวินาที หลังจากที่เวลาอีกนิดrmถามฉันว่าฉันต้องการ "เพื่อลบไฟล์ป้องกันการเขียน 'บางสิ่งบางอย่าง". Ctrl+cได้อย่างรวดเร็วมากฉันรู้สึกหนาวสั่นและเบาและมีการควบคุมมากผมกด ~ ครึ่งหนึ่งของฉัน~ถูกลบ แต่ฉันจัดการเพื่อให้ได้คุณค่าทุกอย่างผ่านการอธิบายข้างต้น grepping อธิบายและสำรองข้อมูลปัจจุบันมากขึ้นหรือน้อยลง ฉันมีค่าส่วนบุคคลมาก (อ่าน: ใช้เวลานาน) และข้อมูลการวัดล่าสุดบนดิสก์ที่หายไป แต่ฉันได้สำรองข้อมูลสี่เท่า คนหนึ่งหายไปจากที่นี่อีกคนหนึ่งเนื่องจากระบบดับที่โรงเรียนอีกรายการหนึ่งเสียหายและในตอนแรกฉันไม่สามารถหาที่สี่ได้เพราะฉันใส่ผิดในโฟลเดอร์ผิด :-D ไม่ได้rm -rได้ติดอยู่ในไฟล์ป้องกันการเขียนที่สี่จะได้รับการกินตั้งแต่โฟลเดอร์ที่ติดตั้งผ่านทาง sshfs ~ในของฉัน ฉันระมัดระวังมากขึ้นเกี่ยวกับสิ่งนั้นตั้งแต่


5

หากเป็นrmมาตรฐานฉันหวังว่าคุณจะมีข้อมูลสำรอง ขั้นตอนการกู้คืนไฟล์ที่ถูกลบจะแตกต่างกันไปในแต่ละระบบไฟล์หากสามารถทำได้เลย Linux ไม่มี "ถังรีไซเคิล" ในตัว; เมื่อคุณลบไฟล์ทุกอย่างจะหายไป

ไม่ว่าคุณจะทำสิ่งใดคุณจะต้องถอดปลั๊กคอมพิวเตอร์ออกโดยเร็วที่สุดเท่าที่จะทำได้เพื่อให้คอมพิวเตอร์ทำงานต่อไป (แม้จะปิดเครื่อง) ทำให้เกิดการเขียนลงดิสก์และเพิ่มโอกาสที่บล็อกบางส่วนจะถูกครอบครองโดย ไฟล์จะถูกเขียนทับ เมื่อคุณดำเนินการเสร็จแล้วให้นำไปไว้ในคอมพิวเตอร์เครื่องอื่นรีบูทสดซีดี (อย่าลืมติดตั้งไดรฟ์เว้นแต่คุณจะเมานต์แบบอ่านอย่างเดียว) หรือถอดฮาร์ดไดรฟ์แล้วนำไปยังผู้เชี่ยวชาญด้านการกู้คืนข้อมูล


4

ตั้งความคาดหวังของคุณต่ำ หากมีสิ่งใดถูกเขียนทับข้อมูล 'ถูกลบ' คุณจะสูญเสียมันไป

ฉันได้ทำการกู้คืนจำนวนเล็กน้อยและเครื่องมือที่ดีที่สุดที่ฉันพบมักได้รับการออกแบบสำหรับรูปแบบบางอย่าง เช่น 'photorec' นั้นยอดเยี่ยมเมื่อฉันต้องการกู้ jpegs นับหมื่น

Recuvaยังช่วยฉันก่อนหน้านี้และอาจเป็นทางเลือกที่ดีที่สุดของคุณ (มันฟรีไม่โดนหลอกให้จ่ายโดยโฆษณาของพวกเขา)

ในตอนท้ายของวันหากสิ่งที่คุณทำหายไปเป็นสิ่งสำคัญให้ขับรถออฟไลน์และหยุดเขียน ใช้ซอฟต์แวร์กู้คืนทุกชิ้นที่คุณสามารถหาได้จนกว่าคุณจะได้รับข้อมูลคืนหรือไม่คุ้มค่า ถ้ามันสำคัญจริงๆส่งให้มืออาชีพในราคาสูง

หากคุณเคยโชคกับเครื่องมือมาลองใช้มันดูอีกครั้งตามที่คุณคุ้นเคย ในตอนท้ายของวันพวกเขาไม่ควรเขียนลงดิสก์และคุณสามารถใช้ซอฟต์แวร์ได้จนกว่าคุณจะพบซอฟต์แวร์ที่ใช้งานได้


2

นี่คือเอกสารที่ดีสำหรับคุณ คุณจะพบกับเคล็ดลับการปฏิบัติมากมาย

BTW มีคนสองกลุ่ม:

  1. ผู้ที่ทำการสำรองข้อมูล
  2. ผู้ที่จะทำการสำรองข้อมูล

ขอแสดงความยินดีคุณเพิ่งเลื่อนระดับเป็นกลุ่ม 2 ;-)


2

หากคุณมีแอปพลิเคชั่นที่เปิดอยู่ซึ่งกำลังอ่านไฟล์อยู่เช่น VLC หรือ LibreOffice คำตอบ L & U.SO ที่ยอดเยี่ยมนี้ช่วยฉันออกจากความยุ่งเหยิงนี้ นี่คือวิธีการทางเลือกสำหรับการทำเช่นเดียวกัน

แนวคิดทั่วไปคือการค้นหาลิงค์/proc/PID/fd/DESCRIPTOR_NUMBERและคัดลอกกลับไปที่ตำแหน่งเดิม ใช้ps aux | grep APP_NAMEเพื่อค้นหา PID จากนั้นls -la /proc/PID/fd/ค้นหา DESCRIPTOR_NUMBER ที่เหมาะสม


1

คำตอบ "ถูกต้อง" คือสมมติว่าไม่มีวิธีการกู้คืนที่เชื่อถือได้และกู้คืนจากการสำรองข้อมูลหรือระบบโคลนหรือติดตั้งแทน

TestDisk เป็นเครื่องมือที่ยอดเยี่ยมและมีวิธีอื่น ๆ ในการกู้ข้อมูลบางอย่างจากไดรฟ์ทางกายภาพขึ้นอยู่กับระบบไฟล์และความใหม่ของการลบ แต่เวลาและความเจ็บปวดที่เกี่ยวข้องอาจจะมากเกินไปดังนั้นKEEP BACKUPS (และทดสอบด้วย) พวกมันใช้ได้จริงและ restorable)!


1

หากผู้ใช้รายอื่นไม่ได้เขียนทับแสดงว่าคุณโชคดี ฉันลบไฟล์ต้นฉบับ cpp โดยไม่ได้ตั้งใจและใช้เครื่องมือที่เรียกว่าสำคัญที่สุดซึ่งช่วยให้ฉันเรียกคืนเศษซาก cpp 60G จากดิสก์ ในที่สุดฉันก็กู้คืนไฟล์ของฉันโดยการประกอบชิ้นส่วนเหล่านั้นทีละชิ้น ฉันคิดว่ามันสแกนรูปแบบบางอย่างสำหรับประเภทไฟล์ที่เฉพาะเจาะจงและสำรวจ inodes ทั้งหมดบนดิสก์เพื่อกู้คืนไฟล์! ลองดูสิ!


0

หากคุณลบไฟล์ออกจาก Linux โดยไม่ตั้งใจคุณสามารถใช้คำสั่งนี้:

find /root -name "search text" -type f  -exec mv {} "/home" \;

ในสถานที่ของคุณสามารถใส่ชื่อไฟล์และไดเรกทอรีสามารถระบุตำแหน่งที่คุณต้องการที่จะเรียกคืนในสถานที่ของsearch text/home


2
สวัสดี Santosh โปรดอย่าเพิ่มลิงก์ที่ทำให้เข้าใจผิดในโพสต์ของคุณ มันถูกลบไปแล้ว
ᔕᖺᘎᕊ

0

คุณสามารถลองใช้สคริปต์นี้ ใช้งานได้ดีและตั้งใจจะใช้แทน rm และ im ที่ใช้กันอย่างแพร่หลายในตอนนี้

https://github.com/nateshmbhat/safe-rm

คุณสมบัติ:

  • ตั้งใจจะใช้แทน rm
  • จัดการกับข้อโต้แย้งทั้งหมดที่ rm สามารถใช้
  • จัดการการชนชื่อไฟล์ด้วยไฟล์ที่อยู่ในถังขยะ
  • จัดการปัญหาสิทธิ์บางอย่างโดยอัตโนมัติ
  • หาก rm ถูกเรียกใช้จากสคริปต์อื่นหรือโดยอ้อมคำสั่ง 'rm' ของระบบจะถูกใช้โดยอัตโนมัติ
  • แสดงข้อความแสดงข้อผิดพลาดที่เหมาะสมเช่นที่เกิดขึ้น rm

-2

ฉันมีปัญหาเดียวกันเมื่อสัปดาห์ที่แล้วและฉันลองใช้โปรแกรมมากมายเช่น debugfs, photorec, ext3grep และ extundelete ext3grep เป็นโปรแกรมที่ดีที่สุดในการกู้คืนไฟล์ sintax นั้นง่ายมาก:

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’

วิดีโอนี้แสดงให้เห็นเป็นแบบย่อส่วนที่สามารถช่วยคุณได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.