これらのドキュメントを忘却の死のマシンに保存できますか?


49

まず、告白:いいえ、必要なバックアップを行いませんでした。

第二に、状況:

Fedora 25を実行するソリッドステートディスクを搭載したDell XPS 9550があります。

読み取り専用ファイルシステムに保存しようとしていると言われたときに、ファイルを作成して保存しようとしました。私のファイルシステムは現在読み取り専用であり、至る所にI / Oエラーがあります。

開いているWebブラウザーを介して自分自身にメールで送信することで、いくつかのファイルを保存できましたが、クラッシュし、再起動できません。しかし、私はまだエディターで関心のあるファイルを開いています。ファイルをどこにも保存できないようですが、その内容をコピーできます。ファイルの内容を盗み出す方法を見つけることができれば、何ヶ月もの作業を省くことができます。

しかし、いくつかの恐ろしい制限があります。USBドライブを挿入しようとしましたが、それを表すデバイスが表示されず、mountコマンドがセグメンテーション違反で終了します。別のコンピューターにsshを試みることができますが、「バスエラー」が発生し、死にます。pingdmesgifconfig、これらの作品のどれも。しかし、私は持っていないvimlessしてls、新たな生成できるbashインスタンスを。

いいえlynx、いいえfirefox、いいえgoogle-chrome。DVDドライブはありません。

基本的に、私のSSDは死んだようです。または、マザーボード全体。メモリにはまだ価値のあるドキュメントがあり、IPアドレスとネットワーク接続があります。いくつかのランダムなコマンドを実行し、試行できるパスにさらに3500個あります。

catそして動作するgccようです。/ tmpのファイルに書き込むことができます。ipythonまだ動作しているように見える実行中のインスタンスがあります。

だから...私が今まで試したことは失敗しました。しかし、私はまだ千の可能性があると感じています。何を考えていないのですか?どうすればこれらのファイルを死にかけているコンピューターから取得できますか?

方法がなければなりません。

更新:新しいもの:

  • 自分の愚かさのためにネットワーク接続を失いました。
  • 私は交換するPythonスクリプトを書いたcpし、cp -r
  • /devSDカードまたはUSBドライブのエントリを作成する方法を見つけない限り、データを取り出すための最善の方法は、画面と、場合によってはスピーカー/オーディオケーブルのようです。
  • 私はスクリプトを書いて、ファイルを読み、どのファイルが読めるかを出力しようとしています。

提案は大歓迎です!

更新2:新しいもの:

  • 死にかけているコンピューターで、ファイルを少しずつ読み取り、画面を1色ずつ点滅させてそれらのビットを伝えようとするPythonスクリプトを書きました。現在、赤、緑、青、白がすべて2ビットペアを表す2ビットコードを実行しようとしています。しかし、これはうまく機能していないので、2色に切り替えて、一度に1ビットずつ実行するだけです。
  • 私の他のラップトップ(このホットな新しいXPSをあきらめた信頼できる古いThinkpad)で、OpenCV Pythonライブラリを使用してWebカメラから読み取るスクリプトを作成しました。アイデアは、他のコンピューターから送信されたコードをデコードすることです。問題は、カメラからのフレームレートが毎秒15フレームのようなものであるということです。つまり、完璧なエラーのない転送があった場合、最大データレートは毎秒30ビット、つまり毎秒225バイトになります。それは1日あたり324kです。
  • 死にかけているXPSではtar、目的のファイルを1.7 MBの単一のアーカイブにパックするために使用できます。残念ながら、gzipbzip2xzlzopと何でも圧縮ユーティリティは使用できません。zlibしかし、Pythonのモジュールを使用して、このファイルを820KBに圧縮できます。そのサイズを考えると、おそらく数日でこのことを送信することができます。
  • この転送方法は非常にエラーを起こしやすいため、XPSにハミングコードを実装して、データを送信するときにエラー修正を追加します。
  • おそらくそれが起こるため、合併症が発生する可能性がありますが、少なくともこのデータを取得することは何らかの形で実現可能だと思われます!
  • これはまだデータを送信するのにかなり下品な方法であるため、USBシリアルドライバーについて詳しく調べました。私は、負荷(しようとしたモジュールはusb-serial-simpleusb-debugsafe-serial)エラーO / Iを与えます。/ dev / ttyUSB *デバイスが存在しないため、カーネルに組み込まれているとは思いません。

