첫째, 고백 : 아니, 내가 가진 백업을하지 않았다.
둘째, 상황 :
Fedora 25를 실행 하는 솔리드 스테이트 디스크 가있는 Dell XPS 9550이 있습니다.
파일 작업을하고 있었고 읽기 전용 파일 시스템 에 저장하려고한다고 들었을 때 파일을 저장하려고했습니다 . 내 파일 시스템이 현재 읽기 전용이며 모든 곳에서 I / O 오류가 발생 합니다.
열린 웹 브라우저를 통해 파일을 이메일로 보내서 일부 파일을 저장할 수 있었지만 중단되어 다시 시작할 수 없습니다. 그러나 나는 여전히 편집기에서 관심있는 파일을 열어두고 있습니다. 파일을 아무 곳에 나 저장할 수 없지만 내용을 복사 할 수 있습니다. 파일 내용을 추출하는 방법 만 찾을 수 있다면 수개월의 작업 시간을 절약 할 수 있습니다.
그러나 몇 가지 끔찍한 한계가 있습니다. USB 드라이브를 삽입하려고했지만 해당 장치를 나타내는 장치가 없으며 mount
명령이 segfault로 죽습니다. 다른 컴퓨터로 ssh를 시도 할 수 있지만 "버스 오류"가 발생하여 종료됩니다. ping
, dmesg
, ifconfig
,이 작품의 없음. 그러나 나는이 있습니까 vim
및 less
및 ls
새로운 산란 할 수 bash
인스턴스.
아니 lynx
아니, firefox
아니, google-chrome
. DVD 드라이브가 없습니다.
기본적으로 SSD가 사망 한 것 같습니다. 아니면 전체 마더 보드 일 수도 있습니다. 나는 여전히 메모리에 큰 가치가있는 문서를 가지고 있으며 IP 주소와 네트워크 연결을 가지고 있으며 몇 가지 임의의 명령을 실행할 수 있으며 시도 할 수있는 경로에 3500 개가 더 있습니다.
cat
및 gcc
작동 보인다. / tmp의 파일에 쓸 수 있습니다. ipython
여전히 작동 하는 인스턴스가 실행 중 입니다.
그래서 ... 지금까지 시도한 것은 실패했습니다. 그러나 나는 여전히 수천 가지 가능성이 있다고 생각합니다. 무엇을 고려하지 않습니까? 죽어가는 컴퓨터에서이 파일들을 어떻게 얻을 수 있습니까?
방법이 있어야합니다.
업데이트 : 새로운 것들 :
- 내 어리 석음 때문에 네트워크 연결이 끊어졌습니다.
- 나는 파이썬 스크립트를 작성
cp
하고cp -r
/dev
SD 카드 또는 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를 꺼내기에는 속도가 너무 느리고 오류율이 너무 높습니다.
- 문제는 터미널에 쓰는 것이 너무 느리다는 것입니다. 화면 업데이트는
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
:-)
python -m SimpleHTTPServer
. 이제 포트 8000 의 http 서버 를 통해 파일을 공유하고 있습니다 . 동일한 네트워크의 다른 장치에서 브라우저를 열고 다음을 입력하십시오 . 가능한 모든 것을 다운로드하십시오. http://<IP address>:8000