Najpierw spowiedź: nie, nie zrobiłem kopii zapasowych, które powinienem mieć.
Po drugie, sytuacja:
Mam Dell XPS 9550 z dyskiem SSD z Fedorą 25 .
Pracowałem nad plikiem i próbowałem go zapisać, gdy powiedziano mi, że próbuję zapisać w systemie plików tylko do odczytu . Okazuje się, że mój system plików jest teraz tylko do odczytu i wszędzie są błędy we / wy .
Udało mi się zapisać niektóre pliki, wysyłając je e-mailem do siebie przez otwartą przeglądarkę internetową, ale to się zawiesiło i nie mogę go ponownie uruchomić. Ale nadal mam pliki zainteresowania otwarte w edytorze. Nie mogę nigdzie zapisać plików, ale mogę skopiować ich zawartość. Gdybym tylko znalazł sposób na eksfiltrację zawartości pliku, mógłbym zaoszczędzić miesiące pracy.
Ale istnieją pewne okropne ograniczenia. Próbowałem włożyć dysk USB, ale żadne urządzenie go nie reprezentuje, a mount
polecenie umiera z powodu awarii. Mogę spróbować ssh do innego komputera, ale dostaję „błąd magistrali” i umiera. ping
, dmesg
, ifconfig
Żadna z tych prac. Ale mam vim
i less
i ls
i może pojawiać nowe bash
instancje.
Nie lynx
, nie firefox
, nie google-chrome
. Nie ma napędu DVD.
Zasadniczo wygląda na to, że mój dysk SSD zmarł. A może cała płyta główna. Wciąż mam w pamięci dokumenty o dużej wartości, mam adres IP i połączenie sieciowe, mogę uruchomić kilka losowych poleceń i mieć 3500 więcej na ścieżce, którą mógłbym wypróbować.
cat
i gcc
wydaje się, że działa. Mogę pisać do plików w / tmp. Mam działającą ipython
instancję, która nadal działa.
Więc ... to, co próbowałem do tej pory, zawiodło. Ale czuję, że wciąż istnieje tysiąc możliwości. Czego nie rozważam? Jak mogę usunąć te pliki z mojego umierającego komputera?
Musi być jakiś sposób.
AKTUALIZACJA : Nowe rzeczy:
- Utraciłem połączenie sieciowe z powodu mojej własnej głupoty.
- Napisałem skrypt Pythona do zastąpienia
cp
icp -r
- O ile nie znajdę jakiegoś sposobu na utworzenie
/dev
wpisu dla karty SD lub napędów USB, moim najlepszym sposobem na uzyskanie danych wydaje się być ekran i ewentualnie głośniki / kabel audio. - Piszę skrypt, aby spróbować odczytać pliki i wyświetlić, które z nich są czytelne.
Sugestie wciąż bardzo mile widziane!
AKTUALIZACJA 2 : Nowsze rzeczy:
- Na umierającym komputerze napisałem skrypt w języku Python, który odczyta plik po kawałku i spróbuje przekazać te fragmenty poprzez flashowanie ekranu jednym lub drugim kolorem. Obecnie próbuje stworzyć dwubitowy kod, w którym czerwony, zielony, niebieski i biały reprezentują dwubitową parę. Jednak to nie działa tak dobrze, więc mogę po prostu przełączyć się na dwa kolory i zrobić po jednym.
- Na moim drugim laptopie (zaufanym starym Thinkpadzie, który zrezygnowałem z tego nowego XPSa) napisałem skrypt, który czyta z kamery internetowej przy użyciu biblioteki OpenCV Python. Chodzi o to, aby dekodować kody wysyłane przez inny komputer. Problem polega na tym, że liczba klatek na sekundę z kamery wynosi około 15 klatek na sekundę, co oznacza, że gdybym miał doskonały, bezbłędny transfer, moja maksymalna szybkość przesyłania danych wynosiłaby 30 bitów na sekundę, tj. 225 bajtów na sekundę. To 324 tys. Dziennie.
- Na konającym XPSie mogę
tar
spakować pożądane pliki do jednego archiwum, które ma 1,7 MB. Niestetygzip
,bzip2
,xz
,lzop
i cokolwiek kompresji narzędzia są niedostępne. ALE za pomocązlib
modułu Pythona mogę skompresować ten plik do 820 KB. Biorąc pod uwagę ten rozmiar, prawdopodobnie mógłbym wysłać tę rzecz w ciągu kilku dni. - Ponieważ ta metoda przesyłania prawdopodobnie będzie bardzo podatna na błędy, zamierzam zaimplementować kody Hamminga na XPS, aby dodać pewną korektę błędu podczas przesyłania danych.
- Prawdopodobnie pojawią się komplikacje, ponieważ tak się dzieje, ale przynajmniej wydaje się, że w jakiś sposób jest możliwe uzyskanie tych danych!
- Ponieważ nadal jest to dość podły sposób przesyłania danych, przyjrzałem się bardziej sterownikom szeregowym USB. Moduły Próbowałem załadować (
usb-serial-simple
,usb-debug
,safe-serial
) daje błąd wejścia / wyjścia. Nie sądzę, żeby był wbudowany w jądro, ponieważ nie ma żadnych urządzeń / dev / ttyUSB *.
Dzięki za dotychczasowe sugestie - wiem, że to nie jest nawet dobrze zdefiniowane pytanie, ponieważ nie wiecie z góry, które programy / pliki można odczytać, czy nie. Nadal otwarte na lepsze sugestie niż to podejście wideo!
AKTUALIZACJA 3 : Najnowsze rzeczy
- Mam kamerę internetową PS3 Eye i po wyłączeniu automatycznego wzmocnienia i ekspozycji z powodzeniem odczytuję dane z XPS, choć z błędem 1 bajta na sekundę. To wielki sukces --- pierwsze dane zostały wyekstrahowane! Ale tempo jest zbyt wolne, aby uzyskać 820 KB w rozsądnym czasie, a poziom błędu jest zbyt wysoki.
- Problem polega na tym, że pisanie do terminala jest zbyt wolne. Aktualizacje ekranu nie są niczym natychmiastowym, dzięki (myślę) powolności
urxvt
emulatora terminala, do którego mam dostęp. - Odkryłem, że mam dostęp do kompilatora Rust na XPS. Przepisałem skrypt transmisji za pomocą Rust, aby sprawdzić, czy poprawi to szybkość odświeżania terminala, ale to nie pomogło.
- Ponieważ raczej nie będę w stanie zwiększyć liczby klatek na sekundę, będę musiał zwiększyć ilość danych na ramkę. Moje obecne podejście wygląda mniej więcej tak:
Prawa połowa wciąż jest sygnałem zegarowym, miga i gaśnie, aby zaznaczyć nadejście nowych klatek. Ale lewa strona jest teraz siatką, w której każda komórka jest oznaczona czerwonym kwadratem w rogu, a następnie zielona komórka po prawej i w dół od czerwonego kwadratu jest włączana i wyłączana, aby wskazać nieco. Czerwone kwadraty powinny pozwolić komputerowi odbierającemu skalibrować lokalizację komórek. Nie mam jeszcze żadnych danych w ten sposób, ale nad tym pracuję.
- Ktoś zasugerował, żebym zajął się pisaniem kodów QR zamiast tych ad hoc wzorców kolorów. Ja też przyjrzę się temu i być może zastosuję to zamiast tego podejścia gridowego. Korekta błędów byłaby dobrą wygraną, podobnie jak możliwość korzystania ze standardowych bibliotek do dekodowania.
- Dowiedziałem się, że mam dostęp do libasound (biblioteki dźwięków ALSA), ale nie do plików nagłówkowych z nim powiązanych (
alsa/asoundlib.h
lub cokolwiek innego). Jeśli ktoś wie, jak korzystać z biblioteki współużytkowanej bez nagłówków, lub może pomóc mi napisać odpowiedni nagłówek, aby umożliwić mi generowanie wyjścia audio, to mógłbym uzyskać dźwiękowy sposób na wydobycie plików. - Alternatywnie, jeśli ktoś mógłby mi pomóc w manipulowaniu urządzeniami USB bez dostępu do libusb, to może mógłbym coś z tym zrobić?
Idąc naprzód!
AKTUALIZACJA 4 : wyprodukowano wyjście audio!
Użytkownik Francesco Noferi wykonał świetną robotę, pomagając mi korzystać z biblioteki ALSA wspomnianej w poprzedniej aktualizacji. Kompilator C miał problem, ale używając kompilatora Rust mogłem użyć FFI do bezpośredniego połączenia libasound
. Odgrałem teraz sporo moich danych przez dźwięk i to brzmi jak muzyka dla moich uszu! Nadal muszę ustanowić prawdziwy kanał komunikacji, ale mam nadzieję. W tym momencie moim zadaniem jest w zasadzie wdrożenie modemu, więc jeśli ktoś ma jakieś wskazówki na temat dobrych sposobów na zrobienie tego, jestem cały uszu. Idealna modulacja, którą łatwo wdrożyć ręcznie i demodulacja, do której istnieje istniejąca biblioteka, której mogę użyć. Ponieważ teoretycznie może to przebiegać bezpośrednio przez kabel audio, a nie przez sieć telefoniczną możemy zrobić znacznie lepiej niż 56 kb / s lub cokolwiek, co było w normie, ale w praktyce kto wie, co otrzymamy.
Dziękuję wszystkim, którzy śledzą tutaj i at / r / techsupportmacgyver i at / r / rust, którzy wnoszą tak wiele doskonałych sugestii. Wkrótce zaimplementuję ten „modem”, a potem skończę z epilogiem. Myślę, że mógłbym gdzieś umieścić swój kod, aby inni zdesperowani ludzie mogli z niego skorzystać w przyszłości - może nawet repozytorium dziwnych narzędzi do filtrowania, które można łatwo wpisać ręcznie w umierającą maszynę? Zobaczymy co się stanie.
AKTUALIZACJA 5 : Dużo czasu zajęło mi zmaganie się z ALSA i moim tanim urządzeniem przechwytującym audio StarTech USB (brak wbudowanej linii w odbierającym laptopie) i wielu fałszywych zaczyna próbować zrolować własny protokół transmisji, ale w końcu pod radą niektórych Moi entuzjaści krótkofalarstwa, moi przyjaciele, wdrożyłem protokół linii RTTY działający z prędkością 150 bodów, co w praktyce daje mi około 10 bajtów na sekundę. Nie jest super szybki, ale jest dość niezawodny. I prawie gotowe jest przesyłanie mojego pliku 820 KB, zweryfikowanego przy użyciu sum kontrolnych CRC32 (przy użyciu funkcji crc32 z Pythonazlib
moduł, do którego mam dostęp). Więc ogłaszam zwycięstwo i chcę jeszcze raz podziękować! Spędzę trochę więcej czasu na znajdowaniu kolejnych plików, które można odczytać i które mogę przenieść, ale podstawa jest już gotowa. Praca ze wami wszystkimi była fajna!
AKTUALIZACJA KOŃCOWA :
Na maszynie do umierania:
$ 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.
Na maszynie ratunkowej:
$ 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
. Teraz udostępniasz pliki za pośrednictwem serwera HTTP na porcie 8000 . Otwórz przeglądarkę na innym urządzeniu w tej samej sieci i wpisz następujące polecenie:http://<IP address>:8000
i zacznij pobierać wszystko, co możesz.Odpowiedzi:
oto przykładowy program libasound z wystarczającymi definicjami, aby uzyskać podstawowe 2-kanałowe wyjście wav 44,1k wav bez nagłówków.
EDYCJA: Właściwie nie jestem pewien, czy zwykłe zrzucenie danych jako wav działałoby, ponieważ szum podczas nagrywania mógłby łatwo je uszkodzić, ale prawdopodobnie możesz zrobić coś w rodzaju fali sinusoidalnej bitów o wysokiej częstotliwości, która jest bardziej niezawodna
EDYCJA 2: jeśli aplikacja jest obecna i działa, możesz jej również użyć i po prostu napisać program, który generuje surowy dźwięk i potokuje go do aplikacji lub cokolwiek, co może odtwarzać dźwięk
EDYCJA 3: zmodyfikowałem go, aby w ogóle nie używał żadnych nagłówków
jeśli -lasound się nie kompiluje, dodaj -L / path / where / libasound / is / location
źródło
gcc
dał mi „Błąd magistrali” (który pojawia się przy niektórych programach, ale tak naprawdę nie rozumiem.) Na szczęście mam kompilator Rust, który działa, więc korzystając z możliwości FFI Rust, zaimplementowałem twój kod powyżej za pomocą Rust. Kompiluje się i działa, ale wciąż nic nie słyszę. Ale nie jestem pewien, czy głośność jest większa - może być wyciszona. Ale nie mogę uruchomić alsamixer / xfce4-mixer, żeby to sprawdzić. Chcę bezpośrednio użyć alsalibu, aby upewnić się, że głośność jest większa. Dziękuję bardzo za twój wysiłek!Czy działa Twój HDMI lub inny port wyjściowy? Jeśli tak, możesz użyć urządzenia do przechwytywania ekranu, aby nagrać je jako wideo i przetworzyć później. W ten sposób nie jest ograniczany liczbą klatek na sekundę kamery.
źródło
Co powiesz na kodowanie szesnastkowe danych i wysyłanie ich na stronę do terminala?
Możesz dodać przedrostek z przesunięciem w pliku binarnym, aby łatwo można było ponownie wygenerować stronę (do ręcznej korekty?)
Następnie na innym komputerze użyj oprogramowania OCR do zeskanowania stron.
Terminal 80x25 dawałby 1000 bajtów na stronę (minus trochę miejsca na prefiks). W przybliżeniu na 1000 stronach można uzyskać swoje dane. Nawet jedna strona na sekundę to mniej niż 20 minut.
Kodowanie szesnastkowe jest łatwe do napisania, a także zapewnia surową formę korekcji błędów (istnieje tylko 16 prawidłowych symboli).
źródło
czy możesz skonfigurować połączenie sieciowe? ssh może być trochę za dużo, ale jeśli możesz używać NetCata na 2 komputerach, możesz być w stanie przesyłać dane. jeden w trybie wysyłania, jeden w trybie słuchania. Jeśli wszystko, co musisz zrobić, to przesłać tekst, to „mogłoby” być rozwiązaniem.
edytuj: nieważne, po prostu przeczytaj, że straciłeś także połączenie sieciowe ..
źródło
nc
nie ma żadnych innych zależności niż działający stos sieciowy, który miał OP, dopóki go nie wysadził. To drastycznie zmniejsza szanse, że plik wykonywalny się nie uruchomi. Jeśli ktoś napotka podobny problem, jest to zdecydowanie przydatne rozwiązanie.Państwo może być w stanie wysłać do siebie z linii poleceń, w tym wysyłania plików.
Coś jak:
powinno działać.
Kilka innych przykładów: http://www.binarytides.com/linux-mail-command-examples/
źródło
mail
nie należy do (zasadniczo przypadkowej) kolekcji programów, które mogę uruchomić. Plus straciłem połączenie sieciowe :-(cat
tylko pliki i robienie zdjęć za pomocą telefonu komórkowego.Czy Python może uzyskać dostęp do portu wyjścia audio? Możesz spróbować przenieść dane przy użyciu tego - zobacz to lub tamto .
źródło
ossaudiodev
dostępnej biblioteki w instalacji Pythona? Powinien to być standardowy moduł w Linuksie i FreeBSD, jeśli poprawnie przeczytam dokumentację.import ossaudiodev
pracował w moim Ubuntu od razu po wyjęciu z pudełka.cat
- przesłać plik do/dev/snd/pcm...
urządzenia.cat
ing/dev/random
na wszystkie z nich, ale bezskutecznie.Możesz usunąć dysk SSD ze swojego komputera i
dd
/photorec
/ etc na innym działającym komputerze.Oto instrukcja serwisowa Dell dla 9550 - patrz rozdział „Wyjmowanie dysku SSD”. Po usunięciu dysku można uzyskać zewnętrzną obudowę USB M.2 i podłączyć dysk do innego komputera w celu odzyskania danych.
źródło
Długie ujęcie, ale niektóre dystrybucje mają wbudowane protokoły radiowe. Jednym z powszechnych jest fldigi. Spróbuj, który fldigi.
Jeśli masz to lub inne, konwertują tekst na dźwięk, zwykle używając pewnej odmiany kluczowania z przesunięciem fazowym. Sygnał wyjściowy trafia do głośników / słuchawek i jest odbierany przez stabilny komputer w tym samym pokoju, umieszczony na mikrofonie. (Eliminuje to radiotelefony z szynką, które transmitują i odbierają dźwięk przez fale radiowe).
źródło
Podejście do kodów QR może być dobre. Możesz zmieścić jak najwięcej na ekranie i odświeżyć je, gdy tylko terminal na to pozwoli. Następnie nagraj ekran XPS za pomocą kamery (zamiast korzystania z kamery internetowej) i po prostu pracuj nad odszyfrowaniem zapisanego wideo. Pomocne może być nawet użycie funkcji nagrywania w zwolnionym tempie.
źródło
Świetny program :) Mam 1 sugestię: możesz również odczytać dane z ekranu za pomocą fotodiody podłączonej do karty dźwiękowej drugiego komputera
źródło