これまでの皆さんの提案に感謝します---誰がどのプログラム/ファイルを読むことができるかを事前に知らないので、これは明確に定義された質問ではないことを知っています。このビデオのアプローチよりも優れた提案を受け入れます!

更新3:最新のもの

  • PS3 Eyeウェブカメラを手に入れ、自動ゲインと露出を無効にした後、エラーのある1秒あたり1バイトであるにもかかわらず、XPSからデータを正常に読み取りました。これは大成功です---最初のデータが流出しました!しかし、レートは遅すぎて、合理的な時間内に820KBを出力できず、エラーレートが高すぎます。

クロックを使用した1ビット伝送

  • 問題は、端末への書き込みが遅すぎることです。画面の更新は瞬間的なものではありませんurxvt。アクセスできるターミナルエミュレータの速度が遅いためです(と思います)。
  • XPSのRustコンパイラにアクセスできることを発見しました。Rustを使用して送信スクリプトを書き直し、端末の更新速度が向上するかどうかを確認しましたが、役に立ちませんでした。
  • 私はフレームレートを上げることができそうにないので、フレームごとに取得するデータの量を増やす必要があります。私の現在のアプローチは次のようになります。

グリッド伝送

右半分はまだクロック信号であり、新しいフレームの到着を示すために点滅します。しかし、左はグリッドになり、各セルはコーナーの赤い正方形でマークされ、赤い正方形から右下の緑のセルが点滅してビットを示します。赤い四角は、受信コンピューターがセルの位置を調整できるようにする必要があります。私はまだこの方法でデータを取得していませんが、私が取り組んでいるのはそれです。

  • これらのアドホックカラーパターンの代わりにQRコードを書くことを検討することを誰かが提案しました。私もそれを調べて、おそらくこのグリッドアプローチの代わりにそれを実装します。エラー修正は、標準ライブラリを使用してデコードすることができるのと同様に、素晴らしい勝利です。
  • libasound(ALSAサウンドライブラリ)にアクセスできることを学びましたが、それに関連するヘッダーファイル(alsa/asoundlib.hまたは何でも)にはアクセスできません。誰かがヘッダーなしで共有ライブラリを使用する方法を知っているか、音声出力を生成するために適切なヘッダーを書くのを助けることができれば、ファイルを取り出す音声ベースの方法があります。
  • あるいは、libusbにアクセスせずに誰かがUSBデバイスを操作するのを手伝うことができたら、それで何かできるでしょうか?

前進!

更新4:オーディオ出力が生成されました!

ユーザーFrancesco Noferiは、前回のアップデートで言及したALSAライブラリを活用するのに役立つ素晴らしい仕事をしてくれました。Cコンパイラには問題がありましたが、Rustコンパイラを使用して、FFIを使用してを直接呼び出すことができましたlibasound。私は今、たくさんのデータをオーディオで再生しましたが、それは私の音楽のように聞こえます!まだ本当のコミュニケーションチャネルを確立する必要がありますが、私は非常に希望を感じています。この時点で、私の仕事は基本的にモデムを実装することです。だから誰かがそれを行う良い方法についてのガイダンスを持っているなら、私はすべて耳です。手作業で簡単に実装できる変調と、既存のライブラリを使用できる復調が理想的です。これは、理論的には、電話ネットワークを介さずにオーディオケーブルを介して直接送信できるため、 56kbpsまたはその当時の標準に比べてはるかに優れた成果を上げることができますが、実際には私たちが何を手に入れるかを知っている人がいます。

ここと/ r / techsupportmacgyver/ r / rustでたくさんの素晴らしい提案をしてくれたすべての人に感謝します。この「モデム」をすぐに実装し、それからエピローグでこれを仕上げます。私は自分のコードを他の絶望的な人々が将来利用できるようにどこかに置くかもしれないと思う---たぶん、死にかけているマシンに手で入力しやすい奇妙なエクストルージョンツールのリポジトリでさえあるだろうか?何が起こるか見てみましょう。

更新5:ALSAと安価なStarTech USBオーディオキャプチャデバイス(受信側のラップトップにビルトインラインがない)とのレスリングに長い時間がかかりました。私のアマチュア無線愛好家の友人は、150ボーで実行される RTTYラインプロトコルを実装しました。超高速ではありませんが、かなり信頼できます。そして、CRC32チェックサムを使用して確認された820KBファイルの転送はほぼ完了しました(Pythonのcrc32機能を使用してzlib私がアクセスできるモジュール)。だから私は勝利を宣言している、ともう一度感謝したい!読みやすく、転送できるファイルをさらに見つけるためにもう少し時間を費やしますが、基礎は整っています。皆さんと一緒に仕事をするのは楽しかったです!

