Zuerst ein Geständnis: Nein, ich habe nicht die Backups gemacht, die ich haben sollte.
Zweitens ist die Situation:
Ich habe ein Dell XPS 9550 mit einer Solid-State-Festplatte , auf der Fedora 25 ausgeführt wird .
Ich habe an einer Datei gearbeitet und versucht, sie zu speichern, als mir mitgeteilt wurde, dass ich auf einem schreibgeschützten Dateisystem speichern möchte . Es stellte sich heraus, dass mein Dateisystem jetzt schreibgeschützt ist und es überall E / A-Fehler gibt .
Ich konnte einige der Dateien speichern, indem ich sie über einen offenen Webbrowser per E-Mail an mich selbst schickte. Das ist jedoch abgestürzt und ich kann sie nicht erneut starten. Ich habe jedoch noch interessante Dateien in einem Editor geöffnet. Ich kann die Dateien anscheinend nirgendwo speichern, aber ich kann deren Inhalt kopieren. Wenn ich nur einen Weg finden könnte, den Dateiinhalt zu filtern, könnte ich mir monatelange Arbeit sparen.
Aber es gibt einige schreckliche Einschränkungen. Ich habe versucht, ein USB-Laufwerk mount
anzuschließen , aber es wird kein Gerät angezeigt, das es darstellt, und der Befehl wird mit einem Segfault abgebrochen. Ich kann versuchen, auf einen anderen Computer zu ssh, aber ich erhalte "Busfehler" und es stirbt. ping
, dmesg
, ifconfig
, Keines dieser Arbeit. Aber ich habe vim
und less
und ls
und kann neue bash
Instanzen erzeugen .
Nein lynx
, nein firefox
, nein google-chrome
. Es gibt kein DVD-Laufwerk.
Grundsätzlich scheint meine SSD gestorben zu sein. Oder vielleicht das ganze Motherboard. Ich habe noch Dokumente von großem Wert im Speicher, ich habe eine IP-Adresse und eine Netzwerkverbindung, ich kann ein paar zufällige Befehle ausführen und weitere 3500 auf dem Pfad, den ich versuchen könnte.
cat
und gcc
scheinen zu funktionieren. Ich kann in Dateien in / tmp schreiben. Ich habe eine laufende ipython
Instanz, die noch zu funktionieren scheint.
Also ... was ich bisher ausprobiert habe, ist gescheitert. Aber ich habe das Gefühl, dass es immer noch tausend Möglichkeiten gibt. Woran denke ich nicht? Wie könnte ich möglicherweise diese Dateien von meinem sterbenden Computer bekommen?
Es muss einen Weg geben.
UPDATE : Neues:
- Ich habe meine Netzwerkverbindung wegen meiner eigenen Dummheit verloren.
- Ich habe ein Python-Skript geschrieben, um
cp
und zu ersetzencp -r
- Wenn ich keine Möglichkeit finde, einen
/dev
Eintrag für die SD-Karte oder für USB-Laufwerke zu erstellen, sind der Bildschirm und möglicherweise die Lautsprecher / das Audiokabel meine besten Tipps zum Abrufen von Daten. - Ich schreibe ein Skript, um zu versuchen, Dateien zu lesen und auszugeben, welche lesbar sind.
Vorschläge noch sehr willkommen!
UPDATE 2 : Neuere Sachen:
- Auf dem sterbenden Computer habe ich ein Python-Skript geschrieben, das nach und nach eine Datei liest und versucht, diese Bits zu übermitteln, indem der Bildschirm in der einen oder anderen Farbe blinkt. Derzeit wird versucht, einen Zwei-Bit-Code zu erstellen, bei dem Rot, Grün, Blau und Weiß jeweils ein Zwei-Bit-Paar darstellen. Das funktioniert allerdings nicht so gut, deshalb wechsle ich möglicherweise zu zwei Farben und mache jeweils ein Bit.
- Auf meinem anderen Laptop (dem vertrauenswürdigen alten Thinkpad, das ich für dieses heiße neue XPS aufgegeben habe) habe ich ein Skript geschrieben, das mithilfe der OpenCV-Python-Bibliothek von der Webcam liest. Die Idee ist, die vom anderen Computer gesendeten Codes dekodieren zu lassen. Das Problem ist, dass die Bildrate von der Kamera etwa 15 Bilder pro Sekunde beträgt. Wenn ich also eine perfekte, fehlerfreie Übertragung hätte, wäre meine maximale Datenrate 30 Bit pro Sekunde, dh 225 Byte pro Sekunde. Das sind 324.000 pro Tag.
- Auf dem sterbenden XPS kann ich
tar
die gewünschten Dateien in ein einziges Archiv packen, das 1,7 MB groß ist. Leidergzip
,bzip2
,xz
,lzop
und was auch immer Komprimierungsprogramme sind nicht verfügbar. ABER mit Pythonszlib
Modul kann ich diese Datei auf 820 KB komprimieren. Angesichts dieser Größe könnte ich das Ding wahrscheinlich in ein paar Tagen verschicken lassen. - Da diese Übertragungsmethode wahrscheinlich sehr fehleranfällig ist, implementiere ich Hamming-Codes auf dem XPS, um beim Übertragen der Daten eine gewisse Fehlerkorrektur hinzuzufügen.
- Wahrscheinlich wird es Komplikationen geben, weil das passiert, aber zumindest scheint es irgendwie machbar, diese Daten herauszubekommen!
- Da dies immer noch eine ziemlich bescheuerte Methode zum Senden von Daten ist, habe ich mich mehr mit seriellen USB-Treibern befasst. Die Module I Last versucht haben (
usb-serial-simple
,usb-debug
,safe-serial
) geben i / o Fehler. Ich glaube auch nicht, dass es in den Kernel integriert ist, da keine / dev / ttyUSB * -Geräte vorhanden sind.
Vielen Dank für alle Vorschläge bis jetzt --- Ich weiß, dass dies nicht einmal eine genau definierte Frage ist, da ihr im Voraus nicht wisst, welche Programme / Dateien gelesen werden können oder nicht. Noch offen für bessere Vorschläge als dieser Video-Ansatz!
UPDATE 3 : Neuestes Zeug
- Ich habe eine PS3 Eye-Webcam und lese nach Deaktivierung der automatischen Verstärkung und Belichtung erfolgreich Daten vom XPS, wenn auch mit einer fehlerhaften Geschwindigkeit von 1 Byte pro Sekunde. Dies ist ein großer Erfolg - die ersten Daten werden ausgefiltert! Aber die Rate ist zu langsam, um meine 820 KB in einer angemessenen Zeit herauszubekommen, und die Fehlerrate ist zu hoch.
- Das Problem ist, dass das Schreiben in das Terminal zu langsam ist. Die Bildschirmaktualisierungen sind nicht so unmittelbar, dank der Langsamkeit des
urxvt
Terminal-Emulators, auf den ich Zugriff habe. - Ich habe festgestellt, dass ich auf dem XPS Zugriff auf einen Rust-Compiler habe. Ich habe das Übertragungsskript mit Rust umgeschrieben, um zu sehen, ob dies die Aktualisierungsgeschwindigkeit des Terminals verbessern würde, aber es hat nicht geholfen.
- Da es unwahrscheinlich ist, dass ich die Framerate erhöhen kann, muss ich versuchen, die Datenmenge zu erhöhen, die ich pro Frame erhalte. Mein aktueller Ansatz sieht ungefähr so aus:
Die rechte Hälfte ist immer noch ein Taktsignal, das an und aus blinkt, um das Eintreffen neuer Frames zu markieren. Aber die linke Seite ist jetzt ein Raster, in dem jede Zelle durch ein rotes Quadrat in der Ecke markiert ist. Dann blinkt die grüne Zelle rechts und unten vom roten Quadrat auf und ab, um ein Bit anzuzeigen. Die roten Quadrate sollten den empfangenden Computer an der Stelle kalibrieren lassen, an der sich die Zellen befinden. Ich habe noch keine Daten auf diesem Weg, aber daran arbeite ich.
- Jemand schlug vor, ich solle QR-Codes anstelle dieser Ad-hoc-Farbmuster schreiben. Ich werde mich auch damit befassen und das vielleicht anstelle dieses Gitteransatzes implementieren. Die Fehlerkorrektur wäre ein schöner Gewinn, ebenso wie die Möglichkeit, Standardbibliotheken zum Dekodieren zu verwenden.
- Ich habe erfahren, dass ich Zugriff auf libasound (die ALSA-Soundbibliothek) habe, aber nicht auf die damit verbundenen Header-Dateien (
alsa/asoundlib.h
oder was auch immer). Wenn jemand weiß, wie man eine gemeinsam genutzte Bibliothek ohne die Header verwendet, oder mir helfen kann, genau den richtigen Header zu schreiben, damit ich eine Audioausgabe erzeuge, kann ich die Dateien auf Audiobasis rausholen. - Wenn mir jemand helfen könnte, die USB-Geräte zu manipulieren, ohne auf libusb zuzugreifen, könnte ich dann vielleicht etwas damit anfangen?
Vorwärts!
UPDATE 4 : Audioausgabe erzeugt!
Benutzer Francesco Noferi hat großartige Arbeit geleistet und mir dabei geholfen, die im vorherigen Update erwähnte ALSA-Bibliothek zu nutzen. Der C-Compiler hatte ein Problem, aber mit dem Rust-Compiler konnte ich den FFI direkt aufrufen libasound
. Ich habe jetzt eine Menge meiner Daten über Audio abgespielt und es klingt wie Musik in meinen Ohren! Ich muss noch einen echten Kommunikationskanal aufbauen, aber ich bin sehr hoffnungsvoll. Zu diesem Zeitpunkt besteht meine Aufgabe im Wesentlichen darin, ein Modem zu implementieren. Wenn also jemand eine Anleitung zu guten Methoden hat, bin ich ganz Ohr. Idealerweise ist die Modulation einfach per Hand zu implementieren und es gibt eine Demodulation, für die ich eine vorhandene Bibliothek verwenden kann. Da dies theoretisch direkt über ein Audiokabel und nicht über das Telefonnetz gehen kann Wir können viel besser als 56 kbit / s oder was auch immer der Standard damals war, aber in der Praxis, wer weiß, was wir bekommen werden.
Vielen Dank an alle, die hier mitgemacht haben und an / r / techsupportmacgyver und an / r / rust, die so viele exzellente Vorschläge beigesteuert haben. Wir werden dieses "Modem" bald implementieren und dann werde ich es mit einem Epilog abschließen. Ich denke, ich könnte meinen Code irgendwo für andere verzweifelte Leute aufstellen, um ihn in Zukunft zu nutzen - vielleicht sogar für ein Repository mit seltsamen Exfiltrationswerkzeugen, die sich einfach von Hand in eine Sterbe-Maschine eingeben lassen? Mal sehen was passiert.
UPDATE 5 : Es hat lange gedauert, bis ich mit ALSA und meinem billigen StarTech-USB-Audio-Capture-Gerät (keine eingebaute Leitung auf dem empfangenden Laptop) gerungen bin, und viele fingen falsch an, mein eigenes Übertragungsprotokoll zu erstellen, aber schließlich unter dem Rat einiger Freunde von Amateurfunkfreunden Ich habe das RTTY-Leitungsprotokoll mit 150 Baudimplementiert, was in der Praxis etwa 10 Bytes pro Sekunde ergibt. Es ist nicht super schnell, aber es ist ziemlich zuverlässig. Und ich bin fast fertig mit der Übertragung meiner 820 KB großen Datei, die mit CRC32-Prüfsummen überprüft wurde (mit der crc32-Funktionalität von Python)zlib
Modul, auf das ich Zugriff habe). Also erkläre ich den Sieg und möchte mich noch einmal bedanken! Ich werde etwas mehr Zeit damit verbringen, weitere Dateien zu finden, die lesbar sind und die ich übertragen kann, aber die Grundlage ist vorhanden. Es hat Spaß gemacht, mit euch allen zu arbeiten!
FINAL UPDATE :
Auf der Sterbemaschine:
$ 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.
Auf der Rettungsmaschine:
$ 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
. Jetzt teilen Sie die Dateien über einen http-Server in Port 8000 . Öffnen Sie einen Browser auf einem anderen Gerät im selben Netzwerk und geben Sie Folgendes ein:http://<IP address>:8000
und beginnen Sie mit dem Herunterladen aller verfügbaren Informationen.Antworten:
Hier ist ein Beispiel für ein libasound-Programm mit gerade genug Definitionen, um eine grundlegende 2-Kanal-44.1k-WAV-Ausgabe ohne Header zu erhalten.
EDIT: Ich bin mir nicht sicher, ob es funktionieren würde, wenn die Daten direkt als WAV gespeichert werden, da Rauschen beim Aufnehmen sie leicht beschädigen könnte, aber Sie können wahrscheinlich so etwas wie eine Sinuswelle von Bits mit hoher Frequenz machen, was zuverlässiger ist
EDIT2: Wenn ein Play vorhanden ist und funktioniert, können Sie das auch verwenden und einfach ein Programm schreiben, das Roh-Audio ausgibt und in ein Play oder etwas anderes leitet, das Audio abspielen kann
EDIT3: Es wurde so geändert, dass keine Header mehr verwendet werden
Wenn -lasound nicht kompiliert, fügen Sie -L / path / where / libasound / is / located hinzu
quelle
gcc
gab mir "Busfehler" (die mit einigen Programmen auftreten, aber nicht wirklich verstehen) Es kompiliert und läuft, aber ich höre immer noch nichts. Aber ich bin mir nicht sicher, ob die Lautstärke zu hoch ist - möglicherweise ist sie stummgeschaltet. Aber ich kann nicht alsamixer / xfce4-mixer laufen lassen, um zu überprüfen. Ich prüfe die direkte Verwendung von Alsalib, um sicherzustellen, dass die Lautstärke erhöht ist. Vielen Dank für Ihren Einsatz!Funktioniert Ihr HDMI- oder ein anderer Bildschirmausgang? In diesem Fall können Sie ein Bildschirmaufzeichnungsgerät verwenden, um es als Video aufzuzeichnen und später zu verarbeiten. Dadurch wird die Framerate Ihrer Webcam nicht eingeschränkt.
quelle
Wie wäre es, wenn Sie Ihre Daten verhexen und Seite für Seite an das Terminal ausgeben?
Sie können ein Präfix mit dem Versatz in der Binärdatei hinzufügen, damit Sie eine Seite einfach neu generieren können (zur manuellen Korrektur?)
Verwenden Sie dann auf einem anderen Computer eine OCR-Software, um die Seiten zu scannen.
80x25-Terminal würde 1000 Bytes pro Seite ergeben (abzüglich etwas Platz für das Präfix). Auf rund 1000 Seiten könnten Sie also Ihre Daten rausholen. Selbst bei einer Seite pro Sekunde sind das weniger als 20 Minuten.
Hex-Codierung ist einfach zu schreiben und bietet auch eine unformatierte Form der Fehlerkorrektur (es gibt nur 16 gültige Symbole).
quelle
Kannst du eine Netzwerkverbindung aufbauen? ssh ist vielleicht ein bisschen zu viel, aber wenn Sie netcat auf 2 Computern verwenden können, können Sie möglicherweise Daten übertragen. eine im Sendemodus, eine im Hörmodus. Wenn Sie nur Text übertragen müssen, könnte dies eine Lösung sein.
edit: vergiss nicht, lies einfach, dass du auch deine Netzwerkverbindung verloren hast ..
quelle
nc
hat keine anderen Abhängigkeiten als einen funktionierenden Netzwerkstapel, den OP hatte, bis er ihn in die Luft jagte. Dadurch wird die Wahrscheinlichkeit, dass die ausführbare Datei nicht gestartet wird, drastisch verringert. Wenn jemand anderes auf ein ähnliches Problem stößt, ist dies auf jeden Fall eine nützliche Lösung.Möglicherweise können Sie sich selbst über die Befehlszeile eine E-Mail senden, einschließlich des Versendens von Dateien.
So etwas wie:
sollte arbeiten.
Einige weitere Beispiele: http://www.binarytides.com/linux-mail-command-examples/
quelle
mail
es nicht zu der (im Wesentlichen zufälligen) Sammlung von Programmen, die ich ausführen kann. Außerdem habe ich meine Netzwerkverbindung verloren :-(cat
die Dateien und mache Fotos mit deinem Handy.Kann Python auf Ihren Audio-Out-Port zugreifen? Sie können versuchen, Daten mit diesem oder jenem zu übertragen .
quelle
ossaudiodev
Ihre Python-Installation keine Bibliothek enthält? Es sollte ein Standardmodul in Linux und FreeBSD sein, wenn ich die Dokumentation richtig lese.import ossaudiodev
arbeitete in meinem Ubuntu out of the box.cat
die Datei auf dem/dev/snd/pcm...
Gerät auszurichten .cat
ing/dev/random
in alle von ihnen , aber ohne Erfolg.Sie können die SSD von Ihrem Computer entfernen und
dd
/photorec
/ etc auf einem anderen funktionierenden Computer.Hier ist das Dell-Servicehandbuch für den 9550 - siehe Abschnitt "Entfernen des Solid-State-Laufwerks". Sobald Sie das Laufwerk entfernt haben, können Sie ein externes M.2-USB-Gehäuse erwerben und die Festplatte an einen anderen Computer anschließen, um Ihre Daten wiederherzustellen.
quelle
Long Shot, aber in einigen Distributionen sind Amateurfunk-Protokolle eingebaut. Eines davon ist fldigi. Probier welches fldigi.
Wenn Sie dies oder jenes haben, konvertieren sie Text in Audio, normalerweise unter Verwendung einer Variation der Phasenumtastung. Die Ausgabe erfolgt über Ihre Lautsprecher / Kopfhörer und wird von einem stabilen Computer im selben Raum empfangen, der auf dem Mikrofon aufgelistet ist. (Dies eliminiert die Amateurfunkgeräte, die das Audio über die Funkwellen senden und empfangen).
quelle
Der QR-Code-Ansatz könnte gut sein. Sie können so viele wie möglich auf den Bildschirm bringen und sie aktualisieren, sobald Ihr Terminal dies zulässt. Nehmen Sie dann den Bildschirm des XPS mit einer Kamera auf (im Gegensatz zur Verwendung einer Webcam) und entziffern Sie einfach das gespeicherte Video. Könnte hilfreich sein, um sogar Zeitlupenaufnahmen zu machen.
quelle
Tolle Show :) Ich habe einen Vorschlag: Sie können Daten auch mit einer Fotodiode vom Bildschirm lesen, die an die Soundkarte des anderen Computers angeschlossen ist
quelle