Có một lệnh để phục hồi / phục hồi các tập tin bị xóa bằng cách rm
?
$ rm -rf /path/to/myfile
Làm thế nào tôi có thể phục hồi myfile
? Nếu có một công cụ như vậy làm thế nào tôi có thể sử dụng nó?
Có một lệnh để phục hồi / phục hồi các tập tin bị xóa bằng cách rm
?
$ rm -rf /path/to/myfile
Làm thế nào tôi có thể phục hồi myfile
? Nếu có một công cụ như vậy làm thế nào tôi có thể sử dụng nó?
Câu trả lời:
Liên kết ai đó được cung cấp trong các ý kiến có thể là cơ hội tốt nhất của bạn.
Linux gỡ lỗi Hack: Phục hồi tập tin
Việc viết lên mặc dù trông hơi đáng sợ nhưng thực sự khá dễ dàng để làm theo. Nói chung các bước như sau:
Sử dụng debugfs để xem nhật ký hệ thống tập tin
$ debugfs -w /dev/mapper/wks01-root
Tại dấu nhắc gỡ lỗi
debugfs: lsdel
Sản lượng mẫu
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.
Chạy lệnh trong debugfs
debugfs: logdump -i <7536655>
Xác định tập tin 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.
Với thông tin inode trên, chạy các lệnh sau
# 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
Tập tin đã được phục hồi recovered.file.001
.
Nếu những điều trên không dành cho bạn, tôi đã sử dụng các công cụ như photorec
để khôi phục các tệp trong quá khứ, nhưng nó chỉ dành cho các tệp hình ảnh. Tôi đã viết về phương pháp này rộng rãi trên blog của mình trong bài viết này có tiêu đề:
debugfs -w /dev/sdb2
nhưng lsdel
sais:0 deleted inodes found.
extundelete
dễ dàng hơn cho ext3 / 4 và có thể sẽ dẫn đến kết quả tương tự.
/dev/mapper/wks01-root: No such file or directory while opening filesystem
Bạn đã lấy cái này /dev/mapper/wks01-root
từ đâu?
Với một chút cơ hội, đôi khi tôi có thể khôi phục các tệp đã bị xóa bằng tập lệnh này hoặc giải pháp tiếp theo trong câu trả lời:
#!/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
Có một mẹo hữu ích: nếu bạn biết một mô hình trong các tập tin đã xóa của bạn, loại alt+ sys+ resuokhởi động lại + remount trong read-only, sau đó với một live-cd, sử dụng grep
để tìm kiếm trong các ổ đĩa cứng:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
sau đó chỉnh sửa /tmp/recover
để chỉ giữ lại (các) tệp của bạn trước đó.
Này, nếu với triết lý unix tất cả là các tập tin, đã đến lúc tận dụng lợi thế này, phải không?
grep
Giải pháp dựa trên của bạn rất thông minh và hiệu quả với tôi, ngay cả với hệ thống tệp vẫn được gắn. Cảm ơn!
grep -av "[^[:print:]]"
grep
giải pháp làm việc cho tôi với một sự sửa đổi: Tôi đã làm sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
và có hiệu số byte (như 123123123:line\n456456456:another\n...
), sau đó đã làm n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
và n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
có khác nhau n
giá trị.
Những gì làm việc cho tôi đã được đưa ra bởi vòm (chỉ áp dụng cho các tệp văn bản):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
nơi /dev/sdXN
là phân vùng chứa file bị mất (kiểm tra với mount
nếu không chắc chắn).
Mất một lúc, nhưng đã hoạt động khi tôi vô tình xóa một số mã nguồn mà tôi chưa cam kết!
rm data/*.json python myFile.py
thay vìrm data/*.json && python myFile.py
/dev/sdXN
là cho hệ thống tập tin, phải không? Tôi tìm thấy của tôi vớidf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
Mặc dù Câu hỏi này đã được giải quyết và một vài năm tuổi, tôi muốn đề cập đến tiện ích testdisk .
Làm thế nào để phục hồi các tập tin với testdisk được giải thích tốt trong hướng dẫn này . Để khôi phục tập tin chạy testdisk /dev/sdX
và chọn loại bảng phân vùng của bạn. Sau này, chọn [ Advanced ] Filesystem Utils
, sau đó chọn phân vùng của bạn và chọn [Undelete]
. Bây giờ bạn có thể duyệt và chọn các tệp đã xóa và sao chép chúng sang một vị trí khác trong hệ thống tệp của bạn.
Tôi đã có cùng một vấn đề vào tuần trước và tôi đã thử rất nhiều chương trình, như debugfs, photorec, ext3grep và extundelete. ext3grep là chương trình tốt nhất để khôi phục tập tin. Cú pháp rất dễ:
ext3grep image.img --restore-all
hoặc là:
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’
Video này là một hướng dẫn nhỏ có thể giúp bạn.
Một sự thay thế có thể được sử dụng del
thay vì rm
xóa:
http://fex.belwue.de/fstools/del.html
del
có chức năng phục hồi và hoạt động với bất kỳ hệ thống tập tin nào.
Tất nhiên đó không phải là một giải pháp nếu bạn đã xóa các tệp của mình với "không có tù nhân" rm: -}
del
lệnh.
kết nối ổ đĩa thông qua giao diện bên ngoài
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Xem liên kết này để biết thêm thông tin: phục hồi một tập tin vừa bị xóa trên ext4 với extundelete .
Công cụ khôi phục - Dòng lệnh:
Công cụ khôi phục - Gui:
Thông tin liên lạc
Theo kinh nghiệm cá nhân của tôi, tôi lấy lại dữ liệu của mình bằng cách sử dụng ufs-explorer và photorec
(1) = Không phải nguồn mở, không miễn phí
(2) = Không phải nguồn mở, miễn phí
(3) = Nguồn mở và miễn phí
(4) = Có hỗ trợ ntfs
(5) = Có tính năng cấu trúc thư mục
Tôi không đồng ý rằng điều đó là không thể, chỉ là rất rất khó khăn và tôi chưa bao giờ làm điều đó với Linux:
Khi các tập tin bị xóa, chúng không thực sự bị xóa. Điều xảy ra là không gian mà chúng nằm trên ổ cứng là loại thiết lập lại, do đó, nếu máy tính cố gắng ghi dữ liệu ở đó, không có gì phàn nàn. Nói chung, dữ liệu trên ổ cứng mà bạn nghĩ bạn đã xóa có thể ở đó gần một năm sau. Hoặc ít nhất, đây là kinh nghiệm của tôi trên máy Windows. Dù nó có hoạt động theo cách tương tự từ một dòng lệnh trên Linux hay không, tôi không chắc, nhưng bạn có thể cần một đĩa CD riêng để mở phân vùng như vậy và cũng không có gì đảm bảo các tệp vẫn ở đó. Tôi đã thực hiện điều này trên windows xp nhiều lần bằng cách sử dụng Zero Asscharge Recovery. Tôi chắc chắn có một công cụ tương tự xung quanh nếu bạn nhìn đủ cứng.
Khi bạn xóa một tệp, số lượng liên kết trong bảng inode cho tệp đó sẽ giảm đi một. Trong Unix, khi số lượng liên kết giảm xuống 0, các khối dữ liệu cho tệp đó được đánh dấu là miễn phí và thông thường, các tham chiếu đến các khối dữ liệu đó sẽ bị mất. Tôi vừa phát hiện từ nhận xét của @ fedorqui rằng có thể có một số cách để truy cập các khối đó nhưng điều đó chỉ áp dụng cho hệ thống tập tin ext3.
Một cách để bảo quản các tệp sẽ là viết một hàm cho phép bạn di chuyển các tệp vào vùng rác (giả sử chúng tôi nói $HOME/.trash
) và khôi phục các tệp cần thiết từ đó. Chức năng này có thể được đặt bí danh rm
. Bạn có thể lên lịch cho một công việc định kỳ để xóa các tệp đã ở trong khu vực rác trong một số ngày nhất định.
Điều này có thể cứu rắc rối cho một số bạn.
Nếu bạn đã từng sử dụng gedit để chỉnh sửa tệp đó, theo mặc định, một bản sao của tệp đó sẽ được tạo.
Ví dụ: giả sử chúng tôi đã vô tình xóa 'myfile.txt'.
Trong thư mục được sử dụng để chứa tệp bạn vừa xóa, hãy sử dụng các lệnh này và bạn sẽ khôi phục bản sao từ đó:
ls | grep 'myfile.txt~'
Với một chút may mắn, bạn sẽ tìm thấy nó và sau đó:
cp 'myfile.txt~' 'myfile.txt'
Tôi đã khôi phục một tệp chỉ bằng phương pháp này. May mắn nhất!