最終更新

死にかけているマシンで:

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

レスキューマシンで:

$ 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

:-)



2
ファイルがあるディレクトリに移動し、コマンドを発行しますpython -m SimpleHTTPServer。これで、ポート8000​​のhttpサーバーを介してファイルを共有しています。同じネットワーク内の他のデバイスでブラウザを開き、次のように入力します: 可能なすべてのダウンロードを開始します。http://<IP address>:8000
-jcbermu

2
あなたがここに持っているオタクのものの素晴らしい作品。2回投票できたらいいのにと思います。
カミルマシオロウスキ

1
RAMのがらくたを冷却して揮発性を減らし、別のXPSに移動するのはどうですか?en.wikipedia.org/wiki/Cold_boot_attack
ルート

1
多少話題から外れていますが、関連するredditスレッドをリンクして、そこで提案されている内容を確認できるといいと思います。
ボブ

回答:


15

以下に、ヘッダーなしで基本的な2チャンネル44.1k wav出力を取得するのに十分な定義を備えたlibasoundプログラムの例を示します。

編集:私は実際にwavとしてデータをまっすぐにダンプするのがうまくいくかどうかわかりません、記録時のノイズは簡単に損傷する可能性がありますが、おそらくより信頼性の高い高周波のビットの正弦波のような何かをすることができます

EDIT2:aplayが存在し、機能している場合、それを使用して、生のオーディオを出力し、それをaplayまたはオーディオを再生できるものにパイプするプログラムを作成することもできます

EDIT3:ヘッダーをまったく使用しないように変更しました

-lasoundがコンパイルされない場合は、-L / path / where / libasound / is / locatedを追加します

/*
    gcc alsa_noheader.c -lasound
    cat stuff.wav | ./a.out
*/

typedef unsigned int uint;
typedef unsigned long ulon;

int printf(char*, ...);
void* malloc(long);
long read(int fd, void* buf, ulon count);

int snd_pcm_open(void**, char*, int, int);
ulon snd_pcm_hw_params_sizeof();
int snd_pcm_hw_params_any(void*, void*);
int snd_pcm_hw_params_set_access(void*, void*, int);
int snd_pcm_hw_params_set_format(void*, void*, int);
int snd_pcm_hw_params_set_channels(void*, void*, uint);
int snd_pcm_hw_params_set_rate_near(void*, void*, uint*, int*);
int snd_pcm_hw_params(void*, void*);
int snd_pcm_hw_params_get_period_size(void*, ulon*, int*);
long snd_pcm_writei(void*, void*, uint);
int snd_pcm_prepare(void*);
int snd_pcm_drain(void*);
int snd_pcm_close(void*);

int main(int argc, char* argv[])
{
    void* pcm;
    void* params;

    int rate;
    int nchannels;
    ulon frames;
    void* buf;
    int bufsize;
    long nread;

    snd_pcm_open(&pcm, "default", 0, 0);
    params = malloc(snd_pcm_hw_params_sizeof());
    snd_pcm_hw_params_any(pcm, params);

    /* 3 = rw_interleaved */
    snd_pcm_hw_params_set_access(pcm, params, 3);

    /* 2 = 16-bit signed little endian */
    snd_pcm_hw_params_set_format(pcm, params, 2);

    /* 2 channels */
    nchannels = 2;
    snd_pcm_hw_params_set_channels(pcm, params, nchannels);

    /* sample rate */
    rate = 44100;
    snd_pcm_hw_params_set_rate_near(pcm, params, &rate, 0);

    snd_pcm_hw_params(pcm, params);
    snd_pcm_hw_params_get_period_size(params, &frames, 0);

    bufsize = frames * nchannels * 2;
    buf = malloc(bufsize);

    /* read file from stdin */
    while (nread = read(0, buf, bufsize) > 0)
    {
        if (snd_pcm_writei(pcm, buf, frames) == -29)
        {
            printf("W: underrun\n");
            snd_pcm_prepare(pcm);
        }
    }

    snd_pcm_drain(pcm);
    snd_pcm_close(pcm);

    return 0;
}

