Làm thế nào để khôi phục một tập tin bị xóa trong Linux?


65

Tình cờ, tôi đã sử dụng rmmột tập tin mà tôi không muốn xóa. Có cách nào để tôi có thể lấy lại trong Linux không?


@Nav, rmlà một lệnh UNIX / Linux "nguy hiểm" (đọc $ man rm). Sử dụng nó hết sức thận trọng . Như đã nói, đây là một cách nhanh chóng để xóa các tệp mà bạn chắc chắn. Các môi trường máy tính để bàn Linux và Unix hiện đại cung cấp giải pháp "Thùng rác" , vì vậy người dùng có thể dễ dàng khôi phục các tệp vô tình bị xóa.
Jose Elera

1
một số câu trả lời cập nhật hơn: unix.stackexchange.com/questions/122305/ Kẻ
Ben Crowell

Không sử dụng "rm" nếu bạn muốn khôi phục các tệp trong tương lai. Sử dụng tiện ích "rm-thùng rác" thay vào đó: github.com/nateshmbhat/rm-trash
Natesh bhat 20/11/18

Câu trả lời:


51

Sau đây là các bước chung để khôi phục tập tin văn bản.

  1. Đầu tiên sử dụng lệnh wall để thông báo cho người dùng rằng hệ thống đang hoạt động ở chế độ một người dùng:

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

    Nhấn CTRL + D để gửi tin nhắn.

  2. Tiếp theo sử dụng lệnh init 1 để đưa hệ thống sang một chế độ người dùng:

    # init 1
    
  3. Sử dụng grep (cách UNIX truyền thống) để khôi phục tệp

    Sử dụng cú pháp grep sau:

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

    HOẶC LÀ

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

    Ở đâu,

    -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.
    

    Để khôi phục tệp văn bản bắt đầu bằng từ "nixCraft" trên / dev / sda1, bạn có thể thử lệnh sau:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. Tiếp theo sử dụng vi để xem file.txt.

    Phương pháp này CHỈ hữu ích nếu tệp bị xóa là tệp văn bản. Nếu bạn đang sử dụng hệ thống tệp ext2, hãy thử lệnh recovery.

Tìm thấy tại http://www.cyberciti.biz/tips/linuxunix-recover-delatted-files.html


16
Đáng chú ý là bạn KHÔNG THỂ NÀO NÀY NHỚ Chế độ người dùng duy nhất tắt kết nối mạng
Quinma

1
Phương pháp này hoạt động kỳ diệu cho các tập tin văn bản, cảm ơn! Điều tôi thích ở đây là nó không dựa vào tạp chí của hệ thống tập tin (như extundelete), nhưng nó thực sự quét các byte thô của toàn bộ ổ đĩa. Nếu lệnh này không tìm thấy tệp của bạn, sẽ không có gì.
Benjamin B.

1
@Quinma, phương pháp này có thể hoạt động từ xa chỉ với những sửa đổi nhỏ ... Thay vì chạy init 1, hãy giết thủ công mọi trình nền hệ thống ngoại trừ sshd. Tôi cũng nghĩ rằng tại thời điểm này, bạn nên truy cập lại tất cả các hệ thống tệp RO và lưu vào tmpfs (giả sử các tệp tạm thời của bạn sẽ phù hợp với ram) để tránh ghi đè lên các tệp bằng dữ liệu tạm thời. Tất nhiên bạn sẽ phải sao chép nó ở nơi khác sau đó, hoặc đến một máy chủ từ xa hoặc quay lại hệ thống tập tin cục bộ sau khi kết nối lại chúng RW.
Thomas Guyot-Sionnest

your_partition là gì ??? Tôi có lỗi: / dev / sda1: Không có tệp hoặc thư mục như vậy
coolcool1994

1
@Qback, tôi thực sự không biết. Như đã nêu, tôi chỉ làm theo từng bước. Nhưng init 1 có nghĩa là cho các nhiệm vụ quản trị và có thể giết quá trình không liên quan đến kịch bản runlevel đó. Điều đó có thể giúp ngăn chặn ổ cứng được sử dụng, ghi đè lên tệp bạn đang cố khôi phục.
Gabriel L. Oliveira

13
  • Nếu nó rất quan trọng, hãy lấy đĩa từ máy tính và thuê một công ty làm việc đó cho bạn.
  • Nếu nó chỉ rất quan trọng, hãy gắn đĩa chỉ đọc, sao chép toàn bộ phân vùng vào một tệp bằng cách sử dụng ddvà cố gắng tìm tệp trong đó (sử dụng grephoặc trình chỉnh sửa).

