Đầu tiên, một lời thú nhận: không, tôi đã không thực hiện các bản sao lưu mà tôi nên có.
Thứ hai, tình hình:
Tôi có một Dell XPS 9550 với một đĩa trạng thái rắn chạy Fedora 25 .
Tôi đang làm việc trên một tệp và cố gắng lưu nó khi tôi được thông báo rằng tôi đang cố lưu vào hệ thống tệp chỉ đọc . Hóa ra hệ thống tập tin của tôi hiện chỉ đọc và có lỗi i / o ở khắp mọi nơi.
Tôi đã có thể lưu một số tệp bằng cách gửi email cho chính mình thông qua trình duyệt web mở, nhưng nó đã bị sập và tôi không thể khởi chạy lại. Nhưng tôi vẫn có các tệp quan tâm mở trong một trình soạn thảo. Tôi dường như không thể lưu các tập tin ở bất cứ đâu, nhưng tôi có thể sao chép nội dung của chúng. Nếu chỉ tôi có thể tìm cách để hoàn thành nội dung tệp, tôi có thể tiết kiệm cho mình hàng tháng làm việc.
Nhưng có một số hạn chế khủng khiếp. Tôi đã cố gắng chèn một ổ đĩa USB, nhưng không có thiết bị nào xuất hiện để đại diện cho nó và mount
lệnh chết với một segfault. Tôi có thể cố gắng ssh sang máy tính khác, nhưng tôi bị "lỗi bus" và nó chết. ping
, dmesg
, ifconfig
, Không ai trong số những công việc. Nhưng tôi có vim
và less
và ls
và có thể đẻ trứng mới bash
trường.
Không lynx
, không firefox
, không google-chrome
. Không có ổ đĩa DVD.
Về cơ bản có vẻ như SSD của tôi đã chết. Hoặc có thể là toàn bộ bo mạch chủ. Tôi có các tài liệu có giá trị lớn vẫn còn trong bộ nhớ, tôi có địa chỉ IP và kết nối mạng, tôi có thể chạy một vài lệnh ngẫu nhiên và có thêm 3500 trên con đường mà tôi có thể thử.
cat
và gcc
dường như làm việc Tôi có thể ghi vào tập tin trong / tmp. Tôi có một ipython
ví dụ đang chạy mà dường như vẫn hoạt động.
Vì vậy, ... những gì tôi đã cố gắng cho đến nay đã thất bại. Nhưng tôi cảm thấy như vẫn còn một ngàn khả năng. Tôi không cân nhắc điều gì? Làm thế nào tôi có thể lấy những tập tin này ra khỏi máy tính đang hấp hối của tôi?
Chắc chắn phải có cách.
CẬP NHẬT : Công cụ mới:
- Tôi bị mất kết nối mạng do sự ngu ngốc của chính mình.
- Tôi đã viết một kịch bản Python để thay thế
cp
vàcp -r
- Trừ khi tôi tìm cách nào đó để tạo một
/dev
mục nhập cho thẻ SD hoặc cho các ổ USB, thì các cược tốt nhất của tôi để lấy dữ liệu dường như là màn hình và có thể là loa / cáp âm thanh. - Tôi đang viết một tập lệnh để thử đọc các tập tin và xuất ra tập tin nào có thể đọc được.
Gợi ý vẫn rất hoan nghênh!
CẬP NHẬT 2 : Công cụ mới hơn:
- Trên máy tính sắp chết, tôi đã viết một tập lệnh Python sẽ đọc từng tệp một và cố gắng truyền đạt các bit đó bằng cách nhấp nháy màn hình màu này hay màu khác. Ngay bây giờ, nó đang cố gắng thực hiện mã hai bit trong đó tất cả các màu đỏ, lục, lam và trắng đại diện cho một cặp hai bit. Tuy nhiên, điều này không hoạt động tốt, vì vậy tôi có thể chỉ cần chuyển sang hai màu và làm từng chút một.
- Trên máy tính xách tay khác của tôi (Thinkpad cũ đáng tin cậy mà tôi đã từ bỏ cho XPS mới nóng hổi này) Tôi đã viết một tập lệnh đọc từ webcam bằng thư viện OpenCV Python. Ý tưởng là để nó giải mã các mã được gửi bởi máy tính khác. Vấn đề là tốc độ khung hình từ máy ảnh là 15 khung hình mỗi giây, điều đó có nghĩa là nếu tôi chuyển hoàn hảo, không có lỗi, tốc độ dữ liệu tối đa của tôi sẽ là 30 bit mỗi giây, tức là 225 byte mỗi giây. Đó là 324k mỗi ngày.
- Trên XPS sắp chết, tôi có thể sử dụng
tar
để đóng gói các tệp mong muốn vào một kho lưu trữ duy nhất, đó là 1,7 MB. Thật không may,gzip
,bzip2
,xz
,lzop
và bất cứ điều gì nén tiện ích không có sẵn. NHƯNG sử dụngzlib
mô-đun của Python Tôi có thể nén tệp này xuống còn 820KB. Với kích thước đó, tôi có thể nhận được thứ này được gửi trong một vài ngày. - Vì phương thức chuyển này có thể sẽ rất dễ bị lỗi, tôi sẽ triển khai mã Hamming trên XPS để thêm một số sửa lỗi khi tôi truyền dữ liệu.
- Có khả năng sẽ có các biến chứng vì đó là những gì xảy ra, nhưng ít nhất có vẻ khả thi để lấy dữ liệu này ra!
- Vì đây vẫn là một cách khá khó để gửi dữ liệu, tôi đã tìm hiểu thêm về trình điều khiển nối tiếp USB. Các module Tôi đã cố gắng để tải (
usb-serial-simple
,usb-debug
,safe-serial
) cho I / O lỗi. Tôi cũng không nghĩ rằng nó được tích hợp vào kernel, bởi vì không có thiết bị / dev / ttyUSB * nào hiện diện.
Cảm ơn những lời đề nghị của mọi người cho đến nay --- Tôi biết đây thậm chí không phải là một câu hỏi được xác định rõ vì các bạn không biết trước chương trình / tập tin nào có thể đọc được hay không. Vẫn mở để đề xuất tốt hơn so với phương pháp video này!
CẬP NHẬT 3 : Công cụ mới nhất
- Tôi đã nhận được một webcam PS3 Eye và sau khi vô hiệu hóa mức tăng và phơi sáng tự động của nó, tôi đã đọc thành công dữ liệu của XPS, mặc dù ở mức 1 byte mỗi giây. Đây là một thành công lớn --- dữ liệu đầu tiên được hoàn thành! Nhưng tốc độ quá chậm để đưa 820KB của tôi ra trong bất kỳ loại thời gian hợp lý nào và tỷ lệ lỗi quá cao.
- Vấn đề là viết vào thiết bị đầu cuối quá chậm. Các cập nhật màn hình không giống bất cứ thứ gì như tức thời, cảm ơn (tôi nghĩ) về sự chậm chạp của
urxvt
trình giả lập thiết bị đầu cuối mà tôi có quyền truy cập. - Tôi phát hiện ra rằng tôi có quyền truy cập vào trình biên dịch Rust trên XPS. Tôi viết lại tập lệnh truyền bằng cách sử dụng Rust để xem liệu điều đó có cải thiện tốc độ làm mới thiết bị đầu cuối hay không, nhưng nó không giúp ích gì.
- Vì tôi không thể tăng tốc độ khung hình, tôi sẽ phải cố gắng tăng lượng dữ liệu tôi nhận được trên mỗi khung. Cách tiếp cận hiện tại của tôi trông giống như thế này:
Nửa bên phải vẫn là tín hiệu đồng hồ, bật và tắt để đánh dấu sự xuất hiện của các khung mới. Nhưng bên trái bây giờ là một lưới trong đó mỗi ô được đánh dấu bằng một hình vuông màu đỏ ở góc, và sau đó ô màu xanh lá cây ở bên phải và xuống từ hình vuông màu đỏ được bật và tắt để chỉ ra một chút. Các ô vuông màu đỏ sẽ cho phép máy tính nhận hiệu chỉnh vị trí của các ô. Tôi chưa có dữ liệu nào theo cách này, nhưng đó là những gì tôi đang làm.
- Có người đề nghị tôi xem xét việc viết mã QR thay vì các mẫu màu ad hoc này. Tôi cũng sẽ xem xét điều đó, và có lẽ thực hiện điều đó thay vì cách tiếp cận lưới này. Việc sửa lỗi sẽ là một chiến thắng tốt đẹp, cũng như có thể sử dụng các thư viện tiêu chuẩn để giải mã.
- Tôi đã học được rằng tôi có quyền truy cập vào libasound (thư viện âm thanh ALSA), nhưng không truy cập vào các tệp tiêu đề được liên kết với nó (
alsa/asoundlib.h
hoặc bất cứ điều gì). Nếu bất cứ ai biết cách sử dụng thư viện dùng chung mà không cần tiêu đề hoặc có thể giúp tôi viết tiêu đề phù hợp để cho phép tôi tạo đầu ra âm thanh, thì tôi có thể có cách lấy các tệp dựa trên âm thanh. - Thay phiên, nếu ai đó có thể giúp tôi thao tác với các thiết bị USB mà không cần truy cập libusb thì có lẽ tôi có thể làm gì đó với điều đó?
Tiến về phía trước!
CẬP NHẬT 4 : đầu ra âm thanh được sản xuất!
Người dùng Francesco Noferi đã thực hiện một số công việc tuyệt vời giúp tôi sử dụng thư viện ALSA được đề cập trong bản cập nhật trước. Trình biên dịch C có vấn đề, nhưng sử dụng trình biên dịch Rust, tôi có thể sử dụng FFI để gọi trực tiếp vào libasound
. Bây giờ tôi đã phát một loạt dữ liệu của mình qua âm thanh và nó nghe như âm nhạc đến tai tôi! Vẫn cần phải thiết lập một kênh liên lạc thực sự, nhưng tôi cảm thấy rất hy vọng. Tại thời điểm này, công việc của tôi về cơ bản là triển khai một modem, vì vậy nếu có ai có bất kỳ hướng dẫn nào về những cách tốt để làm điều đó thì tôi đều nghe thấy. Điều chế lý tưởng là dễ dàng thực hiện bằng tay và giải điều chế mà có thư viện hiện có mà tôi có thể sử dụng. Vì điều này có thể đi trực tiếp qua cáp âm thanh và không qua mạng điện thoại, theo lý thuyết chúng tôi có thể làm tốt hơn 56kb / giây hoặc bất cứ tiêu chuẩn nào đã trở lại trong ngày, nhưng trong thực tế, ai biết chúng tôi sẽ nhận được gì.
Cảm ơn tất cả mọi người theo dõi tại đây và tại / r / techsupportmacgyver và at / r / Rust đóng góp rất nhiều đề xuất tuyệt vời. Sẽ sớm triển khai "modem" này và sau đó tôi sẽ hoàn thành việc này với một đoạn kết. Tôi nghĩ rằng tôi có thể đặt mã của mình lên một nơi nào đó để những người tuyệt vọng khác sử dụng trong tương lai --- thậm chí có thể là một kho chứa các công cụ lọc kỳ lạ dễ dàng nhập vào một cỗ máy sắp chết? Chúng ta sẽ xem chuyện gì xảy ra.
CẬP NHẬT 5 : Tôi đã mất một thời gian dài vật lộn với ALSA và thiết bị thu âm thanh StarTech USB giá rẻ của tôi (không có dòng tích hợp trên máy tính xách tay nhận), và nhiều sai lầm bắt đầu cố gắng cuộn giao thức truyền của riêng tôi, nhưng cuối cùng theo lời khuyên của một số người Những người bạn đam mê radio của tôi Tôi đã triển khai giao thức đường dây RTTY chạy ở tốc độ 150 baud, trong thực tế, nó mang lại cho tôi khoảng 10 byte mỗi giây. Nó không phải là siêu nhanh nhưng nó khá đáng tin cậy. Và tôi gần như đã hoàn tất việc chuyển tệp 820KB của mình, được xác minh bằng tổng kiểm tra CRC32 (sử dụng chức năng crc32 từ Python'szlib
mô-đun, mà tôi có quyền truy cập). Vì vậy, tôi đang tuyên bố chiến thắng, và muốn cảm ơn tôi một lần nữa! Tôi sẽ dành thêm thời gian để tìm thêm các tệp có thể đọc được và tôi có thể chuyển, nhưng nền tảng đã sẵn sàng. Thật vui khi được làm việc với tất cả các bạn!
CẬP NHẬT CUỐI CÙNG :
Trên máy nhuộm:
$ tar cf ./files
$ ./checksum.py ./files.tar 9999999
Part 1 checksum: -1459633665
$ ./zlib_compress.py ./files.tar
$ ./checksum.py ./files.tar.z 9999999
Part 1 checksum: -378365928
$ ./transmit_rust/target/debug/transmit ./files.tar.z
Transmitting files.tar.gz over audio using RTTY
Period size: 2048
Sample rate: 44100
Samples per bit: 294
Sending start signal.
Transmitting data.
nread: 2048
nread: 2048
...
nread: 2048
nread: 208
Transmission complete. Sending hold signal.
Trên máy cứu hộ:
$ minimodem --rx -8 --rx-one -R 44100 -S 915 -M 1085 --startbits 3
--stopbits 2 --alsa=1 150 -q > ./files.tar.z
$ ./checksum.py ./files.tar.z
Part 1 checksum: -378365928
$ ./zlib_decompress.py ./files.tar.z
$ ./checksum.py ./files.tar
Part 1 checksum: -1459633665
:-)
python -m SimpleHTTPServer
. Bây giờ bạn đang chia sẻ các tệp thông qua một máy chủ http trong cổng 8000 . Mở trình duyệt trong thiết bị khác trong cùng mạng và nhập thông tin sau: http://<IP address>:8000
và bắt đầu tải xuống mọi thứ bạn có thể.