私はあなたを支持しました、そしてあなたはあなたがこの素晴らしいアプローチのためにたくさんの信用に値すると思います!問題は次のとおりです。使用する4つのインクルードファイルすべてでIOエラーが発生します。だから私はそれを回避する方法が必要です。他のラップトップで前処理を行うことはできますが、その結果、63Kファイル、11K gzip圧縮されます。私は、データを取得する手段を見つけることができた場合実現可能ですその後、XPSのを、私は手でそれを入力して興奮していませんよ。コンパイルされたファイルは10.4K、または2.4K gzip圧縮されています。それは手で入力できるところまで来ていますが、エラーを検出するのは難しいでしょう。
ジョシュハンセン

1
ヘッダーをまったく使用しないようにプログラムを編集しました。試してみてください
フランチェスコノフェリ

gcc幸いなことに、Rustコンパイラが動作しているので、RustのFFI機能を使用して、上記のコードをRustを使用して実装しました。コンパイルおよび実行中ですが、まだ何も聞こえません。しかし、ボリュームがアップしているかどうかはよくわかりません。ミュートされている可能性があります。しかし、alsamixer / xfce4-mixerを実行して確認することはできません。私はalsalibを直接使用して、ボリュームがアップしていることを確認しています。これにご尽力いただきありがとうございます!
ジョシュハンセン

1
実行できたと聞いて嬉しいです!:ボリュームのために、ここではデフォルトのデバイスのミキサーコントロールとmaxes、それらをすべて列挙するプログラムですgist.github.com/008f0c3acdbcae886a19868a0554987bを。それでも問題が解決しない場合は、オーディオ出力とそのミキサーエントリを列挙して、間違ったデバイスやミュートされたデバイスへの出力だけでなく、本当に壊れていることを確認する必要があります。オーディオ出力プログラムにエラーチェックを追加して、エラーが発生しているかどうかを確認することもできます。バスエラー手段「可能性があることができなかったアクセス・メモリしようとしたが、」そうかもしれない壊れたメモリは、LIBSマッピングされた
フランチェスコNoferi

音量は上がっていましたが、実際にはスピーカーにバイトを送信していませんでした---どういうわけか、Rustのバッファーへの読み込み方法がわからず、常に0バイトを読み込みます。しかし、私が構築したいくつかのバイトを使用して、オーディオ出力を生成することができました!これは素晴らしいことです。データをきれいに削除する良い方法のようです。ここで、変調/復調の戦略について学習し、インテリジェントに実行できるようにします。これに関するあなたの仕事に感謝します---非常に感謝します!
ジョシュハンセン

3

HDMIまたは他のディスプレイ出力ポートは機能していますか?その場合は、スクリーンキャプチャデバイスを使用してビデオとして記録し、後で処理できます。したがって、ウェブカメラのフレームレートに制限されません。


2

データを16進エンコードし、ページごとに端末に出力するのはどうですか?

バイナリ内のオフセットにプレフィックスを追加して、ページを簡単に再生成できるようにすることができます(手動修正用?)

次に、別のコンピューターでOCRソフトウェアを使用してページをスキャンします。

80x25端末では、ページあたり1000バイトが得られます(プレフィックス用のスペースを差し引く)。したがって、約1000ページでデータを取得できます。1秒あたり1ページであっても、20分未満です。

16進エンコードは簡単に記述でき、生の形式のエラー訂正も提供します(有効なシンボルは16個のみです)。


1

ネットワーク接続をセットアップできますか?sshは少し多すぎるかもしれませんが、2台のマシンでnetcatを使用できる場合、データを転送できる可能性があります。1つは送信モード、もう1つはリスニングモードです。あなたがする必要があるのがテキストを転送することだけなら、これは解決策かもしれません。

編集:気にしないで、ネットワーク接続も失ったことを読んでください。


1
あなたの答えはそこにあるに値すると思います。ncOPが機能するネットワークスタック以外に依存関係はありません。これにより、実行可能ファイルが起動しない可能性が大幅に減少します。他の誰かが同様の問題に遭遇した場合、それは間違いなく有用な解決策です。
zneak

0

あなたは可能ファイルを送信するなど、コマンドラインから自分自身を電子メールで送信することができます。

何かのようなもの:

$ mail -s "Hello World" user@yourmaildomain.com < /tmp/urgentFileToSave.txt

動作するはずです。

その他の例:http : //www.binarytides.com/linux-mail-command-examples/


