Pertama, sebuah pengakuan: tidak, saya tidak melakukan backup yang seharusnya saya miliki.
Kedua, situasinya:
Saya memiliki Dell XPS 9550 dengan disk solid state yang menjalankan Fedora 25 .
Saya sedang mengerjakan file dan mencoba untuk menyimpannya ketika saya diberitahu bahwa saya mencoba menyimpan ke sistem file read-only . Ternyata sistem file saya hanya-baca sekarang dan ada kesalahan i / o di semua tempat.
Saya dapat menyimpan beberapa file dengan mengirim email kepada saya melalui browser web terbuka, tetapi itu macet dan saya tidak dapat meluncurkannya kembali. Tapi saya masih punya file menarik terbuka di editor. Sepertinya saya tidak dapat menyimpan file di mana saja, tetapi saya dapat menyalin kontennya. Kalau saja saya bisa menemukan cara untuk mengekstrak isi file, saya bisa menyelamatkan diri dari pekerjaan berbulan-bulan.
Tetapi ada beberapa keterbatasan yang mengerikan. Saya mencoba memasukkan USB drive, tetapi tidak ada perangkat yang muncul untuk mewakili itu, dan mount
perintah mati dengan segfault. Saya dapat mencoba ssh ke komputer lain, tetapi saya mendapatkan "bus error" dan mati. ping
, dmesg
, ifconfig
, Tidak ada yang sesuai. Tapi saya punya vim
dan less
dan ls
dan bisa menelurkan bash
contoh baru .
Tidak lynx
, tidak firefox
, tidak google-chrome
. Tidak ada drive DVD.
Pada dasarnya sepertinya SSD saya sudah mati. Atau mungkin seluruh motherboard. Saya memiliki dokumen yang nilainya sangat besar dalam memori, saya memiliki alamat IP dan koneksi jaringan, saya dapat menjalankan beberapa perintah acak dan memiliki 3500 lebih di jalur yang dapat saya coba.
cat
dan gcc
sepertinya berhasil. Saya dapat menulis ke file di / tmp. Saya memiliki ipython
instance berjalan yang tampaknya masih berfungsi.
Jadi ... apa yang saya coba sejauh ini telah gagal. Tapi saya merasa masih ada seribu kemungkinan. Apa yang tidak saya pertimbangkan? Bagaimana saya bisa mendapatkan file-file ini dari komputer saya yang sekarat?
Pasti ada jalan.
UPDATE : Hal baru:
- Saya kehilangan koneksi jaringan saya karena kebodohan saya sendiri.
- Saya menulis skrip Python untuk menggantikan
cp
dancp -r
- Kecuali saya menemukan cara untuk membuat
/dev
entri untuk kartu SD, atau untuk drive USB, maka taruhan terbaik saya untuk mengeluarkan data sepertinya adalah layar dan mungkin kabel speaker / audio. - Saya sedang menulis skrip untuk mencoba membaca file dan output mana yang dapat dibaca.
Saran masih sangat diterima!
UPDATE 2 : Hal-hal yang lebih baru:
- Di komputer yang sekarat saya menulis skrip Python yang akan membaca file sedikit demi sedikit dan mencoba menyampaikan bit-bit itu dengan mem-flash layar satu warna atau lainnya. Saat ini sedang mencoba untuk melakukan kode dua-bit di mana merah, hijau, biru, dan putih semuanya merupakan pasangan dua-bit. Ini tidak bekerja dengan baik, jadi saya mungkin hanya beralih ke dua warna dan melakukan sedikit demi sedikit.
- Di laptop saya yang lain (Thinkpad tua yang terpercaya yang saya berikan untuk XPS baru yang panas ini) saya menulis sebuah skrip yang berbunyi dari webcam menggunakan OpenCV Python library. Idenya adalah untuk memecahkan kode yang dikirim oleh komputer lain. Masalahnya adalah framerate dari kamera kira-kira 15 frame per detik, yang berarti jika saya memiliki transfer yang sempurna dan tanpa kesalahan, kecepatan data maksimum saya adalah 30 bit per detik, yaitu 225 byte per detik. Itu 324rb per hari.
- Pada XPS yang sekarat saya dapat menggunakan
tar
untuk mengemas file yang diinginkan ke dalam satu arsip, yaitu 1,7 MB. Sayangnya,gzip
,bzip2
,xz
,lzop
dan apa pun kompresi utilitas tidak tersedia. TETAPI menggunakanzlib
modul Python saya bisa mengompres file ini ke 820KB. Mengingat ukuran itu, saya mungkin bisa mengirim barang ini dalam beberapa hari. - Karena metode transfer ini cenderung sangat rawan kesalahan, saya akan menerapkan kode Hamming pada XPS untuk menambahkan beberapa koreksi kesalahan saat saya mengirimkan data.
- Kemungkinan akan ada komplikasi karena itulah yang terjadi, tetapi setidaknya tampaknya entah bagaimana layak untuk mengeluarkan data ini!
- Karena ini masih merupakan cara yang cukup sial untuk mengirim data, saya melihat lebih ke driver serial USB. Modul Saya sudah mencoba untuk beban (
usb-serial-simple
,usb-debug
,safe-serial
) memberikan i / o error. Saya juga tidak berpikir itu bawaan untuk kernel, karena tidak ada perangkat / dev / ttyUSB *.
Terima kasih atas saran semua orang sejauh ini --- Saya tahu ini bahkan bukan pertanyaan yang jelas karena kalian tidak tahu sebelumnya program / file mana yang bisa dibaca atau tidak. Masih terbuka untuk saran yang lebih baik daripada pendekatan video ini!
UPDATE 3 : Hal-hal terbaru
- Saya mendapatkan webcam PS3 Eye dan, setelah menonaktifkan penguatan dan eksposur otomatisnya, saya berhasil membaca data dari XPS, meskipun dengan kesalahan 1 byte per detik. Ini adalah kesuksesan besar --- data pertama di-exfiltrasi! Tapi nilainya terlalu lambat untuk mengeluarkan 820KB saya dalam waktu yang wajar, dan tingkat kesalahannya terlalu tinggi.
- Masalahnya adalah penulisan ke terminal terlalu lambat. Pembaruan layar tidak seperti instan, terima kasih (saya pikir) untuk lambatnya
urxvt
emulator terminal yang saya akses. - Saya menemukan bahwa saya memiliki akses ke compiler Rust di XPS. Saya menulis ulang skrip transmisi menggunakan Rust untuk melihat apakah itu akan meningkatkan kecepatan refresh terminal, tetapi tidak membantu.
- Karena saya tidak mungkin dapat meningkatkan framerate, saya harus mencoba meningkatkan berapa banyak data yang saya dapatkan per frame. Pendekatan saya saat ini terlihat seperti ini:
Setengah bagian kanan masih berupa sinyal jam, yang berkedip-kedip untuk menandai kedatangan frame baru. Tapi kiri sekarang adalah kotak di mana setiap sel ditandai dengan kotak merah di sudut, dan kemudian sel hijau di kanan dan ke bawah dari kotak merah dinyalakan dan dimatikan untuk menunjukkan sedikit. Kotak merah harus membiarkan komputer penerima mengkalibrasi di mana sel berada. Saya belum mendapatkan data dengan cara ini, tapi itulah yang saya kerjakan.
- Seseorang menyarankan agar saya melihat ke dalam penulisan kode QR alih-alih pola warna ad hoc ini. Saya akan melihat itu juga, dan mungkin mengimplementasikannya daripada pendekatan grid ini. Koreksi kesalahan akan menjadi kemenangan yang menyenangkan, serta dapat menggunakan perpustakaan standar untuk memecahkan kode.
- Saya belajar bahwa saya memiliki akses ke libasound (perpustakaan suara ALSA), tetapi tidak ke file header yang terkait dengannya (
alsa/asoundlib.h
atau apa pun). Jika ada yang tahu bagaimana memanfaatkan pustaka bersama tanpa tajuk, atau dapat membantu saya menulis tajuk yang tepat untuk membiarkan saya menghasilkan output audio, maka saya bisa memiliki cara berbasis audio untuk mengeluarkan file. - Bergantian, jika seseorang dapat membantu saya memanipulasi perangkat USB tanpa akses ke libusb maka mungkin saya bisa melakukan sesuatu dengan itu?
Bergerak kedepan!
UPDATE 4 : output audio diproduksi!
Pengguna Francesco Noferi telah melakukan beberapa pekerjaan hebat membantu saya memanfaatkan perpustakaan ALSA yang disebutkan dalam pembaruan sebelumnya. Kompiler C memiliki masalah, tetapi dengan menggunakan kompiler Rust saya dapat menggunakan FFI untuk memanggil langsung ke libasound
. Saya sekarang telah memainkan banyak data saya melalui audio dan itu terdengar seperti musik di telinga saya! Masih perlu membuat saluran komunikasi yang nyata, tapi saya merasa sangat berharap. Pada titik ini pekerjaan saya pada dasarnya adalah untuk mengimplementasikan modem, jadi jika ada yang punya panduan tentang cara yang baik untuk melakukan itu saya semua telinga. Idealnya modulasi itu mudah diimplementasikan dengan tangan dan demodulasi yang ada perpustakaan yang bisa saya gunakan. Karena ini dapat langsung melalui kabel audio dan tidak melalui jaringan telepon, secara teoritis kita bisa melakukan jauh lebih baik daripada 56kbps atau apa pun standarnya pada hari itu, tetapi dalam praktiknya siapa yang tahu apa yang akan kita dapatkan.
Terima kasih kepada semua orang yang mengikuti di sini dan di / r / techsupportmacgyver dan di / r / rust berkontribusi begitu banyak saran bagus. Akan menerapkan "modem" ini segera dan kemudian saya akan menyelesaikan ini dengan sebuah epilog. Saya pikir saya mungkin meletakkan kode saya di suatu tempat untuk digunakan orang lain yang putus asa di masa depan --- bahkan mungkin repositori alat exfiltrasi aneh yang mudah diketik ke dalam mesin sekarat dengan tangan? Kita akan lihat apa yang terjadi.
UPDATE 5 : Butuh waktu lama untuk bergulat dengan ALSA dan perangkat audio capture StarTech USB murah saya (tidak ada garis bawaan pada laptop penerima), dan banyak yang salah mulai mencoba untuk menggulung protokol transmisi saya sendiri, tetapi akhirnya di bawah saran dari beberapa Teman-teman penggemar radio Ham saya, saya menerapkan protokol garis RTTY berjalan pada 150 baud, yang dalam praktiknya memberi saya mungkin sekitar 10 byte per detik. Ini tidak super cepat tetapi cukup dapat diandalkan. Dan saya hampir selesai mentransfer file 820KB saya, diverifikasi menggunakan checksum CRC32 (menggunakan fungsi crc32 dari Pythonzlib
modul, yang dapat saya akses). Jadi saya menyatakan kemenangan, dan ingin mengucapkan terima kasih sekali lagi! Saya akan menghabiskan lebih banyak waktu untuk menemukan file lebih lanjut yang dapat dibaca dan yang dapat saya transfer, tetapi yayasan sudah ada. Sudah menyenangkan bekerja dengan Anda semua!
PEMBARUAN AKHIR :
Di mesin sekarat:
$ 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.
Di mesin penyelamat:
$ 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
. Sekarang Anda berbagi file melalui server http di port 8000 . Buka browser di perangkat lain di jaringan yang sama dan ketikkan yang berikut: http://<IP address>:8000
dan mulai unduh semua yang Anda bisa.