Chỉnh sửa: đôi khi ddrescuehoạt động tốt hơn dd.


1
"cố gắng tìm tập tin trong đó" Tôi bối rối, làm thế nào một cách hợp lý để mở một tập tin 15+ GB và tìm kiếm hoặc đưa con thú này vào grep? Và bạn sẽ làm gì khi tìm thấy văn bản? Làm thế nào trên trái đất là sự phục hồi này?
TheLQ

1
Điều đầu tiên cần làm là thử một số công cụ phổ biến trước khi đốt rất nhiều tiền mặt cho một kết quả không chắc chắn. BTW, grep sẽ không thực sự giúp đỡ, photorec hoặc ext3grep sẽ.
wazoox



5
  • Câu trả lời đúng duy nhất là: khôi phục tệp của bạn từ bản sao lưu. Mọi người phải có một bản sao lưu. Đối với các tệp thực sự quan trọng, bạn nên có hai bản sao lưu. Bạn không Chà, quá tệ, đây là một bài học kinh nghiệm gần như mọi người khác).

  • OK, bạn không có bản sao lưu. bạn phải ngừng sử dụng hệ thống tập tin chứa tệp NGAY BÂY GIỜ . Bất kỳ hoạt động ghi nào chắc chắn có thể vòi dữ liệu tệp có thể (chỉ có thể ) vẫn còn trên đĩa.

  • nếu bạn mắc lỗi bi thảm khi chỉ sử dụng một phân vùng là cả hệ thống tập tin gốc và / home, điều đó có nghĩa là bạn phải khởi động từ một số thiết bị khác. BÂY GIỜ .

  • Nếu tệp của bạn có một số định dạng phổ biến (tệp Word, JPG, v.v.), hãy sử dụng Photorec . Photorec có thể lấy các định dạng tệp phổ biến nhất.

  • Bạn có thể thử phương pháp "ext3 undelete" được đề xuất trước đây, nhưng bạn cần phải thoải mái với dòng lệnh, hiểu các hoạt động bên trong linux cơ bản, v.v.

  • Nếu tập tin của bạn có một số định dạng đặc biệt, may mắn khó khăn. Tôi đã từng viết một chương trình Perl để quét một ổ đĩa cho một số tệp đặc biệt và nó hoạt động khá tốt; nhưng bạn sẽ cần biết một số chương trình để làm điều đó và cũng khá thoải mái với linux.


5

Tôi đã làm điều này một vài năm trước đây. Cách tiếp cận của tôi là trực tiếp, không mất thời gian, ngắt kết nối phân vùng và sau đó

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

để có một tập tin sao lưu trạng thái chính xác của phân vùng. Sau đó, bạn có thể gắn lại phân vùng và tiếp tục kinh doanh như bình thường khi bạn tìm kiếm tệp đã xóa trong hình ảnh đã tạo của mình. Hình ảnh có thể sẽ RẤT lớn vì bạn cần tất cả không gian "trống", vì vậy đây có thể là một vấn đề thực tế để lưu trữ nó.

Sau đó, nó chỉ là để thực hiện các tìm kiếm nhàm chán sau đoạn văn bản mà tôi dự kiến ​​sẽ ở đâu đó trong nội dung phân vùng. Ví dụ: để tìm tập tin .tex, tôi đã chạy

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

trong đó in một bối cảnh lớn xung quanh cụm từ "tiểu mục" và lưu kết quả đầu ra vào một tệp để tìm kiếm thủ công. Tôi đã in một bối cảnh lớn như vậy vì phải mất một thời gian dài để tìm kiếm hình ảnh mà tôi không muốn làm điều đó nhiều lần hơn tôi phải làm.

Ngoài ra lệnh stringsnày rất hữu ích trong việc loại bỏ rác nhị phân khỏi đầu ra, nhưng nếu tôi nhớ lại chính xác thì nó cũng bị tước tất cả các dòng mới, đây có thể là một vấn đề.

Để tìm các tệp nhị phân theo cùng một cách, người ta có thể thành công trong việc tìm một tiêu đề đặc trưng hoặc một cái gì đó của một tệp nhất định, nhưng tôi tưởng tượng nó là một cuộc phiêu lưu khá lớn.


