มีคำสั่งให้กู้คืน / ยกเลิกการลบไฟล์ที่ถูกลบrm
หรือไม่
$ rm -rf /path/to/myfile
ฉันจะกู้คืนได้myfile
อย่างไร หากมีเครื่องมือดังกล่าวฉันจะใช้งานได้อย่างไร?
มีคำสั่งให้กู้คืน / ยกเลิกการลบไฟล์ที่ถูกลบrm
หรือไม่
$ rm -rf /path/to/myfile
ฉันจะกู้คืนได้myfile
อย่างไร หากมีเครื่องมือดังกล่าวฉันจะใช้งานได้อย่างไร?
คำตอบ:
ลิงค์ที่มีคนแสดงความคิดเห็นน่าจะเป็นโอกาสที่ดีที่สุดของคุณ
Linux debugfs Hack: ยกเลิกการลบไฟล์
บทความนั้นถึงแม้ว่าการมองหาการข่มขู่เล็กน้อยนั้นเป็นสิ่งที่จะต้องปฏิบัติตามอย่างแน่นอน โดยทั่วไปขั้นตอนมีดังนี้:
ใช้ debugfs เพื่อดูบันทึกระบบไฟล์
$ debugfs -w /dev/mapper/wks01-root
ที่พรอมต์ debugfs
debugfs: lsdel
ตัวอย่างผลลัพธ์
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.
เรียกใช้คำสั่งใน debugfs
debugfs: logdump -i <7536655>
พิจารณาไฟล์ inode
...
...
....
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.
ด้วยข้อมูล inode ข้างต้นให้รันคำสั่งต่อไปนี้
# 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
การกู้คืนไฟล์ในอดีต แต่มันเหมาะสำหรับไฟล์รูปภาพเท่านั้น ฉันได้เขียนเกี่ยวกับวิธีการนี้อย่างกว้างขวางในบล็อกของฉันในบทความนี้ชื่อ:
วิธีการกู้คืนไฟล์ jpeg เสียหายและไฟล์ MOV จากบัตร SDD กล้องดิจิตอลบน Fedora
debugfs -w /dev/sdb2
แต่lsdel
sais:0 deleted inodes found.
extundelete
ext3 / 4 ง่ายกว่าและอาจนำไปสู่ผลลัพธ์เดียวกัน
/dev/mapper/wks01-root: No such file or directory while opening filesystem
คุณ/dev/mapper/wks01-root
มาจากที่ไหน
ด้วยโอกาสเล็กน้อยบางครั้งฉันสามารถกู้คืนไฟล์ที่ถูกลบด้วยสคริปต์นี้หรือวิธีแก้ไขปัญหาต่อไปในคำตอบ:
#!/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เพื่อรีบูต + นับใหม่ในแบบอ่านอย่างเดียวแล้วใช้ live-cd grep
เพื่อค้นหาในฮาร์ดไดรฟ์:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
จากนั้นแก้ไข/tmp/recover
เพื่อเก็บเฉพาะไฟล์ที่คุณเคยมีมาก่อน
เฮ้, ถ้าด้วยปรัชญาของยูนิกซ์ทั้งหมดคือไฟล์, มันถึงเวลาที่จะใช้ประโยชน์จากสิ่งนี้, ไม่ใช่?
grep
โซลูชันพื้นฐานของคุณนั้นฉลาดและใช้งานได้ดีสำหรับฉันแม้ว่าจะติดตั้งระบบไฟล์แล้วก็ตาม ขอบคุณ!
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
ค่า
สิ่งที่ได้ผลสำหรับฉันถูกมอบโดยarch (ใช้กับไฟล์ข้อความเท่านั้น):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
ที่/dev/sdXN
เป็นพาร์ทิชันที่มีไฟล์ที่หายไป (ตรวจสอบกับmount
หากไม่แน่ใจ)
ใช้เวลาสักครู่ แต่ทำงานเมื่อฉันลบรหัสที่มาบางอย่างที่ฉันยังไม่ได้ทำ!
rm data/*.json python myFile.py
แทนrm data/*.json && python myFile.py
/dev/sdXN
เป็นระบบไฟล์ใช่มั้ย ฉันพบฉันด้วยdf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
แม้ว่าคำถามนี้จะได้รับการแก้ไขและไม่กี่ปีที่ผ่านมาฉันต้องการพูดถึงอรรถประโยชน์testdisk
วิธีการกู้คืนไฟล์ด้วย testdisk ได้รับการอธิบายอย่างดีในบทช่วยสอนนี้ ในการกู้คืนไฟล์ให้รันtestdisk /dev/sdX
และเลือกประเภทตารางพาร์ติชันของคุณ หลังจากนี้เลือกแล้วเลือกพาร์ทิชันของคุณและเลือก[ Advanced ] Filesystem Utils
[Undelete]
ตอนนี้คุณสามารถเรียกดูและเลือกไฟล์ที่ถูกลบและคัดลอกไปยังตำแหน่งอื่นในระบบไฟล์
ฉันมีปัญหาเดียวกันเมื่อสัปดาห์ที่แล้วและฉันลองใช้โปรแกรมมากมายเช่น debugfs, photorec, ext3grep และ extundelete 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’
วิดีโอนี้เป็นแบบย่อส่วนที่สามารถช่วยคุณได้
ทางเลือกอื่นอาจใช้del
แทนrm
การลบ:
http://fex.belwue.de/fstools/del.html
del
มีฟังก์ชั่นยกเลิกการลบและทำงานกับระบบไฟล์ใด ๆ
แน่นอนว่าไม่ใช่วิธีแก้ปัญหาหากคุณลบไฟล์ของคุณด้วย "take no นักโทษ" rm: -}
del
คำสั่ง
เชื่อมต่อไดรฟ์ผ่านอินเทอร์เฟซภายนอก
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
ดูที่ลิงค์นี้สำหรับข้อมูลเพิ่มเติม: ยกเลิกการลบไฟล์เพียงแค่ลบบน ext4 กับ extundelete
เครื่องมือการกู้คืน - บรรทัดคำสั่ง:
เครื่องมือการกู้คืน - Gui:
ข่าวสาร:
จากประสบการณ์ส่วนตัวของฉันฉันได้รับข้อมูลกลับมาโดยใช้ ufs-explorer และ photorec
(1) = ไม่ใช่โอเพ่นซอร์สไม่ฟรี
(2) = ไม่ใช่โอเพ่นซอร์สฟรี
(3) = เปิดแหล่งที่มาและฟรี
(4) = มีการรองรับ ntfs
(5) = มีคุณสมบัติโครงสร้างไดเรกทอรี
ฉันไม่เห็นด้วยว่ามันเป็นไปไม่ได้ยากมากและฉันก็ไม่ได้ทำมันจาก Linux:
เมื่อไฟล์ถูกลบพวกเขาจะไม่ถูกลบจริง สิ่งที่เกิดขึ้นก็คือพื้นที่ที่อยู่ในฮาร์ดไดรฟ์นั้นจะถูกรีเซ็ตดังนั้นหากคอมพิวเตอร์พยายามเขียนข้อมูลที่นั่นก็ไม่มีอะไรบ่น โดยทั่วไปแล้วข้อมูลในฮาร์ดไดรฟ์ที่คุณคิดว่าคุณลบไปแล้วจะสามารถอยู่ได้ในอีกหนึ่งปีต่อมา หรืออย่างน้อยนี่คือประสบการณ์ของฉันในเครื่อง Windows ไม่ว่าจะทำงานในลักษณะเดียวกันจาก commandline บน Linux หรือไม่ฉันก็ไม่แน่ใจ แต่คุณอาจต้องการ Live CD แยกต่างหากเพื่อเปิดพาร์ติชันเช่นนั้นและไม่มีการรับประกันว่าไฟล์จะยังคงอยู่ที่นั่น ฉันทำสิ่งนี้บน windows xp หลายครั้งโดยใช้ Zero Assumption Recovery ฉันแน่ใจว่ามีเครื่องมือที่คล้ายกันถ้าคุณดูหนักพอ
เมื่อคุณลบไฟล์ลิงค์จะนับในตาราง inode สำหรับไฟล์นั้นลดลงหนึ่งอัน ใน Unix เมื่อจำนวนลิงก์ลดลงเป็น 0 บล็อกข้อมูลสำหรับไฟล์นั้นจะถูกทำเครื่องหมายว่าว่างและโดยทั่วไปการอ้างอิงไปยังบล็อกข้อมูลเหล่านั้นจะหายไป ฉันเพิ่งค้นพบจากความเห็นของ @ fedorqui ว่าอาจมีวิธีเข้าถึงบล็อกเหล่านั้น แต่วิธีนี้ใช้ได้กับระบบไฟล์ ext3 เท่านั้น
วิธีหนึ่งในการเก็บรักษาไฟล์คือการเขียนฟังก์ชั่นที่จะช่วยให้คุณย้ายไฟล์ไปยังพื้นที่ถังขยะ (ให้เราพูด$HOME/.trash
) และกู้คืนไฟล์ที่ต้องการจากที่นั่น rm
ฟังก์ชั่นนี้สามารถนามแฝง คุณสามารถกำหนดเวลางาน cron เพื่อลบไฟล์ที่อยู่ในพื้นที่ถังขยะเป็นเวลาหลายวัน
การทำเช่นนี้อาจช่วยให้คุณไม่สะดวก
หากคุณเคยใช้ gedit เพื่อแก้ไขไฟล์นั้นโดยค่าเริ่มต้นสำเนาของไฟล์นั้นจะถูกสร้างขึ้น
ตัวอย่างเช่นสมมติว่าเราลบ 'myfile.txt' โดยไม่ตั้งใจ
ในโฟลเดอร์ที่ใช้เก็บไฟล์ที่คุณเพิ่งลบใช้คำสั่งเหล่านี้และคุณจะกู้คืนสำเนาจากที่นั่น:
ls | grep 'myfile.txt~'
ด้วยโชคเล็กน้อยคุณจะพบมันแล้ว:
cp 'myfile.txt~' 'myfile.txt'
ฉันกู้คืนไฟล์ได้แล้วตอนนี้โดยใช้วิธีนี้ ขอให้โชคดี!