이 문서를 망각에서 죽어가는 기계에 저장할 수 있습니까? 있습니다. 파일 작업을하고

첫째, 고백 : 아니, 내가 가진 백업을하지 않았다.

둘째, 상황 :

Fedora 25를 실행 하는 솔리드 스테이트 디스크 가있는 Dell XPS 9550이 있습니다.

파일 작업을하고 있었고 읽기 전용 파일 시스템 에 저장하려고한다고 들었을 때 파일을 저장하려고했습니다 . 내 파일 시스템이 현재 읽기 전용이며 모든 곳에서 I / O 오류가 발생 합니다.

열린 웹 브라우저를 통해 파일을 이메일로 보내서 일부 파일을 저장할 수 있었지만 중단되어 다시 시작할 수 없습니다. 그러나 나는 여전히 편집기에서 관심있는 파일을 열어두고 있습니다. 파일을 아무 곳에 나 저장할 수 없지만 내용을 복사 할 수 있습니다. 파일 내용을 추출하는 방법 만 찾을 수 있다면 수개월의 작업 시간을 절약 할 수 있습니다.

그러나 몇 가지 끔찍한 한계가 있습니다. USB 드라이브를 삽입하려고했지만 해당 장치를 나타내는 장치가 없으며 mount명령이 segfault로 죽습니다. 다른 컴퓨터로 ssh를 시도 할 수 있지만 “버스 오류”가 발생하여 종료됩니다. ping, dmesg, ifconfig,이 작품의 없음. 그러나 나는이 있습니까 vimlessls새로운 산란 할 수 bash인스턴스.

아니 lynx아니, firefox아니, google-chrome. DVD 드라이브가 없습니다.

기본적으로 SSD가 사망 한 것 같습니다. 아니면 전체 마더 보드 일 수도 있습니다. 나는 여전히 메모리에 큰 가치가있는 문서를 가지고 있으며 IP 주소와 네트워크 연결을 가지고 있으며 몇 가지 임의의 명령을 실행할 수 있으며 시도 할 수있는 경로에 3500 개가 더 있습니다.

catgcc작동 보인다. / tmp의 파일에 쓸 수 있습니다. ipython여전히 작동 하는 인스턴스가 실행 중 입니다.

그래서 … 지금까지 시도한 것은 실패했습니다. 그러나 나는 여전히 수천 가지 가능성이 있다고 생각합니다. 무엇을 고려하지 않습니까? 죽어가는 컴퓨터에서이 파일들을 어떻게 얻을 수 있습니까?

방법이 있어야합니다.

업데이트 : 새로운 것들 :

  • 내 어리 석음 때문에 네트워크 연결이 끊어졌습니다.
  • 나는 파이썬 스크립트를 작성 cp하고cp -r
  • /devSD 카드 또는 USB 드라이브에 대한 항목 을 만들 수있는 방법을 찾지 못하면 데이터를 얻는 가장 좋은 방법은 화면과 스피커 / 오디오 케이블 인 것 같습니다.
  • 파일을 읽고 읽을 수있는 파일을 출력하는 스크립트를 작성 중입니다.

제안은 여전히 ​​매우 환영합니다!

업데이트 2 : 최신 정보 :

  • 죽어가는 컴퓨터에서 나는 비트 단위로 파일을 읽고 화면을 한 색 또는 다른 색으로 깜박여 비트를 전달하는 Python 스크립트를 작성했습니다. 현재 빨강, 녹색, 파랑 및 흰색이 모두 2 비트 쌍을 나타내는 2 비트 코드를 수행하려고합니다. 그러나 이것은 잘 작동하지 않으므로 두 가지 색상으로 전환하고 한 번에 한 비트 씩 할 수 있습니다.
  • 다른 랩톱 (이 새로운 XPS를 위해 포기한 믿을 수있는 오래된 Thinkpad)에서 OpenCV Python 라이브러리를 사용하여 웹캠에서 읽는 스크립트를 작성했습니다. 아이디어는 다른 컴퓨터가 보낸 코드를 해독하도록하는 것입니다. 문제는 카메라의 프레임 속도가 초당 15 프레임과 같다는 것입니다. 즉, 완벽하고 오류없는 전송을 수행하면 최대 데이터 속도가 초당 30 비트, 즉 초당 225 바이트가됩니다. 하루에 324k입니다.
  • 죽어가는 XPS tar에서 원하는 파일을 1.7MB 인 단일 아카이브에 압축하는 데 사용할 수 있습니다 . 불행하게도, gzip, bzip2, xz, lzop및 유틸리티를 사용할 수없는 어떤 압축. 그러나 파이썬 zlib모듈을 사용 하면이 파일을 820KB로 압축 할 수 있습니다. 그 크기를 감안할 때 아마도 며칠 안에이 물건을 보낼 수 있습니다.
  • 이 전송 방법은 오류가 발생하기 쉽기 때문에 XPS에서 Hamming 코드를 구현하여 데이터를 전송할 때 약간의 오류 수정을 추가하려고합니다.
  • 아마도 그것이 일어나기 때문에 합병증이있을 것입니다. 그러나 적어도이 데이터를 꺼내는 것은 어쨌든 가능합니다!
  • 이것은 여전히 ​​데이터를 보내는 매우 짜증나는 방법이므로 USB 직렬 드라이버를 더 많이 조사했습니다. 내가 해봤 모듈을로드하는 ( usb-serial-simple, usb-debug, safe-serial) / O 오류가 난을 제공합니다. / dev / ttyUSB * 장치가 없기 때문에 커널에 내장되어 있다고 생각하지 않습니다.