Ghi chú kỹ thuật ngắn gọn: có những khó khăn kỹ thuật với việc khôi phục đĩa và Ext3 / 4. Đó là một điều dài để giải thích, nhưng ngắn gọn (và không đầy đủ): Ext3 / 4 loại bỏ các "điểm đánh dấu" cho HĐH biết nơi các tệp được đặt trên đĩa khi bạn xóa chúng. Các tập tin không được lọc, nhưng không ai biết chúng bắt đầu và kết thúc ở đâu trên đĩa, và đôi khi chúng thậm chí bị phân mảnh ở một vài nơi. Một số hệ thống tệp khác chỉ đặt trạng thái của tệp thành "đã xóa", nhưng vẫn giữ dữ liệu vị trí. Sau đó, phục hồi không khó hơn là xem các con trỏ tệp bằng cờ này (chúng vẫn có sẵn nếu không có quá nhiều hoạt động xảy ra), và sau đó hy vọng nội dung của chúng không bị ghi đè.

Điều gì là tốt nhất? Hùng biện, theo quan điểm của tôi. Sao lưu thường xuyên là câu trả lời cho tất cả những vấn đề này. Dữ liệu quan trọng không có hệ thống sao lưu tự động là một tai nạn đang chờ xảy ra, IMHO.


Giai thoại cá nhân bắt buộc: Tôi sẽ xóa foo\ foo*khỏi ~. tôi đã viết

rm -r foo<Tab>*

, thật đáng buồn, vì foorõ ràng là một liên kết tượng trưng và tệp duy nhất khớp với điều này, vỏ được tạo thành

rm -r foo\ foo *

Tôi nhấn Enter và ngồi đó nhìn vào lệnh, lẽ ra phải mất một giây. Sau một thời gian dài rmhỏi tôi có muốn "xóa tệp được bảo vệ chống ghi" cái gì đó "". Khá nhanh tôi cảm thấy ớn lạnh và nhẹ nhàng và rất kiểm soát tôi đã nhấn Ctrl+c. ~ Một nửa của tôi ~đã bị xóa, nhưng tôi đã xoay sở để lấy lại mọi thứ có giá trị thông qua việc grepping được mô tả ở trên và một số bản sao lưu hiện tại ít nhiều. Tôi đã có một số cá nhân rất có giá trị (đọc: tốn thời gian) và dữ liệu đo lường gần đây trên đĩa bị mất, nhưng tôi đã thực hiện sao lưu bốn lần. Một người biến mất ở đây, một người khác do mất hệ thống ở trường, một người khác bị hỏng và lúc đầu tôi không thể tìm thấy người thứ tư, vì tôi đã nhầm lẫn đã đặt nó vào thư mục sai :-D. Đã khôngrm -rđã bị kẹt trên một tập tin được bảo vệ chống ghi, cái thứ tư sẽ bị ăn vì thư mục đó được gắn thông qua sshfs trong tôi ~. Tôi cẩn thận hơn rất nhiều về những thứ đó.


5

Nếu đó là rm tiêu chuẩn , tôi hy vọng bạn có một bản sao lưu. Quy trình khôi phục một tệp đã xóa sẽ khác nhau đối với từng hệ thống tệp, nếu nó hoàn toàn có thể được thực hiện. Linux không có "thùng rác" tích hợp; một khi bạn xóa một tập tin, tất cả sẽ biến mất.

Bất cứ cách nào bạn làm điều đó, bạn sẽ muốn rút phích cắm máy tính - càng sớm càng tốt, vì việc tiếp tục chạy máy tính (thậm chí để tắt máy) gây ra việc ghi vào đĩa và làm tăng khả năng một số khối trước đây bị chiếm đóng tập tin sẽ được ghi đè. Khi bạn đã thực hiện điều đó, hãy đặt nó vào một máy tính khác, khởi động lại đĩa CD trực tiếp (đảm bảo không gắn ổ đĩa trừ khi bạn gắn nó ở chế độ chỉ đọc) hoặc tháo ổ cứng và đưa đến chuyên gia khôi phục dữ liệu.


4

Đặt kỳ vọng của bạn thấp. Nếu bất cứ điều gì được ghi trên dữ liệu 'đã xóa, bạn sẽ mất nó.

Tôi đã thực hiện một số lượng nhỏ phục hồi và các công cụ tốt nhất tôi tìm thấy thường được thiết kế theo các định dạng nhất định. Ví dụ: 'photorec' thật tuyệt vời khi tôi muốn phục hồi hàng chục ngàn jpeg.

