Làm cách nào để khôi phục tệp đã mở nhưng đã xóa trên Linux bằng ln thay vì cp?


8

Tôi có một tệp đang tải xuống (từ một nguồn khó tải xuống lại), nhưng vô tình bị xóa khỏi không gian tên hệ thống tệp (/ tmp / blah) và tôi muốn khôi phục tệp này.

Thông thường tôi chỉ có thể cp /proc/$PID/fd/$FD /tmp/blah, nhưng trong trường hợp này sẽ chỉ cho tôi một ảnh chụp nhanh một phần, vì tệp vẫn đang tải xuống. Hơn nữa, khi quá trình tải xuống hoàn tất, quá trình tải xuống (ví dụ Chrome) sẽ đóng FD.

Bất kỳ cách nào để phục hồi bằng inode / tạo một liên kết cứng? Bất kỳ giải pháp nào khác? Nếu nó làm cho bất kỳ sự khác biệt, tôi chủ yếu quan tâm đến ext4.

Câu trả lời:


11

Hãy thử sử dụng đuôi để sao chép tệp liên tục:

tail -c +0 -f /proc/$pid/fd/$fd > filename

Tất nhiên, bạn sẽ phải dừng quá trình đuôi bằng tay (hoặc một số phương tiện bên ngoài khác) khi quá trình tải xuống kết thúc.


Hoạt động như một lá bùa. Tôi đoán điều này dễ hơn nhiều so với tôi nghĩ, vì tất cả những gì bạn cần thực sự chỉ là một chương trình khác mở cùng một tệp để giữ nó xung quanh.
Yang

4

Các fdlink dự án, bao gồm một mô-đun hạt nhân Linux và ứng dụng đơn giản, ngụ ý để tạo ra một liên kết mới cho một bộ mô tả tập tin mở. Tôi đã không thử nó.


1

Điều này sẽ hoàn thành công việc, mặc dù không thông qua việc khôi phục nút:

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

Hoặc chỉ dừng thủ công tải xuống trong Chrome nếu bạn không muốn tắt toàn bộ trình duyệt.


Nếu chỉ có vấn đề đơn giản đến mức tôi có thể tiếp tục- / tải lại! Tôi đã làm rõ câu hỏi để chỉ ra rằng tôi không thể cho rằng mình có thể tải xuống lại.
Yang

Nghe có vẻ rắc rối :-) Dường như mọi vụ hack dựa trên inode đều ở mức độ quá thấp và đặc thù cho hệ thống tập tin.
Pavel

Vâng, tôi cũng đã thêm điều này vào câu hỏi của mình: nếu nó có bất kỳ sự khác biệt nào, tôi chủ yếu quan tâm đến ext4.
Dương

1

Nếu bạn muốn thực hiện một liên kết cứng về điều này, bạn phải sử dụng tùy chọn -s (xem man ln) để trong thư mục fd chạy ls -fvà tìm ra số filenumber (chủ yếu là các số có hai chữ số) và tạo mộtln NUMBER destination-file -s

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.