지금까지 모든 사람들의 제안에 감사드립니다 .– 어떤 프로그램 / 파일을 읽을 수 있는지 미리 알지 못하기 때문에 이것은 잘 정의 된 질문조차 아니라는 것을 알고 있습니다. 이 비디오 접근법보다 더 나은 제안을 여전히 열 수 있습니다!

업데이트 3 : 최신 물건

  • PS3 Eye 웹캠을 얻었고 자동 게인 및 노출을 비활성화 한 후 초당 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 오디오 캡처 장치 (수신 랩톱에 내장 된 라인 없음)로 오랜 시간이 걸렸으며 많은 잘못된 시작이 내 자신의 전송 프로토콜을 롤링하려고 시도했지만 마침내 일부의 조언을 받았습니다. Ham 라디오 애호가 인 친구는150 보드에서 실행되는 RTTY 라인 프로토콜을 구현했습니다. 실제로 초당 약 10 바이트를 제공합니다. 매우 빠르지는 않지만 상당히 안정적입니다. 그리고 CRC32 체크섬 (Python의 crc32 기능 사용)을 사용하여 확인한 820KB 파일 전송이 거의 완료되었습니다.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 채널 44.1k wav 출력을 얻을 수있는 충분한 정의를 가진 libasound 프로그램의 예입니다.

편집 : 실제로 기록 할 때 잡음이 쉽게 손상 될 수 있기 때문에 wav가 작동하는 것처럼 데이터를 똑바로 덤프하는 것이 실제로 확실하지 않지만 고주파에서 사인파 비트와 같은 것을 수행 할 수 있습니다.

EDIT2 : 재생이 존재하고 작동하는 경우이를 사용하고 원시 오디오를 출력하는 프로그램을 작성하여 재생 또는 오디오를 재생할 수있는 모든 것에 파이프

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;
}


답변

HDMI 또는 다른 디스플레이 출력 포트가 작동합니까? 그렇다면 화면 캡처 장치를 사용하여 비디오로 녹화하고 나중에 처리 할 수 ​​있습니다. 따라서 웹캠의 프레임 속도에 의해 제한되지 않습니다.


답변

데이터를 16 진수로 인코딩하여 페이지 당 페이지 당 터미널로 출력하는 것은 어떻습니까?

바이너리를 오프셋으로 접두사를 추가하면 페이지를 쉽게 재생성 할 수 있습니다 (수동 수정을 위해?)

그런 다음 다른 컴퓨터에서 일부 OCR 소프트웨어를 사용하여 페이지를 스캔하십시오.

80×25 터미널은 페이지 당 1000 바이트를 생성합니다 (접두사를위한 약간의 공간 빼기). 따라서 약 1000 페이지에서 데이터를 얻을 수 있습니다. 초당 1 페이지라도 20 분 미만입니다.

16 진 인코딩은 작성하기 쉬우 며 원시 형식의 오류 수정 (16 개의 유효한 기호 만 있음)을 제공합니다.


답변

네트워크 연결을 설정할 수 있습니까? ssh가 너무 많을 수 있지만 2 대의 컴퓨터에서 netcat을 사용할 수 있으면 데이터를 전송할 수 있습니다. 하나는 송신 모드이고 다른 하나는 청취 모드입니다. 텍스트를 전송하기 만하면 해결 방법이 될 수 있습니다 ..

편집 : 신경 쓰지 말고 네트워크 연결이 끊어 졌다는 것을 읽으십시오.


답변

당신은 할 수 있습니다 전송 파일을 포함하여 명령 줄에서 직접 이메일을 보내 수 있습니다.

다음과 같은 것 :

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

작동해야합니다.

몇 가지 추가 예 : http://www.binarytides.com/linux-mail-command-examples/


답변

파이썬이 오디오 출력 포트에 접근 할 수 있습니까? 당신은 그것을 사용하여 데이터를 전송하려고 할 수 있습니다- 이것 또는 저것 참조 .


답변

당신은 당신의 시스템에서 SSD를 제거하고 수 dd/ photorec작동하는 다른 컴퓨터에 / 등 그것.

다음 은 9550Dell 서비스 설명서입니다 . “솔리드 스테이트 드라이브 분리”섹션을 참조하십시오. 드라이브를 제거하면 외부 M.2 USB 인클로저를 확보하고 디스크를 다른 머신에 연결하여 데이터를 복구 할 수 있습니다.