Recuva cũng đã giúp tôi trước đây và có thể là sự lựa chọn tốt nhất của bạn. (Miễn phí, không bị lừa khi trả tiền bởi quảng cáo của họ)

Vào cuối ngày, nếu những gì bạn mất là quan trọng, hãy lái xe ngoại tuyến và ngừng viết thư cho nó. Sử dụng mọi phần mềm khôi phục bạn có thể tìm thấy cho đến khi bạn lấy lại được dữ liệu của mình hoặc nó không còn giá trị nữa. Nếu nó thực sự quan trọng, hãy gửi nó cho các chuyên gia với giá cao.

Nếu trước đây bạn đã gặp may mắn với một công cụ, hãy thử lại xem bạn đã quen với nó. Vào cuối ngày, họ không nên ghi vào đĩa và vì vậy bạn có thể sử dụng phần mềm cho đến khi bạn tìm thấy phần mềm hoạt động.


2

Đây là một tài liệu tuyệt vời cho bạn. Bạn sẽ tìm thấy một tải các lời khuyên thực tế ở đó.

BTW, có hai nhóm người:

  1. những người làm bản sao lưu
  2. những người sẽ làm bản sao lưu

Xin chúc mừng, bạn vừa thăng hạng cho nhóm 2. ;-)


2

Nếu bạn mở một ứng dụng hiện đang đọc tệp, chẳng hạn như VLC hoặc LibreOffice, thì câu trả lời L & U.SO tuyệt vời này đã giúp tôi thoát khỏi mớ hỗn độn này. Đây là một phương pháp thay thế để làm tương tự.

Ý tưởng chung là tìm liên kết trong /proc/PID/fd/DESCRIPTOR_NUMBERvà sao chép nó trở lại vị trí ban đầu. Sử dụng ps aux | grep APP_NAMEđể tìm PID và sau đó ls -la /proc/PID/fd/để tìm DESCRIPTOR_NUMBER thích hợp.


1

Câu trả lời "đúng" là giả sử không có phương pháp nào để phục hồi đáng tin cậy, và thay vào đó khôi phục từ bản sao lưu hoặc hệ thống nhân bản hoặc cài đặt lại.

TestDisk là một công cụ tuyệt vời và có nhiều cách khác để có thể cứu một số dữ liệu từ ổ đĩa vật lý tùy thuộc vào hệ thống tệp và thời gian xóa, nhưng thời gian và nỗi đau có thể quá lớn, vì vậy KEEP BACKUPS (và cũng kiểm tra rằng họ là hợp lệ và đáng nhớ)!


1

Nếu nó không bị ghi đè bởi người dùng khác, thì bạn thật may mắn. Tôi đã vô tình xóa tệp nguồn cpp của mình và sử dụng một công cụ được gọi là đầu tiên , giúp tôi khôi phục các mảnh vỡ cpp 60G từ đĩa. Cuối cùng, tôi đã phục hồi tập tin của mình bằng cách lắp ráp các mảnh vỡ đó từng mảnh. Tôi nghĩ rằng nó quét mẫu nhất định cho loại tệp cụ thể và duyệt qua tất cả các nút trên đĩa để khôi phục tệp! Chỉ cần có một thử!


0

Nếu vô tình bạn đã xóa tệp khỏi Linux thì bạn có thể sử dụng lệnh này:

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

thay cho search textbạn có thể đặt tên tệp và có thể chỉ định thư mục nơi bạn muốn khôi phục thay thế /home.


2
Chào Santosh. Vui lòng không thêm các liên kết sai lệch vào bài viết của bạn. Nó đã được gỡ bỏ.
ᔕᖺᘎᕊ

0

Bạn có thể thử kịch bản này. Hoạt động độc đáo và có nghĩa là được sử dụng thay thế cho rm và tôi đang sử dụng nó rộng rãi ngay bây giờ.

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

Đặc trưng :

  • có nghĩa là được sử dụng thay cho rm
  • xử lý tất cả các đối số mà rm có thể mất
  • xử lý các xung đột tên tệp với các tệp đã có trong thùng rác
  • tự động xử lý một số vấn đề về quyền
  • nếu rm được gọi từ bất kỳ tập lệnh nào khác hoặc gián tiếp thì lệnh 'rm' của hệ thống được sử dụng tự động
  • hiển thị các thông báo lỗi thích hợp như những thông báo phát sinh trong rm

-2

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. Sintax rất dễ dàng:

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.