悲しいことに、mail私が実行できるプログラムの(本質的にランダムな)コレクションには含まれていません。さらに、ネットワーク接続を失いました:-(
ジョシュハンセン

痛い。OK、残っているのcatはファイルだけで、携帯で写真を撮るだけです。
mcalex

それになるかもしれません!
ジョシュハンセン

0

Pythonはオーディオ出力ポートにアクセスできますか?あなたはそれを使用してデータを転送しようとするかもしれません- これまたはそれを参照してください。


Pythonのオーディオライブラリがインストールされているとは思わないので、おそらくそうではありません。ただし、/ dev / sndにはALSAデバイスがあります。alsa-libはインストールされていますが、読み込めないと思います。オーディオデバイスに直接書き込む方法はありますか?
ジョシュハンセン

@ user17219 ossaudiodevPythonインストールで使用可能なライブラリがありませんか?ドキュメントを正しく読んだ場合、LinuxおよびFreeBSDの標準モジュールになります。import ossaudiodevすぐに私のUbuntuで働きました。
lukeg

実際にあなたはそれが存在するのは正しいですが、残念ながらそれはメモリになかったので私はそれを読むことができません---ディスクからモジュールを読み込もうとすると、I / Oエラーが発生します:-(しかし提案
ジョシュハンセン

@ user17219それは残念です。tldp.org/HOWTO/Alsa-sound-6.html-このリンクは、あなたがただ試すことができることを示していますcat-ファイルを/dev/snd/pcm...デバイスに送信します。
lukeg

私はそれを試みましたが、いくつかの奇妙なエラーが発生します。このドキュメントが作成されて以来、pcmデバイスは変更されていると思います。* pと* cのバリエーションがあります。私が試したcatINGの/dev/randomそれらのすべてにしかし無駄に。
ジョシュハンセン

0

マシンからSSDを削除したり、別の稼働中のマシンでdd/ photorec/ etcに削除したりできます。

ここだ9550のためのデルのサービスマニュアル「ソリッド・ステート・ドライブの取り外し」の項を参照してください- 。ドライブを取り外したら、外部のM.2 USBエンクロージャーを入手し、ディスクを別のマシンに接続してデータを回復できます。


3
-1。この場合、あなたのアドバイスは事態をさらに悪化させるかもしれません。まず、どのファイルがSSDにコミットされたかを確認することはできません。それらのファイルはキャッシュに存在する可能性があります。一部のファイルはまったく保存されませんでした:「しかし、エディターで目的のファイルを開いたままです。ファイルをどこにも保存できないようですが、その内容をコピーできます。」次に、SSDが初期化されなくなるリスクがあります。誤動作の前に初期化されたため、現在動作しています。解決策は、RAMコンテンツを確実に失うことを意味し、SSDコンテンツを失う可能性があります。クーデターデグラッセになるのではないかと思う。
カミルマシオロウスキ

0

ロングショットですが、一部のディストリビューションにはハム無線プロトコルが組み込まれています。一般的なものの1つはfldigiです。どのfldigiを試してください。

これがある場合は、通常、位相シフトキーイングのバリエーションを使用して、テキストをオーディオに変換します。出力はスピーカー/ヘッドフォンに送られ、同じ部屋にある安定したコンピューターで受信され、マイクに表示されます。(これにより、電波を介して音声を送受信するアマチュア無線が排除されます)。


0

QRコードのアプローチは良いかもしれません。画面にできるだけ多くのサイズを収め、端末で許可されたらすぐに更新できます。次に、Webカメラを使用するのではなく、カメラでXPSの画面を記録し、保存したビデオの解読に取り掛かります。スローモーションキャプチャーを使用する場合にも役立つ場合があります。


0

素晴らしいショー:)私は1つの提案があります:あなたは他のコンピュータのサウンドカードに接続されたフォトダイオードを使用して画面からデータを読み取ることもできます


または、オーディオ出力を外部サウンドカードの入力に配線します(ノイズを除去するため)。ここからインスピレーションを得ます:chdk.wikia.com/wiki/Obtaining_a_firmware_dump
ミロオー

質問自体、および以前のいくつかの回答では、カメラで画面イメージをキャプチャする方法について説明しています。あなたのアプローチは改善されますか?それとも、どこにでも近いほど良いですか?もしそうなら、説明してください。コメントで返信しないでください。回答を編集して、より明確で完全なものにします。
G-マンは「元に戻すモニカ言う
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.